package Ġcom . good ay apps . widget Ċ Ċ import Ġandroid . graphics .* Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . text . Text Paint Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . annotation . Dimension Ċ import Ġandroidx . annotation . Int Range Ċ import Ġcom . good ay apps . widget . utils . get Gradient Shader Ċ Ċ class ĠText Over Drawable ( Ċĉ ĉ private Ġval Ġsize : ĠInt , Ċĉ ĉ private Ġval Ġborder : ĠBorder , Ċĉ ĉ private Ġval Ġtext : ĠText , Ċ ) Ġ: ĠDrawable () Ġ{ ĊĊ ĉ private Ġvar Ġtext Over Paint Ġ= ĠText Paint ( Paint . ANTI _ ALIAS _ FLAG ). apply Ġ{ Ċĉ ĉ this . text Size Ġ= Ġtext . text Size Ċĉ ĉ this . color Ġ= Ġtext . textColor ĊĊĉ ĉ if Ġ( text . type face Ġ!= Ġnull ) Ġ{ Ċĉĉ ĉ this . type face Ġ= Ġtext . type face Ċĉ ĉ } ĊĊĉ ĉ this . style Ġ= ĠPaint . Style . FILL ĊĊĉ ĉ this . xfer mode Ġ= ĠPort er D uff X fer mode ( Port er D uff . Mode . SRC _ OVER ) Ċ ĉ } ĊĊ ĉ private Ġval Ġtext Over Background Paint Ġ= ĠPaint (). apply Ġ{ Ċĉ ĉ this . is Anti Alias Ġ= Ġtrue Ċĉ ĉ this . style Ġ= ĠPaint . Style . ST RO KE Ċĉ ĉ this . stroke Width Ġ= Ġborder . width . toFloat () Ċĉ ĉ this . shader Ġ= Ġget Gradient Shader ( Ċĉĉĉ ĉ color Start Ġ= Ġborder . color , Ċĉĉĉ ĉ color End Ġ= Ġborder . color Secondary , Ċĉĉĉ ĉ gradient Angle Ġ= Ġborder . gradient Angle . toDouble (), Ċĉĉĉ ĉ size Ġ= Ġsize Ċĉ ĉ ) Ċ ĉ } ĊĊ ĉ private Ġvar Ġbuffer Bitmap : ĠBitmap Ġ= ĠBitmap . create Bitmap ( size , Ġsize , ĠBitmap . Config . ARGB _ 8 8 8 8 ) Ċ ĉ private Ġvar Ġbuffer Canvas : ĠCanvas Ġ= ĠCanvas ( buffer Bitmap ) ĊĊ ĉ private Ġvar Ġcircle Radius Ġ= Ġ 0 f Ċ ĉ private Ġvar Ġcircle Center Ġ= Ġ 0 f Ċ ĉ private Ġvar Ġbackground Circle Radius Ġ= Ġ 0 f ĊĊ ĉ init Ġ{ Ċĉ ĉ circle Radius Ġ= Ġ( size Ġ/ Ġ 2 . 0 f ) Ċĉ ĉ circle Center Ġ= Ġcircle Radius Ċĉ ĉ background Circle Radius Ġ= Ġcircle Radius Ġ- Ġ( border . width Ġ* Ġ. 9 0 f ) Ċ ĉ } ĊĊ ĉ override Ġfun Ġdraw ( canvas : ĠCanvas ) Ġ{ Ċĉ ĉ canvas . save () Ċĉ ĉ canvas . translate ( bounds . left . toFloat (), Ġbounds . top . toFloat ()) ĊĊĉ ĉ draw Text Over () ĊĊĉ ĉ canvas . draw Bitmap ( buffer Bitmap , ĠMatrix (), Ġnull ) Ċĉ ĉ canvas . restore () Ċ ĉ } ĊĊ ĉ override Ġfun Ġset Alpha ( alpha : ĠInt ) Ġ{ Ċ ĉ } ĊĊ ĉ override Ġfun Ġset Color Filter ( color Filter : ĠColor Filter ?) Ġ{ Ċ ĉ } ĊĊ ĉ override Ġfun Ġget Opacity (): ĠInt Ġ{ Ċĉ ĉ return ĠPixel Format . TRANSL UC ENT Ċ ĉ } ĊĊĊ ĉ private Ġfun Ġdraw Text Over () Ġ{ Ċĉ ĉ val Ġradius Ġ= Ġcircle Radius Ġ- Ġborder . width Ċĉ ĉ buffer Canvas . draw Circle ( Ċĉĉĉ ĉ circle Center , Ċĉĉĉ ĉ circle Center , Ċĉĉĉ ĉ radius Ġ- Ġ( border . width Ġ/ Ġ 2 f ), Ċĉĉĉ ĉ text Over Background Paint Ċĉ ĉ ) ĊĊĉ ĉ val Ġpath Ġ= ĠPath () Ċĉ ĉ buffer Canvas . save () Ċĉ ĉ buffer Canvas . rotate (( text . angle ). toFloat (), Ġcircle Center , Ġcircle Center ) Ċĉ ĉ path . add Circle ( circle Center , Ġcircle Center , Ġradius , ĠPath . Direction . CC W ) Ċĉ ĉ buffer Canvas . draw Text On Path ("# OPEN TO WORK ", Ġpath , Ġ 0 f , Ġ 0 f , Ġtext Over Paint ) Ċĉ ĉ buffer Canvas . restore () Ċ ĉ } ĊĊ ĉ @ Text Over Drawable Dsl Ċ ĉ class ĠBuilder Ġ{ Ċĉ ĉ var Ġborder Ġ= ĠBorder () Ċĉ ĉ var Ġtext Ġ= ĠText () ĊĊ ĉ } ĊĊ ĉ @ Text Over Drawable Dsl Ċ ĉ class ĠBorder ( Ċĉĉ ĉ @ Dimension ( unit Ġ= ĠDimension . PX ) Ġval Ġwidth : ĠInt Ġ= Ġ 0 , Ċĉĉ ĉ @ Color Int Ġval Ġcolor : ĠInt Ġ= ĠColor . parse Color ("# FF 5 1 E 4 0 0 "), Ċĉĉ ĉ @ Color Int Ġval Ġcolor Secondary : ĠInt Ġ= Ġcolor , Ċĉĉ ĉ val Ġgradient Angle : ĠInt Ġ= Ġ 0 , Ċ ĉ ) Ġ{ Ċĉ ĉ class ĠBuilder Ġ{ Ċĉĉ ĉ @ Dimension ( unit Ġ= ĠDimension . PX ) Ċĉĉ ĉ var Ġwidth : ĠInt Ġ= Ġ 0 Ċĉĉĉ ĉ private Ġset ĊĊĉĉ ĉ @ Color Int Ċĉĉ ĉ var Ġcolor : ĠInt Ġ= ĠColor . parse Color ("# FF 5 1 E 4 0 0 ") Ċĉĉĉ ĉ private Ġset ĊĊĉĉ ĉ @ Color Int Ċĉĉ ĉ var Ġcolor Secondary : ĠInt ? Ġ= Ġnull Ċĉĉĉ ĉ private Ġset ĊĊĉĉ ĉ var Ġgradient Angle : ĠInt Ġ= Ġ 0 Ċĉĉĉ ĉ private Ġset ĊĊĉĉ ĉ fun Ġcolor (@ Color Int Ġcolor : ĠInt ?) Ġ= Ġapply Ġ{ Ġthis . color Ġ= Ġcolor Ġ?: Ġthis . color Ġ} ĊĊĉĉ ĉ fun Ġcolor Secondary (@ Color Int Ġcolor : ĠInt ?) Ġ= Ġapply Ġ{ Ċĉĉĉ ĉ this . color Secondary Ġ= Ġcolor Ġ?: Ġthis . color Ċĉĉ ĉ } ĊĊĉĉ ĉ fun Ġwidth (@ Dimension ( unit Ġ= ĠDimension . PX ) Ġwidth : ĠInt ?) Ġ= Ġapply Ġ{ Ċĉĉĉ ĉ this . width Ġ= Ġwidth Ġ?: Ġ 0 Ċĉĉ ĉ } ĊĊĉĉ ĉ fun Ġgradient Angle (@ Int Range ( from Ġ= Ġ 0 , Ġto Ġ= Ġ 3 6 0 ) Ġangle : ĠInt ) Ġ= Ġapply Ġ{ Ċĉĉĉ ĉ this . gradient Angle Ġ= Ġangle Ċĉĉ ĉ } ĊĊĉĉ ĉ fun Ġbuild () Ġ= ĠBorder ( width , Ġcolor , Ġcolor Secondary Ġ?: Ġcolor , Ġgradient Angle ) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ @ Text Over Drawable Dsl Ċ ĉ class ĠText ( Ċĉĉ ĉ var Ġtext : ĠCharSequence ? Ġ= Ġ" ?", Ċĉĉ ĉ @ Color Int Ċĉĉ ĉ var ĠtextColor : ĠInt Ġ= ĠColor . WHITE , Ċĉĉ ĉ @ Dimension ( unit Ġ= ĠDimension . PX ) Ċĉĉ ĉ var Ġtext Size : ĠFloat Ġ= Ġ 0 f , Ċĉĉ ĉ var Ġtype face : ĠType face ? Ġ= Ġnull , Ċĉĉ ĉ var Ġangle : ĠInt Ġ= Ġ 0 , Ċ ĉ ) Ġ{ Ċĉ ĉ class ĠBuilder Ġ{ Ċĉĉ ĉ var Ġtext : ĠCharSequence ? Ġ= Ġ" ?" Ċĉĉĉ ĉ private Ġset ĊĊĉĉ ĉ @ Color Int Ċĉĉ ĉ var Ġcolor : ĠInt Ġ= ĠColor . WHITE Ċĉĉĉ ĉ private Ġset ĊĊĉĉ ĉ @ Dimension ( unit Ġ= ĠDimension . PX ) Ċĉĉ ĉ var Ġsize : ĠFloat Ġ= Ġ 0 f Ċĉĉĉ ĉ private Ġset ĊĊĉĉ ĉ var Ġtype face : ĠType face ? Ġ= Ġnull Ċĉĉĉ ĉ private Ġset ĊĊĉĉ ĉ var Ġangle : ĠInt Ġ= Ġ 0 Ċĉĉĉ ĉ private Ġset ĊĊĉĉ ĉ fun Ġtext ( text : ĠCharSequence ?) Ġ= Ġapply Ġ{ Ġthis . text Ġ= Ġtext Ġ?: Ġ" ?" Ġ} ĊĊĉĉ ĉ fun Ġcolor (@ Color Int Ġcolor : ĠInt ?) Ġ= Ġapply Ġ{ Ġthis . color Ġ= Ġcolor Ġ?: Ġthis . color Ġ} ĊĊĉĉ ĉ fun Ġsize (@ Dimension ( unit Ġ= ĠDimension . PX ) Ġsize : ĠFloat ?) Ġ= Ġapply Ġ{ Ċĉĉĉ ĉ this . size Ġ= Ġsize Ġ?: Ġ 0 f Ċĉĉ ĉ } ĊĊĉĉ ĉ fun Ġtype face ( type face : ĠType face ?) Ġ= Ġapply Ġ{ Ġthis . type face Ġ= Ġtype face Ġ} ĊĊĉĉ ĉ fun Ġangle (@ Int Range ( from Ġ= Ġ 0 , Ġto Ġ= Ġ 3 6 0 ) Ġangle : ĠInt ) Ġ= Ġapply Ġ{ Ċĉĉĉ ĉ this . angle Ġ= Ġangle Ċĉĉ ĉ } ĊĊĉĉ ĉ fun Ġbuild () Ġ= ĠAvatar Drawable . Placeholder ( text , Ġcolor , Ġsize , Ġtype face ) Ċĉ ĉ } Ċ ĉ } Ċ }