package Ġde . luck y works . compose . charts . line Ċ Ċ import Ġandroidx . compose . animation . core . Anim atable Ċ import Ġandroidx . compose . animation . core . Animation Spec Ċ import Ġandroidx . compose . foundation . Canvas Ċ import Ġandroidx . compose . foundation . layout . fill MaxSize Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . La unched Effect Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . geometry . Offset Ċ import Ġandroidx . compose . ui . geometry . Rect Ċ import Ġandroidx . compose . ui . graphics . draw scope . Draw Scope Ċ import Ġde . luck y works . compose . charts . line . Line Chart Utils . calculate Drawable Area Ċ import Ġde . luck y works . compose . charts . line . Line Chart Utils . calculate Fill Path Ċ import Ġde . luck y works . compose . charts . line . Line Chart Utils . calculate Line Path Ċ import Ġde . luck y works . compose . charts . line . Line Chart Utils . calculate Point Location Ċ import Ġde . luck y works . compose . charts . line . Line Chart Utils . calculate SelectedIndex Ċ import Ġde . luck y works . compose . charts . line . Line Chart Utils . calculate X Axis Drawable Area Ċ import Ġde . luck y works . compose . charts . line . Line Chart Utils . calculate X Axis Labels Drawable Area Ċ import Ġde . luck y works . compose . charts . line . Line Chart Utils . calculate Y Axis Drawable Area Ċ import Ġde . luck y works . compose . charts . line . Line Chart Utils . with Progress Ċ import Ġde . luck y works . compose . charts . line . renderer . line . Gradient Line Shader Ċ import Ġde . luck y works . compose . charts . line . renderer . line . Line Drawer Ċ import Ġde . luck y works . compose . charts . line . renderer . line . Line Shader Ċ import Ġde . luck y works . compose . charts . line . renderer . line . Solid Line Drawer Ċ import Ġde . luck y works . compose . charts . line . renderer . point . Filled Circular Point Drawer Ċ import Ġde . luck y works . compose . charts . line . renderer . point . Point Drawer Ċ import Ġde . luck y works . compose . charts . line . renderer . xaxis . Simple X Axis Drawer Ċ import Ġde . luck y works . compose . charts . line . renderer . xaxis . X Axis Drawer Ċ import Ġde . luck y works . compose . charts . line . renderer . yaxis . Simple Y Axis Drawer Ċ import Ġde . luck y works . compose . charts . line . renderer . yaxis . Y Axis Drawer Ċ import Ġde . luck y works . compose . charts . pie chart . animation . simple Chart Animation Ċ import Ġde . luck y works . compose . charts . pie chart . utils . on Touch Ċ Ċ /** Ċ Ġ* ĠA Ġline Ġchart Ġthat Ġanim ates Ġwhen Ġloaded . Ċ Ġ*/ Ċ @ Composable Ċ fun ĠLine Chart ( ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġline Chart Data : ĠLine Chart Data , ĊĠĠĠ Ġanimation : ĠAnimation Spec < Float > Ġ= Ġsimple Chart Animation (), ĊĠĠĠ Ġpoint Drawer : ĠPoint Drawer Ġ= ĠF illed Circular Point Drawer (), ĊĠĠĠ Ġline Drawer : ĠLine Drawer Ġ= ĠSolid Line Drawer (), ĊĠĠĠ Ġline Shader : ĠLine Shader Ġ= ĠGradient Line Shader (), ĊĠĠĠ Ġx Axis Drawer : ĠX Axis Drawer Ġ= ĠSimple X Axis Drawer (), ĊĠĠĠ Ġy Axis Drawer : ĠY Axis Drawer Ġ= ĠSimple Y Axis Drawer (), ĊĠĠĠ Ġhorizontal Offset : ĠFloat Ġ= Ġ 0 . 0 f , ĊĠĠĠ Ġon Release : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġon Selection : Ġ(( index : ĠInt , Ġpoint : ĠLine Chart Data . Point , Ġtouch Event : ĠOffset ) Ġ-> ĠUnit )? Ġ= Ġnull , Ċ ) Ġ{ ĊĠĠĠ Ġcheck ( horizontal Offset Ġin Ġ 0 f .. 0 . 2 5 f ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" Horizontal Ġoffset Ġis Ġthe Ġ% Ġoffset Ġfrom Ġsides , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" and Ġshould Ġbe Ġbetween Ġ 0 % - 2 5 %" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtransition Animation Ġ= Ġremember ( line Chart Data . points ) Ġ{ ĠAnim atable ( initial Value Ġ= Ġ 0 f ) Ġ} ĊĊĠĠĠ ĠLa unched Effect ( line Chart Data . points ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition Animation . snap To ( 0 f ) ĊĠĠĠĠĠĠĠ Ġtransition Animation . animate To ( 1 f , Ġanimation Spec Ġ= Ġanimation ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtouch Event Ġ= Ġremember Ġ{ Ġmutable State Of < Offset ? >( null ) Ġ} ĊĊĠĠĠ ĠCanvas ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill MaxSize () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Touch ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Touch Ġ= Ġ{ Ġoffset Ġ-> Ġtouch Event . value Ġ= Ġoffset Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Release Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch Event . value Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Release ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġy Axis Drawable Area Ġ= Ġcalculate Y Axis Drawable Area ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Axis Label Size Ġ= Ġx Axis Drawer . required Height ( this ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġsize ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġx Axis Drawable Area Ġ= Ġcalculate X Axis Drawable Area ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Axis Width Ġ= Ġy Axis Drawable Area . width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Height Ġ= Ġx Axis Drawer . required Height ( this ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġsize ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġx Axis Labels Drawable Area Ġ= Ġcalculate X Axis Labels Drawable Area ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Axis Drawable Area Ġ= Ġx Axis Drawable Area , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ= Ġhorizontal Offset ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġchart Drawable Area Ġ= Ġcalculate Drawable Area ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Axis Drawable Area Ġ= Ġx Axis Drawable Area , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Axis Drawable Area Ġ= Ġy Axis Drawable Area , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġsize , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ= Ġhorizontal Offset ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġselected Index Ġ= Ġtouch Event . value ?. let Ġ{ Ġtouch Event Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalculate SelectedIndex ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Chart Data Ġ= Ġline Chart Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchart Drawable Area Ġ= Ġchart Drawable Area , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtouch Event Ġ= Ġtouch Event ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Selection ?. invoke ( it , Ġline Chart Data . points [ it ], Ġtouch Event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġline Chart Data . points . forEach Indexed Ġ{ Ġindex , Ġpoint Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Progress ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġindex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Chart Data Ġ= Ġline Chart Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransition Progress Ġ= Ġtransition Animation . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoint Location Ġ= Ġcalculate Point Location ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable Area Ġ= Ġchart Drawable Area , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Chart Data Ġ= Ġline Chart Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Ġ= Ġpoint , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġindex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Drawer . draw Point ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Scope Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcenter Ġ= Ġpoint Location , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Dragging Ġ= Ġselected Index Ġ!= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Selected Ġ= Ġselected Index Ġ== Ġindex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġselected Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Drawer . draw Selected Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Scope Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable Area Ġ= Ġchart Drawable Area , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Ġ= Ġpoint , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Location Ġ= Ġpoint Location , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdraw Axis ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline Chart Data Ġ= Ġline Chart Data , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscope Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Axis Drawer Ġ= Ġx Axis Drawer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Axis Drawable Area Ġ= Ġx Axis Drawable Area , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Axis Drawable Area Ġ= Ġy Axis Drawable Area , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Axis Labels Drawable Area Ġ= Ġx Axis Labels Drawable Area , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Axis Drawer Ġ= Ġy Axis Drawer , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDraw Ġthe Ġchart Ġline . ĊĠĠĠĠĠĠĠ Ġline Shader . fill Line ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Scope Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfill Path Ġ= Ġcalculate Fill Path ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable Area Ġ= Ġchart Drawable Area , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Chart Data Ġ= Ġline Chart Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransition Progress Ġ= Ġtransition Animation . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Dragging Ġ= Ġselected Index Ġ!= Ġnull , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġline Drawer . draw Line ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Scope Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline Path Ġ= Ġcalculate Line Path ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable Area Ġ= Ġchart Drawable Area , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Chart Data Ġ= Ġline Chart Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransition Progress Ġ= Ġtransition Animation . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Dragging Ġ= Ġselected Index Ġ!= Ġnull , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġdraw Axis ( ĊĠĠĠ Ġline Chart Data : ĠLine Chart Data , ĊĠĠĠ Ġscope : ĠDraw Scope , ĊĠĠĠ Ġx Axis Drawer : ĠX Axis Drawer , ĊĠĠĠ Ġx Axis Drawable Area : ĠRect , ĊĠĠĠ Ġy Axis Drawable Area : ĠRect , ĊĠĠĠ Ġx Axis Labels Drawable Area : ĠRect , ĊĠĠĠ Ġy Axis Drawer : ĠY Axis Drawer , Ċ ) Ġ{ ĊĊĠĠĠ Ġ// ĠDraw Ġthe ĠX ĠAxis Ġline . ĊĠĠĠ Ġx Axis Drawer . draw Axis Line ( ĊĠĠĠĠĠĠĠ Ġdraw Scope Ġ= Ġscope , ĊĠĠĠĠĠĠĠ Ġdrawable Area Ġ= Ġx Axis Drawable Area , ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġx Axis Drawer . draw Axis Labels ( ĊĠĠĠĠĠĠĠ Ġdraw Scope Ġ= Ġscope , ĊĠĠĠĠĠĠĠ Ġdrawable Area Ġ= Ġx Axis Labels Drawable Area , ĊĠĠĠĠĠĠĠ Ġlabels Ġ= Ġline Chart Data . points . map Ġ{ Ġit . label Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ// ĠDraw Ġthe ĠY ĠAxis Ġline . ĊĠĠĠ Ġy Axis Drawer . draw Axis Line ( ĊĠĠĠĠĠĠĠ Ġdraw Scope Ġ= Ġscope , ĊĠĠĠĠĠĠĠ Ġdrawable Area Ġ= Ġy Axis Drawable Area ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġy Axis Drawer . draw Axis Labels ( ĊĠĠĠĠĠĠĠ Ġdraw Scope Ġ= Ġscope , ĊĠĠĠĠĠĠĠ Ġdrawable Area Ġ= Ġy Axis Drawable Area , ĊĠĠĠĠĠĠĠ Ġmin Value Ġ= Ġline Chart Data . min Y Value , ĊĠĠĠĠĠĠĠ ĠmaxValue Ġ= Ġline Chart Data . max Y Value ĊĠĠĠ Ġ) Ċ } Ċ