package Ġcom . m adr apps . pi ko lo . components Ċ Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . PointF Ċ import Ġandroid . graphics . Shader Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . Motion Event .* Ċ import Ġcom . m adr apps . pi ko lo . Metrics Ċ import Ġcom . m adr apps . pi ko lo . Paint s Ċ import Ġcom . m adr apps . pi ko lo . color Ċ import Ġcom . m adr apps . pi ko lo . listeners . On Color Selection Listener Ċ Ċ internal Ġabstract Ġclass ĠColor Component ( val Ġmetrics : ĠMetrics , Ġval Ġpaint s : ĠPaint s ) Ġ{ ĊĊĠĠĠ Ġvar Ġradius : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġvar ĠstrokeWidth : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġstroke Color : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar ĠborderWidth : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġindicator Radius : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġindicator Stroke Width : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġindicator Stroke Color : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġindicator X : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġindicator Y : ĠFloat Ġ= Ġ 0 f ĊĊĠĠĠ Ġvar Ġangle : ĠDouble Ġ= Ġ 0 . 0 ĊĊĠĠĠ Ġprivate Ġvar Ġis Tou ched Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġcolor Selection Listener : ĠOn Color Selection Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġabstract Ġfun Ġget Shader (): ĠShader ĊĠĠĠ Ġabstract Ġfun Ġdraw Component ( canvas : ĠCanvas ) ĊĊĠĠĠ Ġfun Ġon Touch Event ( event : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġevent . x ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġevent . y ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( PointF ( x , Ġy ) Ġin Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Selection Listener ?. on Color Selection Start ( metrics . color ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Tou ched Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalculate Angle ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Component ( angle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Selection Listener ?. on Color Selected ( metrics . color ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Tou ched ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalculate Angle ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Component ( angle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Selection Listener ?. on Color Selected ( metrics . color ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Tou ched ) Ġcolor Selection Listener ?. on Color Selection End ( metrics . color ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Tou ched Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġis Tou ched ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġcontains ( point : ĠPoint F ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtouch Radius Ġ= Ġindicator Radius Ġ+ Ġindicator Radius Ġ* Ġ 0 . 2 ĊĠĠĠĠĠĠĠ Ġreturn Ġpoint . x Ġin Ġ( indicator X Ġ- Ġtouch Radius ) .. ( indicator X Ġ+ Ġtouch Radius ) Ġ&& Ġpoint . y Ġin Ġ( indicator Y Ġ- Ġtouch Radius ) .. ( indicator Y Ġ+ Ġtouch Radius ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġcalculate Angle ( x 1 : ĠFloat , Ġy 1 : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġx 1 Ġ- Ġmetrics . center X ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġy 1 Ġ- Ġmetrics . center Y ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= ĠMath . sqrt (( x Ġ* Ġx Ġ+ Ġy Ġ* Ġy ). toDouble ()) ĊĊĠĠĠĠĠĠĠ Ġangle Ġ= ĠMath . to Degrees ( Math . acos ( x Ġ/ Ġc )) ĊĠĠĠĠĠĠĠ Ġif Ġ( y Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġangle Ġ= Ġ 3 6 0 Ġ- Ġangle ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġupdate Component ( angle : ĠDouble ) ĊĊĠĠĠ Ġabstract Ġfun Ġupdate Angle ( component : ĠFloat ) ĊĊĠĠĠ Ġinternal Ġfun Ġset Color Selection Listener ( listener : ĠOn Color Selection Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcolor Selection Listener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġset Radius ( outer Radius : ĠFloat , Ġoffset : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġradius Ġ= Ġouter Radius Ġ- Ġ( Math . max ( indicator Radius Ġ+ Ġindicator Stroke Width , ĠstrokeWidth )) Ġ- Ġoffset ĊĠĠĠ Ġ} Ċ }