package Ġcom . github . ek lipse 2 k 8 . chart ing . renderer Ċ Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Paint Ċ import Ġcom . github . ek lipse 2 k 8 . chart ing . animation . Chart Animator Ċ import Ġcom . github . ek lipse 2 k 8 . chart ing . data . Entry Ċ import Ġcom . github . ek lipse 2 k 8 . chart ing . highlight . Highlight Ċ import Ġcom . github . ek lipse 2 k 8 . chart ing . interfaces . dat apro vider . Bubble DataProvider Ċ import Ġcom . github . ek lipse 2 k 8 . chart ing . interfaces . datasets . I Bar Line Scatter C andle Bubble DataSet Ċ import Ġcom . github . ek lipse 2 k 8 . chart ing . interfaces . datasets . IB ubble DataSet Ċ import Ġcom . github . ek lipse 2 k 8 . chart ing . utils . MP PointF Ċ import Ġcom . github . ek lipse 2 k 8 . chart ing . utils . Utils Ċ import Ġcom . github . ek lipse 2 k 8 . chart ing . utils . View Port Handler Ċ import Ġkotlin . math .* Ċ Ċ /** Ċ Ġ* ĠB ubble Ġchart Ġimplementation : ĠCopyright Ġ 2 0 1 5 ĠP ier re - Mar c ĠA i rol di ĠLicensed Ġunder ĠApache ĠLicense Ġ 2 . 0 Ċ Ġ* ĠPort ed Ġby ĠDaniel ĠCo hen ĠG indi Ċ Ġ*/ Ċ class ĠB ubble Chart Renderer ( ĊĠĠĠ Ġ@ Jvm Field Ġvar Ġm Chart : ĠB ubble DataProvider , ĊĠĠĠ Ġanim ator : ĠChart Animator ?, ĊĠĠĠ Ġview Port Handler : ĠView Port Handler ? Ċ ) Ġ: ĠBar Line Scatter C andle Bubble Renderer ( anim ator !! , Ġview Port Handler !! ) Ġ{ ĊĊĠ Ġoverride Ġfun Ġinit Buffers () Ġ{} ĊĊĠ Ġoverride Ġfun Ġdraw Data ( c : ĠCanvas ) Ġ{ ĊĠĠĠ Ġm Chart . bubble Data ?. data Sets ?. forEach Ġ{ Ġset Ġ-> Ġif Ġ( set . isVisible ) Ġdraw DataSet ( c , Ġset ) Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġsize Buffer Ġ= ĠFloat Array ( 4 ) ĊĊĠ Ġprivate Ġval Ġpoint Buffer Ġ= ĠFloat Array ( 2 ) ĊĊĠ Ġprotected Ġfun Ġget Shape Size ( ĊĠĠĠĠĠ Ġentry Size : ĠFloat , ĊĠĠĠĠĠ ĠmaxSize : ĠFloat , ĊĠĠĠĠĠ Ġreference : ĠFloat , ĊĠĠĠĠĠ Ġnormalize Size : ĠBoolean ĊĠ Ġ): ĠFloat Ġ{ ĊĠĠĠ Ġval Ġfactor Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( normalize Size ) Ġif Ġ( maxSize Ġ== Ġ 0 f ) Ġ 1 f Ġelse Ġsqrt ( entry Size Ġ/ ĠmaxSize ) Ġelse Ġentry Size ĊĠĠĠ Ġreturn Ġreference Ġ* Ġfactor ĊĠ Ġ} ĊĊĠ Ġprotected Ġfun Ġdraw DataSet ( c : ĠCanvas , ĠdataSet : ĠIB ubble DataSet ) Ġ{ ĊĠĠĠ Ġif Ġ( data Set . entry Count Ġ< Ġ 1 ) Ġreturn ĊĠĠĠ Ġval Ġtrans Ġ= Ġm Chart . get Transformer ( data Set . axis Dependency ) ĊĠĠĠ Ġval Ġphase Y Ġ= Ġanim ator . phase Y ĊĠĠĠ Ġm X Bounds [ m Chart ] Ġ= ĠdataSet Ġas ĠI Bar Line Scatter C andle Bubble DataSet < Entry > ĊĠĠĠ Ġsize Buffer [ 0 ] Ġ= Ġ 0 f ĊĠĠĠ Ġsize Buffer [ 2 ] Ġ= Ġ 1 f ĊĠĠĠ Ġtrans . point Values To Pixel ( size Buffer ) ĊĠĠĠ Ġval Ġnormalize Size Ġ= ĠdataSet . is Normalize Size Enabled ĊĊĠĠĠ Ġ// Ġcalc ual te Ġthe Ġfull Ġwidth Ġof Ġ 1 Ġstep Ġon Ġthe Ġx - axis ĊĠĠĠ Ġval Ġmax Bubble Width Ġ= Ġabs ( size Buffer [ 2 ] Ġ- Ġsize Buffer [ 0 ]) ĊĠĠĠ Ġval Ġmax Bubble Height Ġ= Ġabs ( view Port Handler . content Bottom () Ġ- Ġview Port Handler . content Top ()) ĊĠĠĠ Ġval Ġreference Size Ġ= Ġmin ( max Bubble Height , Ġmax Bubble Width ) ĊĠĠĠ Ġfor Ġ( j Ġin Ġm X Bounds . min .. m X Bounds . range Ġ+ Ġm X Bounds . min ) Ġ{ ĊĠĠĠĠĠ Ġval Ġentry Ġ= ĠdataSet . getEntry For Index ( j ) ĊĠĠĠĠĠ Ġpoint Buffer [ 0 ] Ġ= Ġentry . x ĊĠĠĠĠĠ Ġpoint Buffer [ 1 ] Ġ= Ġentry . y Ġ* Ġphase Y ĊĠĠĠĠĠ Ġtrans . point Values To Pixel ( point Buffer ) ĊĠĠĠĠĠ Ġval Ġshape Half Ġ= Ġget Shape Size ( entry . size , ĠdataSet . maxSize , Ġreference Size , Ġnormalize Size ) Ġ/ Ġ 2 f ĊĠĠĠĠĠ Ġif Ġ(! view Port Handler . isIn Bounds Top ( point Buffer [ 1 ] Ġ+ Ġshape Half ) Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ! view Port Handler . isIn Bounds Bottom ( point Buffer [ 1 ] Ġ- Ġshape Half )) ĊĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠ Ġif Ġ(! view Port Handler . isIn Bounds Left ( point Buffer [ 0 ] Ġ+ Ġshape Half )) Ġcontinue ĊĠĠĠĠĠ Ġif Ġ(! view Port Handler . isIn Bounds Right ( point Buffer [ 0 ] Ġ- Ġshape Half )) Ġbreak ĊĠĠĠĠĠ Ġval Ġcolor Ġ= ĠdataSet . getColor ( j ) ĊĠĠĠĠĠ Ġrender Paint . color Ġ= Ġcolor ĊĠĠĠĠĠ Ġc . draw Circle ( point Buffer [ 0 ], Ġpoint Buffer [ 1 ], Ġshape Half , Ġrender Paint ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdraw Values ( c : ĠCanvas ) Ġ{ ĊĠĠĠ Ġval Ġbubble Data Ġ= Ġm Chart . bubble Data Ġ?: Ġreturn ĊĊĠĠĠ Ġ// Ġif Ġvalues Ġare Ġdrawn ĊĠĠĠ Ġif Ġ( is Drawing Values Allowed ( m Chart )) Ġ{ ĊĠĠĠĠĠ Ġval Ġdata Sets Ġ= Ġbubble Data . data Sets ĊĠĠĠĠĠ Ġval Ġline Height Ġ= ĠUtils . calc Text Height ( value Paint , Ġ" 1 "). toFloat () ĊĠĠĠĠĠ Ġfor Ġ( i Ġin Ġdata Sets . indices ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠdataSet Ġ= Ġdata Sets [ i ] ĊĠĠĠĠĠĠĠ Ġif Ġ(! should Draw Values ( data Set ) Ġ|| ĠdataSet . entry Count Ġ< Ġ 1 ) Ġcontinue ĊĊĠĠĠĠĠĠĠ Ġ// Ġapply Ġthe Ġtext - st yling Ġdefined Ġby Ġthe ĠDataSet ĊĠĠĠĠĠĠĠ Ġapply Value TextStyle ( data Set ) ĊĠĠĠĠĠĠĠ Ġval Ġphase X Ġ= Ġmax ( 0 f , Ġmin ( 1 f , Ġanim ator . phase X )) ĊĠĠĠĠĠĠĠ Ġval Ġphase Y Ġ= Ġanim ator . phase Y ĊĠĠĠĠĠĠĠ Ġm X Bounds [ m Chart ] Ġ= ĠdataSet Ġas ĠI Bar Line Scatter C andle Bubble DataSet < Entry > ĊĠĠĠĠĠĠĠ Ġval Ġpositions Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Chart ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Transformer ( data Set . axis Dependency ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. generate Trans formed Values Bubble ( data Set , Ġphase Y , Ġm X Bounds . min , Ġm X Bounds . max ) ĊĠĠĠĠĠĠĠ Ġval Ġalpha Ġ= Ġif Ġ( phase X Ġ== Ġ 1 f ) Ġphase Y Ġelse Ġphase X ĊĠĠĠĠĠĠĠ Ġval Ġicons Offset Ġ= ĊĠĠĠĠĠĠĠĠĠ ĠdataSet . icons Offset ?. let Ġ{ ĠMP PointF . getInstance ( it ) Ġ} Ġ?: ĠMP PointF . getInstance ( 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġicons Offset . x Ġ= ĠUtils . convert Dp To Pixel ( icons Offset . x ) ĊĠĠĠĠĠĠĠ Ġicons Offset . y Ġ= ĠUtils . convert Dp To Pixel ( icons Offset . y ) ĊĠĠĠĠĠĠĠ Ġvar Ġj Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( j Ġ< Ġpositions . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġvar Ġvalue TextColor Ġ= ĠdataSet . getValue TextColor ( j Ġ/ Ġ 2 Ġ+ Ġm X Bounds . min ) ĊĠĠĠĠĠĠĠĠĠ Ġvalue TextColor Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . arg b ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 2 5 5 f Ġ* Ġalpha ). round ToInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . red ( value TextColor ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . green ( value TextColor ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . blue ( value TextColor )) ĊĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġpositions [ j ] ĊĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġpositions [ j Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ(! view Port Handler . isIn Bounds Right ( x )) Ġbreak ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ(! view Port Handler . isIn Bounds Left ( x ) Ġ|| Ġ! view Port Handler . isIn Bounds Y ( y )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġj Ġ+= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġval Ġentry Ġ= ĠdataSet . getEntry For Index ( j Ġ/ Ġ 2 Ġ+ Ġm X Bounds . min ) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Set . is Draw Values Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdataSet . value Formatter !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ+ Ġ 0 . 5 f Ġ* Ġline Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue TextColor ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( entry . icon Ġ!= Ġnull Ġ&& ĠdataSet . is Draw Icons Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon Ġ= Ġentry . icon ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUtils . drawImage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( x Ġ+ Ġicons Offset . x ). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( y Ġ+ Ġicons Offset . y ). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon . intrinsic Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon . intrinsic Height ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġj Ġ+= Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠMP PointF . recycle Instance ( icons Offset ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġ_ h sv Buffer Ġ= ĠFloat Array ( 3 ) ĊĊĠ Ġoverride Ġfun Ġdraw Extras ( c : ĠCanvas ) Ġ= ĠUnit ĊĊĠ Ġoverride Ġfun Ġdraw Highlight ed ( c : ĠCanvas , Ġindices : ĠArray < Highlight ?> ?) Ġ{ ĊĠĠĠ Ġval Ġbubble Data Ġ= Ġm Chart . bubble Data Ġ?: Ġreturn ĊĠĠĠ Ġval Ġphase Y Ġ= Ġanim ator . phase Y ĊĠĠĠ Ġindices ?. forEach Ġ{ Ġhigh Ġ-> ĊĠĠĠĠĠ Ġif Ġ( high Ġ== Ġnull ) Ġreturn @ forEach ĊĠĠĠĠĠ Ġval Ġset Ġ= Ġbubble Data . getData Set ByIndex ( high . data Set Index ) ĊĠĠĠĠĠ Ġif Ġ( set Ġ== Ġnull Ġ|| Ġ! set . is Highlight Enabled ) Ġreturn @ forEach ĊĠĠĠĠĠ Ġval Ġentry Ġ= Ġset . getEntry For X Value ( high . x , Ġhigh . y ) Ġ?: Ġreturn @ forEach ĊĠĠĠĠĠ Ġif Ġ( entry . y Ġ!= Ġhigh . y ) Ġreturn @ forEach ĊĠĠĠĠĠ Ġif Ġ(! isIn Bounds X ( entry , Ġset )) Ġreturn @ forEach ĊĠĠĠĠĠ Ġval Ġtrans Ġ= Ġm Chart . get Transformer ( set . axis Dependency ) ĊĠĠĠĠĠ Ġsize Buffer [ 0 ] Ġ= Ġ 0 f ĊĠĠĠĠĠ Ġsize Buffer [ 2 ] Ġ= Ġ 1 f ĊĠĠĠĠĠ Ġtrans . point Values To Pixel ( size Buffer ) ĊĠĠĠĠĠ Ġval Ġnormalize Size Ġ= Ġset . is Normalize Size Enabled ĊĊĠĠĠĠĠ Ġ// Ġcalc ual te Ġthe Ġfull Ġwidth Ġof Ġ 1 Ġstep Ġon Ġthe Ġx - axis ĊĠĠĠĠĠ Ġval Ġmax Bubble Width Ġ= Ġabs ( size Buffer [ 2 ] Ġ- Ġsize Buffer [ 0 ]) ĊĠĠĠĠĠ Ġval Ġmax Bubble Height Ġ= Ġabs ( view Port Handler . content Bottom () Ġ- Ġview Port Handler . content Top ()) ĊĠĠĠĠĠ Ġval Ġreference Size Ġ= Ġmin ( max Bubble Height , Ġmax Bubble Width ) ĊĠĠĠĠĠ Ġpoint Buffer [ 0 ] Ġ= Ġentry . x ĊĠĠĠĠĠ Ġpoint Buffer [ 1 ] Ġ= Ġentry . y Ġ* Ġphase Y ĊĠĠĠĠĠ Ġtrans . point Values To Pixel ( point Buffer ) ĊĠĠĠĠĠ Ġhigh . set Draw ( point Buffer [ 0 ], Ġpoint Buffer [ 1 ]) ĊĠĠĠĠĠ Ġval Ġshape Half Ġ= Ġget Shape Size ( entry . size , Ġset . maxSize , Ġreference Size , Ġnormalize Size ) Ġ/ Ġ 2 f ĊĠĠĠĠĠ Ġif Ġ(! view Port Handler . isIn Bounds Top ( point Buffer [ 1 ] Ġ+ Ġshape Half ) Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ! view Port Handler . isIn Bounds Bottom ( point Buffer [ 1 ] Ġ- Ġshape Half )) ĊĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach ĊĠĠĠĠĠ Ġif Ġ(! view Port Handler . isIn Bounds Left ( point Buffer [ 0 ] Ġ+ Ġshape Half )) Ġreturn @ forEach ĊĠĠĠĠĠ Ġif Ġ(! view Port Handler . isIn Bounds Right ( point Buffer [ 0 ] Ġ- Ġshape Half )) Ġreturn @ forEach ĊĠĠĠĠĠ Ġval Ġoriginal Color Ġ= Ġset . getColor ( entry . x . toInt ()) ĊĠĠĠĠĠ ĠColor . RGB To H SV ( ĊĠĠĠĠĠĠĠĠĠ ĠColor . red ( original Color ), ĊĠĠĠĠĠĠĠĠĠ ĠColor . green ( original Color ), ĊĠĠĠĠĠĠĠĠĠ ĠColor . blue ( original Color ), ĊĠĠĠĠĠĠĠĠĠ Ġ_ h sv Buffer ) ĊĠĠĠĠĠ Ġ_ h sv Buffer [ 2 ] Ġ*= Ġ 0 . 5 f ĊĠĠĠĠĠ Ġval Ġcolor Ġ= ĠColor . H SV To Color ( Color . alpha ( original Color ), Ġ_ h sv Buffer ) ĊĠĠĠĠĠ Ġhighlight Paint . color Ġ= Ġcolor ĊĠĠĠĠĠ Ġhighlight Paint . stroke Width Ġ= Ġset . highlight Circle Width ĊĠĠĠĠĠ Ġc . draw Circle ( point Buffer [ 0 ], Ġpoint Buffer [ 1 ], Ġshape Half , Ġhighlight Paint ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġrender Paint . style Ġ= ĠPaint . Style . FILL ĊĠĠĠ Ġhighlight Paint . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠ Ġhighlight Paint . stroke Width Ġ= ĠUtils . convert Dp To Pixel ( 1 . 5 f ) ĊĠ Ġ} Ċ } Ċ