/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 - 2 0 2 0 ĠD JI Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ* Ċ Ġ*/ Ċ package Ġd ji . v 5 . ux . core . widget . compass Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Rect F Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . annotation . Float Range Ċ import Ġandroidx . annotation . Px Ċ import Ġd ji . v 5 . ux . R Ċ import Ġd ji . v 5 . ux . core . extension . getColor Ċ import Ġd ji . v 5 . ux . core . extension . get Dimension Ċ Ċ private Ġconst Ġval ĠDE AD _ ANGLE Ġ= Ġ 3 0 Ċ private Ġconst Ġval ĠB LINK _ ANGLE Ġ= Ġ 2 7 0 Ċ private Ġconst Ġval ĠSHOW _ ANGLE Ġ= Ġ 1 9 0 Ċ private Ġconst Ġval ĠH IDE _ ANGLE Ġ= Ġ 9 0 Ċ private Ġconst Ġval ĠD URATION _ BL INK : ĠLong Ġ= Ġ 2 0 0 Ċ Ċ /** Ċ Ġ* ĠCustom Ġview Ġto Ġdisplay Ġthe Ġa ircraft Ġg im bal 's Ġheading Ċ Ġ*/ Ċ class ĠG im bal Y aw View Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠView ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĠĠĠ Ġ// region ĠFields ĊĠĠĠ Ġprivate Ġval Ġrect Ġ= ĠRect F () ĊĠĠĠ Ġprivate Ġval Ġpaint : ĠPaint Ġ= ĠPaint () ĊĠĠĠ Ġprivate Ġvar Ġcur B link Color Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġbefore Show Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġyaw Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġabs Y aw Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġyaw Start Angle Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġyaw Sweep Angle Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġinvalid Start Angle Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġinvalid Sweep Angle Ġ= Ġ 0 f ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġstroke Ġwidth Ġfor Ġthe Ġlines Ġin Ġpixels ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Px ĊĠĠĠ Ġ@ Float Range ( from Ġ= Ġ 1 . 0 , Ġto Ġ= ĠMAX _ LINE _ WIDTH . toDouble ()) ĊĠĠĠ Ġvar ĠstrokeWidth Ġ= Ġget Dimension ( R . dim en . ux sdk _ g im bal _ line _ width ) ĊĠĠĠĠĠĠĠ Ġset (@ Float Range ( from Ġ= Ġ 1 . 0 , Ġto Ġ= ĠMAX _ LINE _ WIDTH . toDouble ()) ĠstrokeWidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= ĠstrokeWidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Invalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġyaw Ġcolor ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Color Int ĊĠĠĠ Ġvar Ġyaw Color Ġ= Ġget Color ( R . color . ux sdk _ blue _ material _ A 4 0 0 ) ĊĠĠĠĠĠĠĠ Ġset (@ Color Int Ġyaw Color ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġyaw Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Invalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġinvalid Ġcolor ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Color Int ĊĠĠĠ Ġvar Ġinvalid Color Ġ= Ġget Color ( R . color . ux sdk _ red ) ĊĠĠĠĠĠĠĠ Ġset (@ Color Int Ġinvalid Color ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġinvalid Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Invalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġblink Ġcolor ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Color Int ĊĠĠĠ Ġvar Ġblink Color Ġ= Ġget Color ( R . color . ux sdk _ red _ material _ 9 0 0 _ 3 0 _ percent ) ĊĠĠĠĠĠĠĠ Ġset (@ Color Int Ġblink Color ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġblink Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Invalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// endregion ĊĊĠĠĠ Ġ// region ĠConstructor ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isIn Edit Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpaint . stroke Width Ġ= ĠstrokeWidth ĊĠĠĠĠĠĠĠ Ġpaint . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠ Ġpaint . is Anti Alias Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// endregion ĊĊĠĠĠ Ġ// region ĠUI ĠLogic ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe Ġyaw Ġfor Ġthe Ġview ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġyaw ĠY aw Ġof Ġthe Ġg im bal ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Y aw ( yaw : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . yaw Ġ!= Ġyaw ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . yaw Ġ= Ġyaw ĊĠĠĠĠĠĠĠĠĠĠĠ Ġabs Y aw Ġ= Ġif Ġ( yaw Ġ>= Ġ 0 ) Ġyaw Ġelse Ġ 0 Ġ- Ġyaw ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( abs Y aw Ġ>= ĠSHOW _ ANGLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Show Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( abs Y aw Ġ< ĠH IDE _ ANGLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Show Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyaw Start Angle Ġ= Ġ 0 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyaw Sweep Angle Ġ= Ġ 0 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalid Start Angle Ġ= Ġ 0 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalid Sweep Angle Ġ= ĠDE AD _ ANGLE . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . yaw Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyaw Start Angle Ġ= Ġthis . yaw ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyaw Sweep Angle Ġ= Ġ 0 Ġ- Ġthis . yaw ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalid Start Angle Ġ= Ġ 0 Ġ- ĠDE AD _ ANGLE . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyaw Sweep Angle Ġ= Ġthis . yaw ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Invalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isIn Edit Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġwidth : ĠFloat Ġ= Ġif Ġ( width Ġ< Ġheight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth . toFloat () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight . toFloat () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġhalf Stroke Ġ= ĠstrokeWidth Ġ/ Ġ 2 . 0 f ĊĠĠĠĠĠĠĠ Ġval Ġradius Ġ= Ġwidth Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġrect [ half Stroke , Ġhalf Stroke , Ġwidth Ġ- Ġhalf Stroke ] Ġ= Ġwidth Ġ- Ġhalf Stroke ĊĠĠĠĠĠĠĠ Ġcanvas . save () ĊĠĠĠĠĠĠĠ Ġcanvas . translate ( radius , Ġradius ) ĊĠĠĠĠĠĠĠ Ġcanvas . rotate (- 9 0 . 0 f ) ĊĠĠĠĠĠĠĠ Ġcanvas . translate (- radius , Ġ- radius ) ĊĠĠĠĠĠĠĠ Ġif Ġ( abs Y aw Ġ>= ĠB LINK _ ANGLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcur B link Color Ġ= Ġif Ġ( cur B link Color Ġ== Ġinvalid Color ) Ġblink Color Ġelse Ġinvalid Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġcur B link Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Arc ( rect , Ġinvalid Start Angle , Ġinvalid Sweep Angle , Ġfalse , Ġpaint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Invalidate Delayed ( DURATION _ BL INK ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( before Show ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcur B link Color Ġ= Ġinvalid Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġinvalid Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Arc ( rect , Ġinvalid Start Angle , Ġinvalid Sweep Angle , Ġfalse , Ġpaint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġyaw Color ĊĠĠĠĠĠĠĠ Ġcanvas . draw Arc ( rect , Ġyaw Start Angle , Ġyaw Sweep Angle , Ġfalse , Ġpaint ) ĊĠĠĠĠĠĠĠ Ġcanvas . restore () ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// endregion ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġmaximum Ġwidth Ġof Ġthe Ġlines ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMAX _ LINE _ WIDTH Ġ= Ġ 4 ĊĠĠĠ Ġ} Ċ }