package Ġorg . n atives cript . canvas Ċ Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . util . Log Ċ import Ġorg . json . JSONException Ċ import Ġorg . json . JSONObject Ċ import Ġjava . util . concurrent . Count DownLatch Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġtr ini wiz Ġon Ġ 2 0 1 9 - 0 7 - 0 6 Ċ Ġ*/ Ċ class ĠT N SC an vas Rendering Context 2 D Ġinternal Ġconstructor ( val Ġcanvas : ĠT N SC an vas ) Ġ: Ċ ĉ TN SC an vas Rendering Context Ġ{ ĊĊ ĉ @ Throws ( Throwable :: class ) Ċ ĉ protected Ġfun Ġfinalize () Ġ{ Ċĉ ĉ native Destroy ( canvas . native Context ) Ċ ĉ } ĊĊ ĉ var Ġdirection : ĠT N ST ext Direction Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ print Log (" get Direction ") Ċĉĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉĉ ĉ var Ġvalue Ġ= ĠT N ST ext Direction . L tr Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ value Ġ= Ġif Ġ( native Get Direction ( canvas . native Context ) Ġ== Ġ 1 ) Ġ{ Ċĉĉĉĉ ĉ TN ST ext Direction . R tl Ċĉĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉĉ ĉ TN ST ext Direction . L tr Ċĉĉĉ ĉ } Ċĉĉĉ ĉ lock . count Down () Ċĉĉ ĉ } Ċĉĉ ĉ try Ġ{ Ċĉĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉĉ ĉ } Ġcatch Ġ( e : ĠException ) Ġ{ Ċĉĉ ĉ } Ċĉĉ ĉ return Ġvalue Ċĉ ĉ } Ċĉ ĉ set ( direction ) Ġ{ Ċĉĉ ĉ print Log (" set Direction ") Ċĉĉ ĉ canvas . queue Event Ġ{ Ġnative Set Direction ( canvas . native Context , Ġdirection . to Native ()) Ġ} Ċĉ ĉ } ĊĊ ĉ var Ġfill Style : ĠT NS Color Style Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ print Log (" get Fill Style ") Ċĉĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉĉ ĉ var Ġvalue : ĠT NS Color Style Ġ= ĠT NS Color (" black ") Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ val Ġstyle Ġ= Ġnative Get Fill Style ( Ċĉĉĉĉ ĉ canvas . native Context Ċĉĉĉ ĉ ) ĊĊĉĉĉ ĉ try Ġ{ Ċĉĉĉĉ ĉ val Ġstyle Value Ġ= Ġstyle . getLong (" value ") Ċĉĉĉĉ ĉ value Ġ= Ġwhen Ġ( style . getInt (" value _ type ")) Ġ{ Ċĉĉĉĉĉĉ 0 Ġ-> ĠT NS Color ( style Value ) Ċĉĉĉĉĉĉ 1 Ġ-> ĠT N SC an vas Gradient ( style Value ) Ċĉĉĉĉĉĉ 2 Ġ-> ĠT N SP attern ( style Value ) Ċĉĉĉĉĉ ĉ else Ġ-> ĠT NS Color (" black ") Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ } Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ Ċĉĉĉĉ ĉ e . printStackTrace () Ċĉĉĉ ĉ } Ċĉĉĉ ĉ lock . count Down () Ċĉĉ ĉ } Ċĉĉ ĉ try Ġ{ Ċĉĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉĉ ĉ } Ġcatch Ġ( e : ĠException ) Ġ{ Ċĉĉ ĉ } Ċĉĉ ĉ return Ġvalue Ċĉ ĉ } Ċĉ ĉ set ( value ) Ġ{ Ċĉĉ ĉ print Log (" setFill Style ") Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ when Ġ( value . style Type ) Ġ{ Ċĉĉĉĉ ĉ T NS Color Style Type . Color Ġ-> Ġ{ Ċĉĉĉĉĉ ĉ val Ġcolor Ġ= Ġvalue Ġas ĠT NS Color Ċĉĉĉĉĉ ĉ native Set Fill Color With String ( canvas . native Context , Ġcolor . color ) Ċĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ T NS Color Style Type . Pattern Ġ-> Ġ{ Ċĉĉĉĉĉ ĉ val Ġpattern Ġ= Ġvalue Ġas ĠT N SP attern Ċĉĉĉĉĉ ĉ native Set Fill Style ( canvas . native Context , Ġpattern . style ) Ċĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ T NS Color Style Type . Gradient Ġ-> Ġ{ Ċĉĉĉĉĉ ĉ val Ġgradient Ġ= Ġvalue Ġas ĠT N SC an vas Gradient Ċĉĉĉĉĉ ĉ native Set Fill Style ( canvas . native Context , Ġgradient . style ) Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉ ĉ } ĊĊ ĉ var Ġfilter : ĠString Ċ ĉ get () Ġ{ Ċĉ ĉ print Log (" get Filter ") Ċĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉ ĉ var Ġvalue Ġ= Ġ" none " Ċĉ ĉ canvas . queue Event Ġ{ Ċĉĉ ĉ value Ġ= Ġnative Get Filter ( canvas . native Context ) Ċĉĉ ĉ lock . count Down () Ċĉ ĉ } Ċĉ ĉ try Ġ{ Ċĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉ ĉ } Ġcatch Ġ( e : ĠException ) Ġ{ Ċĉ ĉ } Ċĉ ĉ return Ġvalue Ċ ĉ } Ċ ĉ set ( value ) Ġ{ Ċĉ ĉ print Log (" set Filter ") Ċĉ ĉ canvas . queue Event Ġ{ Ġnative Set Filter ( canvas . native Context , Ġvalue ) Ġ} Ċ ĉ } ĊĊ ĉ var Ġstroke Style : ĠT NS Color Style Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ print Log (" get Stroke Style ") Ċĉĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉĉ ĉ var Ġvalue : ĠT NS Color Style Ġ= ĠT NS Color (" black ") Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ val Ġstyle Ġ= Ġnative Get Stroke Style ( Ċĉĉĉĉ ĉ canvas . native Context Ċĉĉĉ ĉ ) Ċĉĉĉ ĉ try Ġ{ Ċĉĉĉĉ ĉ val Ġstyle Value Ġ= Ġstyle . getLong (" value ") Ċĉĉĉĉ ĉ value Ġ= Ġwhen Ġ( style . getInt (" value _ type ")) Ġ{ Ċĉĉĉĉĉĉ 0 Ġ-> ĠT NS Color ( style Value ) Ċĉĉĉĉĉĉ 1 Ġ-> ĠT N SC an vas Gradient ( style Value ) Ċĉĉĉĉĉĉ 2 Ġ-> ĠT N SP attern ( style Value ) Ċĉĉĉĉĉ ĉ else Ġ-> ĠT NS Color (" black ") Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ } Ġcatch Ġ( ignore : ĠJSON Exception ) Ġ{ Ċĉĉĉ ĉ } Ċĉĉĉ ĉ lock . count Down () Ċĉĉ ĉ } ĊĊĉĉ ĉ try Ġ{ Ċĉĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉĉ ĉ } Ġcatch Ġ( e : ĠException ) Ġ{ Ċĉĉ ĉ } Ċĉĉ ĉ return Ġvalue Ċĉ ĉ } Ċĉ ĉ set ( value ) Ġ{ Ċĉĉ ĉ print Log (" set Stroke Style ") Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ when Ġ( value . style Type ) Ġ{ Ċĉĉĉĉ ĉ T NS Color Style Type . Color Ġ-> Ġ{ Ċĉĉĉĉĉ ĉ val Ġcolor Ġ= Ġvalue Ġas ĠT NS Color Ċĉĉĉĉĉ ĉ native Set Stroke Color With String ( canvas . native Context , Ġcolor . color ) Ċĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ T NS Color Style Type . Pattern Ġ-> Ġ{ Ċĉĉĉĉĉ ĉ val Ġpattern Ġ= Ġvalue Ġas ĠT N SP attern Ċĉĉĉĉĉ ĉ native Set Stroke Style ( canvas . native Context , Ġpattern . style ) Ċĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ T NS Color Style Type . Gradient Ġ-> Ġ{ Ċĉĉĉĉĉ ĉ val Ġgradient Ġ= Ġvalue Ġas ĠT N SC an vas Gradient Ċĉĉĉĉĉ ĉ native Set Stroke Style ( canvas . native Context , Ġgradient . style ) Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉ ĉ } ĊĊ ĉ var ĠlineWidth : ĠFloat Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ print Log (" get LineWidth ") Ċĉĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉĉ ĉ var Ġvalue Ġ= Ġ 1 f Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ value Ġ= Ġnative Get LineWidth ( canvas . native Context ) Ċĉĉĉ ĉ lock . count Down () Ċĉĉ ĉ } Ċĉĉ ĉ try Ġ{ Ċĉĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉĉ ĉ } Ġcatch Ġ( e : ĠException ) Ġ{ Ċĉĉ ĉ } Ċĉĉ ĉ return Ġvalue Ċĉ ĉ } Ċĉ ĉ set ( lineWidth ) Ġ{ Ċĉĉ ĉ print Log (" set LineWidth ") Ċĉĉ ĉ canvas . queue Event Ġ{ Ġnative Set LineWidth ( canvas . native Context , ĠlineWidth ) Ġ} Ċĉ ĉ } ĊĊ ĉ var Ġline Cap : ĠT NS Line Cap Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ print Log (" getLine Cap ") Ċĉĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉĉ ĉ var Ġvalue Ġ= ĠT NS Line Cap . But t Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ value Ġ= ĠT NS Line Cap . from Native ( native Get Line Cap ( canvas . native Context )) Ċĉĉĉ ĉ lock . count Down () Ċĉĉ ĉ } Ċĉĉ ĉ try Ġ{ Ċĉĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉĉ ĉ } Ġcatch Ġ( e : ĠException ) Ġ{ Ċĉĉ ĉ } Ċĉĉ ĉ return Ġvalue Ċĉ ĉ } Ċĉ ĉ set ( value ) Ġ{ Ċĉĉ ĉ print Log (" set Line Cap ") Ċĉĉ ĉ canvas . queue Event Ġ{ Ġnative Set Line Cap ( canvas . native Context , Ġvalue . to Native ()) Ġ} Ċĉ ĉ } ĊĊ ĉ var Ġline Join : ĠT NS Line Join Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ print Log (" getLine Join ") Ċĉĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉĉ ĉ var Ġvalue Ġ= ĠT NS Line Join . Be vel Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ value Ġ= ĠT NS Line Join . from Native ( native Get Line Join ( canvas . native Context )) Ċĉĉĉ ĉ lock . count Down () Ċĉĉ ĉ } Ċĉĉ ĉ try Ġ{ Ċĉĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉĉ ĉ } Ġcatch Ġ( e : ĠException ) Ġ{ Ċĉĉ ĉ } Ċĉĉ ĉ return Ġvalue Ċĉ ĉ } Ċĉ ĉ set ( value ) Ġ{ Ċĉĉ ĉ print Log (" set Line Join ") Ċĉĉ ĉ canvas . queue Event Ġ{ Ġnative Set Line Join ( canvas . native Context , Ġvalue . to Native ()) Ġ} Ċĉ ĉ } ĊĊĊ ĉ var Ġm iter Limit : ĠFloat Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ print Log (" getM iter Limit ") Ċĉĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉĉ ĉ var Ġvalue Ġ= Ġ 1 0 f Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ value Ġ= Ġnative Get M iter Limit ( canvas . native Context ) Ċĉĉĉ ĉ lock . count Down () Ċĉĉ ĉ } Ċĉĉ ĉ try Ġ{ Ċĉĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉĉ ĉ } Ġcatch Ġ( e : ĠException ) Ġ{ Ċĉĉ ĉ } Ċĉĉ ĉ return Ġvalue Ċĉ ĉ } Ċĉ ĉ set ( limit ) Ġ{ Ċĉĉ ĉ print Log (" set M iter Limit ") Ċĉĉ ĉ canvas . queue Event Ġ{ Ġnative Set M iter Limit ( canvas . native Context , Ġlimit ) Ġ} Ċĉ ĉ } ĊĊ ĉ var Ġline Dash Offset : ĠFloat Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ print Log (" getLine Dash Offset ") Ċĉĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉĉ ĉ var Ġvalue Ġ= Ġ 0 f Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ value Ġ= Ġnative Get Line Dash Offset ( canvas . native Context ) Ċĉĉĉ ĉ lock . count Down () Ċĉĉ ĉ } Ċĉĉ ĉ try Ġ{ Ċĉĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉĉ ĉ } Ġcatch Ġ( e : ĠException ) Ġ{ Ċĉĉ ĉ } Ċĉĉ ĉ return Ġvalue Ċĉ ĉ } Ċĉ ĉ set ( offset ) Ġ{ Ċĉĉ ĉ print Log (" set Line Dash Offset ") Ċĉĉ ĉ canvas . queue Event Ġ{ Ġnative Set Line Dash Offset ( canvas . native Context , Ġoffset ) Ġ} Ċĉ ĉ } ĊĊĊ ĉ var Ġline Dash : ĠFloat Array Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ print Log (" getLine Dash ") Ċĉĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉĉ ĉ var Ġvalue Ġ= ĠFloat Array ( 0 ) Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ value Ġ= Ġnative Get Line Dash ( canvas . native Context ) Ċĉĉĉ ĉ lock . count Down () Ċĉĉ ĉ } Ċĉĉ ĉ try Ġ{ Ċĉĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉĉ ĉ } Ġcatch Ġ( e : ĠException ) Ġ{ Ċĉĉ ĉ } Ċĉĉ ĉ return Ġvalue Ċĉ ĉ } Ċĉ ĉ set ( value ) Ġ{ Ċĉĉ ĉ print Log (" set Line Dash ") Ċĉĉ ĉ canvas . queue Event Ġ{ Ġnative Set Line Dash ( canvas . native Context , Ġvalue ) Ġ} Ċĉ ĉ } ĊĊ ĉ var Ġglobal Composite Operation : ĠT NS Composite Operation Type Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ print Log (" getGlobal Composite Operation ") Ċĉĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉĉ ĉ var Ġvalue Ġ= ĠT NS Composite Operation Type . Source Over Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ value Ġ= Ċĉĉĉĉ ĉ T NS Composite Operation Type . from Native ( native Get Global Composite Operation ( canvas . native Context )) Ċĉĉĉ ĉ lock . count Down () Ċĉĉ ĉ } Ċĉĉ ĉ try Ġ{ Ċĉĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉĉ ĉ } Ġcatch Ġ( e : ĠException ) Ġ{ Ċĉĉ ĉ } Ċĉĉ ĉ return Ġvalue Ċĉ ĉ } Ċĉ ĉ set ( value ) Ġ{ Ċĉĉ ĉ print Log (" set Global Composite Operation ") Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ native Set Global Composite Operation ( canvas . native Context , Ġvalue . to Native ()) Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĊ ĉ var Ġglobal Alpha : ĠFloat Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ print Log (" getGlobal Alpha ") Ċĉĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉĉ ĉ var Ġvalue Ġ= Ġ 1 f Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ value Ġ= Ġnative Get Global Alpha ( canvas . native Context ) Ċĉĉĉ ĉ lock . count Down () Ċĉĉ ĉ } Ċĉĉ ĉ try Ġ{ Ċĉĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉĉ ĉ } Ġcatch Ġ( e : Ġjava . lang . Exception ) Ġ{ Ċĉĉ ĉ } Ċĉĉ ĉ return Ġvalue Ċĉ ĉ } Ċĉ ĉ set ( alpha ) Ġ{ Ċĉĉ ĉ print Log (" set Global Alpha ") Ċĉĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉĉ ĉ native Set Global Alpha ( canvas . native Context , Ġalpha ) Ċĉĉ ĉ }) Ċĉ ĉ } ĊĊ ĉ var ĠtextAlign : ĠT N ST ext Alignment Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ print Log (" getText Align ") Ċĉĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉĉ ĉ var Ġvalue Ġ= ĠT N ST ext Alignment . Start Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ value Ġ= ĠT N ST ext Alignment . from Native ( native GetText Align ( canvas . native Context )) Ċĉĉĉ ĉ lock . count Down () Ċĉĉ ĉ } Ċĉĉ ĉ try Ġ{ Ċĉĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉĉ ĉ } Ġcatch Ġ( e : Ġjava . lang . Exception ) Ġ{ Ċĉĉ ĉ } Ċĉĉ ĉ return Ġvalue Ċĉ ĉ } Ċĉ ĉ set ( textAlign ) Ġ{ Ċĉĉ ĉ print Log (" setText Align ") Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ native SetText Align ( canvas . native Context , ĠtextAlign . to Native ()) Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĊ ĉ var Ġshadow Blur : ĠFloat Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ print Log (" get Shadow Blur ") Ċĉĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉĉ ĉ var Ġvalue Ġ= Ġ 0 f Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ value Ġ= Ġnative Get Shadow Blur ( canvas . native Context ) Ċĉĉĉ ĉ lock . count Down () Ċĉĉ ĉ } Ċĉĉ ĉ try Ġ{ Ċĉĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉĉ ĉ } Ġcatch Ġ( e : Ġjava . lang . Exception ) Ġ{ Ċĉĉ ĉ } Ċĉĉ ĉ return Ġvalue Ċĉ ĉ } Ċĉ ĉ set ( blur ) Ġ{ Ċĉĉ ĉ print Log (" set Shadow Blur ") Ċĉĉ ĉ canvas . queue Event Ġ{ Ġnative Set Shadow Blur ( canvas . native Context , Ġblur ) Ġ} Ċĉ ĉ } ĊĊ ĉ var Ġshadow Color : ĠString Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ print Log (" get Shadow Color ") Ċĉĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉĉ ĉ var Ġvalue Ġ= Ġ" rgba ( 0 , 0 , 0 , 0 )" Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ value Ġ= Ġnative Get Shadow Color ( canvas . native Context ) Ċĉĉĉ ĉ lock . count Down () Ċĉĉ ĉ } Ċĉĉ ĉ try Ġ{ Ċĉĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉĉ ĉ } Ġcatch Ġ( e : Ġjava . lang . Exception ) Ġ{ Ċĉĉ ĉ } Ċĉĉ ĉ return Ġvalue Ċĉ ĉ } Ċĉ ĉ set ( color ) Ġ{ Ċĉĉ ĉ print Log (" set Shadow Color ") Ċĉĉ ĉ canvas . queue Event Ġ{ Ġnative Set Shadow Color String ( canvas . native Context , Ġcolor ) Ġ} Ċĉ ĉ } ĊĊ ĉ var Ġshadow Offset X : ĠFloat Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ print Log (" get Shadow Offset X ") Ċĉĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉĉ ĉ var Ġvalue Ġ= Ġ 0 f Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ value Ġ= Ġnative Get Shadow Offset X ( canvas . native Context ) Ċĉĉĉ ĉ lock . count Down () Ċĉĉ ĉ } Ċĉĉ ĉ try Ġ{ Ċĉĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉĉ ĉ } Ġcatch Ġ( e : Ġjava . lang . Exception ) Ġ{ Ċĉĉ ĉ } Ċĉĉ ĉ return Ġvalue Ċĉ ĉ } Ċĉ ĉ set ( x ) Ġ{ Ċĉĉ ĉ print Log (" set Shadow Offset X ") Ċĉĉ ĉ canvas . queue Event Ġ{ Ġnative Set Shadow Offset X ( canvas . native Context , Ġx ) Ġ} Ċĉ ĉ } Ċ ĉ var Ġshadow Offset Y : ĠFloat Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ print Log (" get Shadow Offset Y ") Ċĉĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉĉ ĉ var Ġvalue Ġ= Ġ 0 f Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ value Ġ= Ġnative Get Shadow Offset Y ( canvas . native Context ) Ċĉĉĉ ĉ lock . count Down () Ċĉĉ ĉ } Ċĉĉ ĉ try Ġ{ Ċĉĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉĉ ĉ } Ġcatch Ġ( e : Ġjava . lang . Exception ) Ġ{ Ċĉĉ ĉ } Ċĉĉ ĉ return Ġvalue Ċĉ ĉ } Ċĉ ĉ set ( y ) Ġ{ Ċĉĉ ĉ print Log (" set Shadow Offset Y ") Ċĉĉ ĉ canvas . queue Event Ġ{ Ġnative Set Shadow Offset Y ( canvas . native Context , Ġy ) Ġ} Ċĉ ĉ } ĊĊ ĉ var Ġfont : ĠString Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ print Log (" getFont ") Ċĉĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉĉ ĉ var Ġvalue Ġ= Ġ" 1 0 px Ġsans - serif " Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ value Ġ= Ġnative Get Font ( canvas . native Context ) Ċĉĉĉ ĉ lock . count Down () Ċĉĉ ĉ } Ċĉĉ ĉ try Ġ{ Ċĉĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉĉ ĉ } Ġcatch Ġ( e : Ġjava . lang . Exception ) Ġ{ Ċĉĉ ĉ } Ċĉĉ ĉ return Ġvalue Ċĉ ĉ } Ċĉ ĉ set ( font ) Ġ{ Ċĉĉ ĉ print Log (" setFont ") Ċĉĉ ĉ canvas . queue Event Ġ{ Ġnative Set Font ( canvas . native Context , Ġfont ) Ġ} Ċĉ ĉ } ĊĊĊ ĉ var Ġimage Sm oothing Enabled : ĠBoolean Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ print Log (" getImage Sm oothing Enabled ") Ċĉĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉĉ ĉ var Ġvalue Ġ= Ġfalse Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ value Ġ= Ġnative Get Image Sm oothing Enabled ( canvas . native Context ) Ċĉĉĉ ĉ lock . count Down () Ċĉĉ ĉ } Ċĉĉ ĉ try Ġ{ Ċĉĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉĉ ĉ } Ġcatch Ġ( e : Ġjava . lang . Exception ) Ġ{ Ċĉĉ ĉ } Ċĉĉ ĉ return Ġvalue Ċĉ ĉ } Ċĉ ĉ set ( enabled ) Ġ{ Ċĉĉ ĉ print Log (" setImage Sm oothing Enabled ") Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ native Set Image Sm oothing Enabled ( canvas . native Context , Ġenabled ) Ċĉĉ ĉ } Ċĉ ĉ } ĊĊ ĉ var Ġimage Sm oothing Quality : ĠT NS Image Sm oothing Quality Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ print Log (" getImage Sm oothing Quality ") Ċĉĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉĉ ĉ var Ġvalue Ġ= ĠT NS Image Sm oothing Quality . Low Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ value Ġ= Ċĉĉĉĉ ĉ T NS Image Sm oothing Quality . from Native ( native Get Image Sm oothing Quality ( canvas . native Context )) Ċĉĉĉ ĉ lock . count Down () Ċĉĉ ĉ } Ċĉĉ ĉ try Ġ{ Ċĉĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉĉ ĉ } Ġcatch Ġ( e : Ġjava . lang . Exception ) Ġ{ Ċĉĉ ĉ } Ċĉĉ ĉ return Ġvalue Ċĉ ĉ } Ċĉ ĉ set ( quality ) Ġ{ Ċĉĉ ĉ print Log (" setImage Sm oothing Quality ") Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ native Set Image Sm oothing Quality ( canvas . native Context , Ġquality . to Native ()) Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĊ ĉ var Ġcurrent Transform : ĠT NS DO MM at rix Ċĉ ĉ get () Ġ{ Ċĉĉ ĉ print Log (" getCurrent Transform ") Ċĉĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉĉ ĉ var Ġvalue : ĠT NS DO MM at rix ? Ġ= Ġnull Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ val Ġid Ġ= Ġnative GetCurrent Transform ( canvas . native Context ) Ċĉĉĉ ĉ value Ġ= Ġif Ġ( id Ġ== Ġ 0 L ) Ġ{ Ċĉĉĉĉ ĉ T NS DO MM at rix () Ċĉĉĉ ĉ } Ġelse ĠT NS DO MM at rix ( id ) Ċĉĉĉ ĉ lock . count Down () Ċĉĉ ĉ } Ċĉĉ ĉ try Ġ{ Ċĉĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉĉ ĉ } Ġcatch Ġ( e : ĠException ) Ġ{ Ċĉĉ ĉ } Ċĉĉ ĉ return Ġvalue Ġ?: ĠT NS DO MM at rix () Ċĉ ĉ } Ċĉ ĉ set ( matrix ) Ġ{ Ċĉĉ ĉ print Log (" setCurrent Transform ") Ċĉĉ ĉ canvas . queue Event Ġ{ Ċĉĉĉ ĉ native Set Current Transform ( canvas . native Context , Ġmatrix . matrix ) Ċĉĉ ĉ } Ċĉ ĉ } ĊĊ ĉ private Ġfun Ġupdate Canvas () Ġ{ Ċĉ ĉ // Ġsynchronized Ġ( canvas View . lock ) Ġ{ Ċĉ ĉ canvas . invalidate State Ġ= ĠT N SC an vas . Invalidate State . PENDING Ċĉ ĉ //} Ċ ĉ } ĊĊ ĉ fun Ġclear Rect ( x : ĠFloat , Ġy : ĠFloat , Ġwidth : ĠFloat , Ġheight : ĠFloat ) Ġ{ Ċĉ ĉ print Log (" clear Rect ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉ ĉ native Clear Rect ( canvas . native Context , Ġx , Ġy , Ġwidth , Ġheight ) Ċĉĉ ĉ update Canvas () Ċĉ ĉ }) Ċ ĉ } ĊĊ ĉ fun Ġfill Rect ( x : ĠFloat , Ġy : ĠFloat , Ġwidth : ĠFloat , Ġheight : ĠFloat ) Ġ{ Ċĉ ĉ print Log (" fillRect ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉ ĉ native Fill Rect ( canvas . native Context , Ġx , Ġy , Ġwidth , Ġheight ) Ċĉĉ ĉ update Canvas () Ċĉ ĉ }) Ċ ĉ } ĊĊ ĉ fun Ġstroke Rect ( x : ĠFloat , Ġy : ĠFloat , Ġwidth : ĠFloat , Ġheight : ĠFloat ) Ġ{ Ċĉ ĉ print Log (" stroke Rect ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉ ĉ native Stroke Rect ( canvas . native Context , Ġx , Ġy , Ġwidth , Ġheight ) Ċĉĉ ĉ update Canvas () Ċĉ ĉ }) Ċ ĉ } ĊĊ ĉ fun Ġfill Text ( text : ĠString , Ġx : ĠFloat , Ġy : ĠFloat ) Ġ{ Ċĉ ĉ fill Text ( text , Ġx , Ġy , Ġ 0 f ) Ċ ĉ } ĊĊ ĉ fun Ġfill Text ( text : ĠString , Ġx : ĠFloat , Ġy : ĠFloat , Ġwidth : ĠFloat ) Ġ{ Ċĉ ĉ print Log (" fill Text ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉ ĉ native Fill Text ( canvas . native Context , Ġtext , Ġx , Ġy , Ġwidth ) Ċĉĉ ĉ update Canvas () Ċĉ ĉ }) Ċ ĉ } ĊĊĊ ĉ fun Ġstroke Text ( text : ĠString , Ġx : ĠFloat , Ġy : ĠFloat ) Ġ{ Ċĉ ĉ stroke Text ( text , Ġx , Ġy , Ġ 0 f ) Ċ ĉ } ĊĊ ĉ fun Ġstroke Text ( text : ĠString , Ġx : ĠFloat , Ġy : ĠFloat , Ġwidth : ĠFloat ) Ġ{ Ċĉ ĉ print Log (" stroke Text ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉ ĉ native Stroke Text ( canvas . native Context , Ġtext , Ġx , Ġy , Ġwidth ) Ċĉĉ ĉ update Canvas () Ċĉ ĉ }) Ċ ĉ } ĊĊ ĉ fun Ġrect ( x : ĠFloat , Ġy : ĠFloat , Ġwidth : ĠFloat , Ġheight : ĠFloat ) Ġ{ Ċĉ ĉ print Log (" rect ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ġnative Rect ( canvas . native Context , Ġx , Ġy , Ġwidth , Ġheight ) Ġ}) Ċ ĉ } ĊĊĊ ĉ fun Ġfill () Ġ{ Ċĉ ĉ fill ( T NS Fill Rule . Non Zero ) Ċ ĉ } ĊĊĊ ĉ fun Ġfill ( rule : ĠT NS Fill Rule ) Ġ{ Ċĉ ĉ fill ( 0 , Ġrule . to Native ()) Ċ ĉ } ĊĊ ĉ fun Ġfill ( path : ĠT NS Path 2 D ) Ġ{ Ċĉ ĉ fill ( path , ĠT NS Fill Rule . Non Zero ) Ċ ĉ } ĊĊ ĉ fun Ġfill ( path : ĠT NS Path 2 D , Ġrule : ĠT NS Fill Rule ) Ġ{ Ċĉ ĉ fill ( path . path , Ġrule . to Native ()) Ċ ĉ } ĊĊ ĉ private Ġfun Ġfill ( path : ĠLong , Ġrule : ĠInt ) Ġ{ Ċĉ ĉ print Log (" fill : Ġpath Ġrule ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉ ĉ native Fill ( canvas . native Context , Ġpath , Ġrule ) Ċĉĉ ĉ update Canvas () Ċĉ ĉ }) Ċ ĉ } ĊĊ ĉ fun Ġstroke () Ġ{ Ċĉ ĉ stroke ( 0 ) Ċ ĉ } ĊĊ ĉ fun Ġstroke ( path : ĠT NS Path 2 D ) Ġ{ Ċĉ ĉ stroke ( path . path ) Ċ ĉ } ĊĊ ĉ private Ġfun Ġstroke ( path : ĠLong ) Ġ{ Ċĉ ĉ print Log (" stroke : Ġpath ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉ ĉ native Stroke ( canvas . native Context , Ġpath ) Ċĉĉ ĉ update Canvas () Ċĉ ĉ }) Ċ ĉ } ĊĊ ĉ fun Ġbegin Path () Ġ{ Ċĉ ĉ print Log (" beginPath ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ġnative Begin Path ( canvas . native Context ) Ġ}) Ċ ĉ } ĊĊ ĉ fun Ġmove To ( x : ĠFloat , Ġy : ĠFloat ) Ġ{ Ċĉ ĉ print Log (" moveTo ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ġnative MoveTo ( canvas . native Context , Ġx , Ġy ) Ġ}) Ċ ĉ } ĊĊ ĉ fun Ġline To ( x : ĠFloat , Ġy : ĠFloat ) Ġ{ Ċĉ ĉ print Log (" lineTo ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ġnative Line To ( canvas . native Context , Ġx , Ġy ) Ġ}) Ċ ĉ } ĊĊ ĉ fun Ġclose Path () Ġ{ Ċĉ ĉ print Log (" close Path ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ġnative Close Path ( canvas . native Context ) Ġ}) Ċ ĉ } ĊĊĊ ĉ fun Ġarc ( Ċĉ ĉ x : ĠFloat , Ċĉ ĉ y : ĠFloat , Ċĉ ĉ radius : ĠFloat , Ċĉ ĉ start Angle : ĠFloat , Ċĉ ĉ end Angle : ĠFloat Ċ ĉ ) Ġ{ Ċĉ ĉ arc ( x , Ġy , Ġradius , Ġstart Angle , Ġend Angle , Ġfalse ) Ċ ĉ } ĊĊĊ ĉ fun Ġarc ( Ċĉ ĉ x : ĠFloat , Ċĉ ĉ y : ĠFloat , Ċĉ ĉ radius : ĠFloat , Ċĉ ĉ start Angle : ĠFloat , Ċĉ ĉ end Angle : ĠFloat , Ċĉ ĉ antic lock wise : ĠBoolean Ġ= Ġfalse Ċ ĉ ) Ġ{ Ċĉ ĉ print Log (" arc ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉ ĉ native Arc ( Ċĉĉĉ ĉ canvas . native Context , Ċĉĉĉ ĉ x , Ċĉĉĉ ĉ y , Ċĉĉĉ ĉ radius , Ċĉĉĉ ĉ start Angle , Ċĉĉĉ ĉ end Angle , Ċĉĉĉ ĉ antic lock wise Ċĉĉ ĉ ) Ċĉ ĉ }) Ċ ĉ } ĊĊ ĉ fun Ġarc To ( x 1 : ĠFloat , Ġy 1 : ĠFloat , Ġx 2 : ĠFloat , Ġy 2 : ĠFloat , Ġradius : ĠFloat ) Ġ{ Ċĉ ĉ print Log (" arc To ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ġnative Arc To ( canvas . native Context , Ġx 1 , Ġy 1 , Ġx 2 , Ġy 2 , Ġradius ) Ġ}) Ċ ĉ } ĊĊ ĉ fun Ġbe zier Curve To ( cp 1 x : ĠFloat , Ġcp 1 y : ĠFloat , Ġcp 2 x : ĠFloat , Ġcp 2 y : ĠFloat , Ġx : ĠFloat , Ġy : ĠFloat ) Ġ{ Ċĉ ĉ print Log (" bezier Curve To ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉ ĉ native Bezier Curve To ( Ċĉĉĉ ĉ canvas . native Context , Ċĉĉĉ ĉ cp 1 x , Ċĉĉĉ ĉ cp 1 y , Ċĉĉĉ ĉ cp 2 x , Ċĉĉĉ ĉ cp 2 y , Ċĉĉĉ ĉ x , Ċĉĉĉ ĉ y Ċĉĉ ĉ ) Ċĉ ĉ }) Ċ ĉ } ĊĊĊ ĉ fun Ġel lipse ( Ċĉ ĉ x : ĠFloat , Ċĉ ĉ y : ĠFloat , Ċĉ ĉ radius X : ĠFloat , Ċĉ ĉ radius Y : ĠFloat , Ċĉ ĉ rotation : ĠFloat , Ċĉ ĉ start Angle : ĠFloat , Ċĉ ĉ end Angle : ĠFloat Ċ ĉ ) Ġ{ Ċĉ ĉ ellipse ( x , Ġy , Ġradius X , Ġradius Y , Ġrotation , Ġstart Angle , Ġend Angle , Ġfalse ) Ċ ĉ } ĊĊĊ ĉ fun Ġel lipse ( Ċĉ ĉ x : ĠFloat , Ċĉ ĉ y : ĠFloat , Ċĉ ĉ radius X : ĠFloat , Ċĉ ĉ radius Y : ĠFloat , Ċĉ ĉ rotation : ĠFloat , Ċĉ ĉ start Angle : ĠFloat , Ċĉ ĉ end Angle : ĠFloat , Ċĉ ĉ antic lock wise : ĠBoolean Ċ ĉ ) Ġ{ Ċĉ ĉ print Log (" ellipse ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉ ĉ native Ellipse ( Ċĉĉĉ ĉ canvas . native Context , Ċĉĉĉ ĉ x , Ċĉĉĉ ĉ y , Ċĉĉĉ ĉ radius X , Ċĉĉĉ ĉ radius Y , Ċĉĉĉ ĉ rotation , Ċĉĉĉ ĉ start Angle , Ċĉĉĉ ĉ end Angle , Ċĉĉĉ ĉ antic lock wise Ċĉĉ ĉ ) Ċĉ ĉ }) Ċ ĉ } ĊĊ ĉ fun Ġclip () Ġ{ Ċĉ ĉ clip ( 0 , ĠT NS Fill Rule . Non Zero . to Native ()) Ċ ĉ } ĊĊ ĉ fun Ġclip ( rule : ĠT NS Fill Rule ) Ġ{ Ċĉ ĉ clip ( 0 , Ġrule . to Native ()) Ċ ĉ } ĊĊ ĉ fun Ġclip ( path : ĠT NS Path 2 D ) Ġ{ Ċĉ ĉ print Log (" clip : Ġpath ") Ċĉ ĉ clip ( path , ĠT NS Fill Rule . Non Zero ) Ċ ĉ } ĊĊ ĉ fun Ġclip ( path : ĠT NS Path 2 D , Ġrule : ĠT NS Fill Rule ) Ġ{ Ċĉ ĉ print Log (" clip : Ġpath Ġrule ") Ċĉ ĉ clip ( path . path , Ġrule . to Native ()) Ċ ĉ } ĊĊ ĉ private Ġfun Ġclip ( path : ĠLong , Ġrule : ĠInt ) Ġ{ Ċĉ ĉ print Log (" clip : Ġpath Ġrule ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ġnative Clip ( canvas . native Context , Ġpath , Ġrule ) Ġ}) Ċ ĉ } ĊĊ ĉ fun Ġcreate Linear Gradient ( x 0 : ĠFloat , Ġy 0 : ĠFloat , Ġx 1 : ĠFloat , Ġy 1 : ĠFloat ): ĠT N SC an vas Gradient Ġ{ Ċĉ ĉ print Log (" create Linear Gradient ") Ċĉ ĉ return ĠT N SC an vas Gradient ( native Create Linear Gradient ( canvas . native Context , Ġx 0 , Ġy 0 , Ġx 1 , Ġy 1 )) Ċ ĉ } ĊĊ ĉ fun Ġcreate Rad ial Gradient ( Ċĉ ĉ x 0 : ĠFloat , Ċĉ ĉ y 0 : ĠFloat , Ċĉ ĉ r 0 : ĠFloat , Ċĉ ĉ x 1 : ĠFloat , Ċĉ ĉ y 1 : ĠFloat , Ċĉ ĉ r 1 : ĠFloat Ċ ĉ ): ĠT N SC an vas Gradient Ġ{ Ċĉ ĉ print Log (" create Rad ial Gradient ") Ċĉ ĉ return ĠT N SC an vas Gradient ( Ċĉĉ ĉ native Create Rad ial Gradient ( Ċĉĉĉ ĉ canvas . native Context , Ċĉĉĉ ĉ x 0 , Ċĉĉĉ ĉ y 0 , Ċĉĉĉ ĉ r 0 , Ċĉĉĉ ĉ x 1 , Ċĉĉĉ ĉ y 1 , Ċĉĉĉ ĉ r 1 Ċĉĉ ĉ ) Ċĉ ĉ ) Ċ ĉ } ĊĊ ĉ fun Ġcreate Pattern ( Ċĉ ĉ src : ĠT N SC an vas ?, Ċĉ ĉ re petition : ĠT N SP attern Re petition Ġ= ĠT N SP attern Re petition . Repeat Ċ ĉ ): ĠT N SP attern ? Ġ{ Ċĉ ĉ print Log (" create Pattern : Ġcanvas ") Ċĉ ĉ if Ġ( src Ġ== Ġnull ) Ġreturn Ġnull Ċĉ ĉ val Ġss Ġ= Ġsrc . snapshot () Ċĉ ĉ return Ġcreate Pattern ( Ċĉĉ ĉ ss , Ċĉĉ ĉ src . width , Ċĉĉ ĉ src . height , Ċĉĉ ĉ re petition . to Native () Ċĉ ĉ ) Ċ ĉ } ĊĊ ĉ fun Ġcreate Pattern ( Ċĉ ĉ src : ĠBitmap ?, Ċĉ ĉ re petition : ĠT N SP attern Re petition Ġ= ĠT N SP attern Re petition . Repeat Ċ ĉ ): ĠT N SP attern ? Ġ{ Ċĉ ĉ print Log (" create Pattern : Ġbitmap ") Ċĉ ĉ if Ġ( src Ġ== Ġnull ) Ġreturn Ġnull Ċĉ ĉ return Ġcreate Pattern ( Ċĉĉ ĉ Utils . getBytes From Bitmap ( src ), Ċĉĉ ĉ src . width , Ċĉĉ ĉ src . height , Ċĉĉ ĉ re petition . to Native () Ċĉ ĉ ) Ċ ĉ } ĊĊ ĉ private Ġfun Ġcreate Pattern ( Ċĉ ĉ data : ĠByteArray , Ċĉ ĉ width : ĠInt , Ċĉ ĉ height : ĠInt , Ċĉ ĉ re petition : ĠInt Ċ ĉ ): ĠT N SP attern ? Ġ{ Ċĉ ĉ print Log (" create Pattern : Ġimage bitmap ") Ċĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉ ĉ var Ġvalue : ĠT N SP attern ? Ġ= Ġnull Ċĉ ĉ canvas . queue Event Ġ{ Ċĉĉ ĉ val Ġid Ġ= Ġnative Create Pattern ( Ċĉĉĉ ĉ canvas . native Context , Ċĉĉĉ ĉ data , Ġwidth , Ġheight , Ġrepet ition Ċĉĉ ĉ ) ĊĊĉĉ ĉ if Ġ( id Ġ!= Ġ 0 L ) Ġ{ Ċĉĉĉ ĉ value Ġ= ĠT N SP attern ( id ) Ċĉĉ ĉ } Ċĉĉ ĉ lock . count Down () Ċĉ ĉ } Ċĉ ĉ try Ġ{ Ċĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉ ĉ } Ġcatch Ġ( e : ĠException ) Ġ{ Ċĉ ĉ } Ċĉ ĉ return Ġvalue Ċ ĉ } ĊĊĊ ĉ private Ġfun Ġcreate Pattern Encoded ( Ċĉ ĉ data : ĠByteArray , Ċĉ ĉ re petition : ĠInt Ċ ĉ ): ĠT N SP attern ? Ġ{ Ċĉ ĉ print Log (" create Pattern : Ġimage bitmap ") Ċĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉ ĉ var Ġvalue : ĠT N SP attern ? Ġ= Ġnull Ċĉ ĉ canvas . queue Event Ġ{ Ċĉĉ ĉ val Ġid Ġ= Ġnative Create Pattern Encoded ( Ċĉĉĉ ĉ canvas . native Context , Ċĉĉĉ ĉ data , Ġrepet ition Ċĉĉ ĉ ) ĊĊĉĉ ĉ if Ġ( id Ġ!= Ġ 0 L ) Ġ{ Ċĉĉĉ ĉ value Ġ= ĠT N SP attern ( id ) Ċĉĉ ĉ } Ċĉĉ ĉ lock . count Down () Ċĉ ĉ } Ċĉ ĉ try Ġ{ Ċĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉ ĉ } Ġcatch Ġ( e : ĠException ) Ġ{ Ċĉ ĉ } Ċĉ ĉ return Ġvalue Ċ ĉ } ĊĊ ĉ fun Ġcreate Pattern ( Ċĉ ĉ src : ĠT NS Image Asset ?, Ċĉ ĉ re petition : ĠT N SP attern Re petition Ġ= ĠT N SP attern Re petition . Repeat Ċ ĉ ): ĠT N SP attern ? Ġ{ Ċĉ ĉ print Log (" create Pattern : Ġasset ") Ċĉ ĉ if Ġ( src Ġ== Ġnull ) Ġreturn Ġnull Ċĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉ ĉ var Ġvalue : ĠT N SP attern ? Ġ= Ġnull Ċĉ ĉ canvas . queue Event Ġ{ Ċĉĉ ĉ val Ġid Ġ= Ġnative Create Pattern With Asset ( Ċĉĉĉ ĉ canvas . native Context , Ċĉĉĉ ĉ src . native Image Asset , Ġrepet ition . to Native () Ċĉĉ ĉ ) Ċĉĉ ĉ if Ġ( id Ġ!= Ġ 0 L ) Ġ{ Ċĉĉĉ ĉ value Ġ= ĠT N SP attern ( id ) Ċĉĉ ĉ } Ċĉĉ ĉ lock . count Down () Ċĉ ĉ } Ċĉ ĉ try Ġ{ Ċĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉ ĉ } Ġcatch Ġ( e : Ġjava . lang . Exception ) Ġ{ Ċĉ ĉ } Ċĉ ĉ return Ġvalue Ċ ĉ } ĊĊ ĉ fun Ġcreate Pattern ( Ċĉ ĉ src : ĠT NS Image Bitmap ?, Ċĉ ĉ re petition : ĠT N SP attern Re petition Ġ= ĠT N SP attern Re petition . Repeat Ċ ĉ ): ĠT N SP attern ? Ġ{ Ċĉ ĉ print Log (" create Pattern : Ġimage bitmap ") Ċĉ ĉ if Ġ( src Ġ== Ġnull ) Ġreturn Ġnull Ċĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉ ĉ var Ġvalue : ĠT N SP attern ? Ġ= Ġnull Ċĉ ĉ canvas . queue Event Ġ{ Ċĉĉ ĉ val Ġid Ġ= Ġnative Create Pattern With Asset ( Ċĉĉĉ ĉ canvas . native Context , Ċĉĉĉ ĉ src . native Image Asset , Ġrepet ition . to Native () Ċĉĉ ĉ ) Ċĉĉ ĉ if Ġ( id Ġ!= Ġ 0 L ) Ġ{ Ċĉĉĉ ĉ value Ġ= ĠT N SP attern ( id ) Ċĉĉ ĉ } Ċĉĉ ĉ lock . count Down () Ċĉ ĉ } Ċĉ ĉ try Ġ{ Ċĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉ ĉ } Ġcatch Ġ( e : Ġjava . lang . Exception ) Ġ{ Ċĉ ĉ } Ċĉ ĉ return Ġvalue Ċ ĉ } ĊĊĊ ĉ fun Ġsave () Ġ{ Ċĉ ĉ print Log (" save ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉ ĉ native Save ( canvas . native Context ) Ċĉ ĉ }) Ċ ĉ } ĊĊ ĉ fun Ġrestore () Ġ{ Ċĉ ĉ print Log (" restore ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉ ĉ native Restore ( canvas . native Context ) Ċĉ ĉ }) Ċ ĉ } ĊĊ ĉ fun Ġset Transform ( a : ĠFloat , Ġb : ĠFloat , Ġc : ĠFloat , Ġd : ĠFloat , Ġe : ĠFloat , Ġf : ĠFloat ) Ġ{ Ċĉ ĉ print Log (" set Transform ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉ ĉ native Set Transform ( canvas . native Context , Ġa , Ġb , Ġc , Ġd , Ġe , Ġf ) Ċĉ ĉ }) Ċ ĉ } ĊĊ ĉ fun Ġtransform ( a : ĠFloat , Ġb : ĠFloat , Ġc : ĠFloat , Ġd : ĠFloat , Ġe : ĠFloat , Ġf : ĠFloat ) Ġ{ Ċĉ ĉ print Log (" transform ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ġnative Transform ( canvas . native Context , Ġa , Ġb , Ġc , Ġd , Ġe , Ġf ) Ġ}) Ċ ĉ } ĊĊ ĉ fun Ġscale ( x : ĠFloat , Ġy : ĠFloat ) Ġ{ Ċĉ ĉ print Log (" scale ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ġnative Scale ( canvas . native Context , Ġx , Ġy ) Ġ}) Ċ ĉ } ĊĊ ĉ fun Ġrotate ( angle : ĠFloat ) Ġ{ Ċĉ ĉ print Log (" rotate ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ġnative Rotate ( canvas . native Context , Ġangle ) Ġ}) Ċ ĉ } ĊĊ ĉ fun Ġtranslate ( x : ĠFloat , Ġy : ĠFloat ) Ġ{ Ċĉ ĉ print Log (" translate ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ġnative Translate ( canvas . native Context , Ġx , Ġy ) Ġ}) Ċ ĉ } ĊĊ ĉ fun Ġquadr atic Curve To ( c px : ĠFloat , Ġc py : ĠFloat , Ġx : ĠFloat , Ġy : ĠFloat ) Ġ{ Ċĉ ĉ print Log (" quadr atic Curve To ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉ ĉ native Quadr atic Curve To ( canvas . native Context , Ġc px , Ġc py , Ġx , Ġy ) Ċĉ ĉ }) Ċ ĉ } ĊĊ ĉ fun Ġdraw Image ( image : ĠT N SC an vas , Ġdx : ĠFloat , Ġdy : ĠFloat ) Ġ{ Ċĉ ĉ print Log (" drawImage : Ġcanvas ") Ċĉ ĉ val Ġss Ġ= Ġimage . snapshot () Ċĉ ĉ var Ġwidth Ġ= Ġimage . width Ċĉ ĉ var Ġheight Ġ= Ġimage . height Ċĉ ĉ if Ġ( width Ġ== Ġ 0 ) Ġ{ Ċĉĉ ĉ val Ġparams Ġ= Ġimage . layout Params Ċĉĉ ĉ if Ġ( params Ġ!= Ġnull ) Ġ{ Ċĉĉĉ ĉ width Ġ= Ġparams . width Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ if Ġ( height Ġ== Ġ 0 ) Ġ{ Ċĉĉ ĉ val Ġparams Ġ= Ġimage . layout Params Ċĉĉ ĉ if Ġ( params Ġ!= Ġnull ) Ġ{ Ċĉĉĉ ĉ height Ġ= Ġparams . height Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ if Ġ( width Ġ< Ġ 1 ) Ġ{ Ċĉĉ ĉ width Ġ= Ġ 1 Ċĉ ĉ } Ċĉ ĉ if Ġ( height Ġ< Ġ 1 ) Ġ{ Ċĉĉ ĉ height Ġ= Ġ 1 Ċĉ ĉ } Ċĉ ĉ val Ġfinal Width Ġ= Ġwidth . toFloat () Ċĉ ĉ val Ġfinal Height Ġ= Ġheight . toFloat () Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉ ĉ native Draw Image D xD y ( Ċĉĉĉ ĉ canvas . native Context , Ċĉĉĉ ĉ ss , Ċĉĉĉ ĉ final Width , Ċĉĉĉ ĉ final Height , Ċĉĉĉ ĉ dx , Ċĉĉĉ ĉ dy Ċĉĉ ĉ ) Ċĉĉ ĉ update Canvas () Ċĉ ĉ }) Ċ ĉ } ĊĊ ĉ fun Ġdraw Image ( image : ĠBitmap ?, Ġdx : ĠFloat , Ġdy : ĠFloat ) Ġ{ Ċĉ ĉ print Log (" drawImage : Ġbitmap ") Ċĉ ĉ image ?. let Ġ{ Ċĉĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉĉ ĉ val Ġwidth Ġ= Ġimage . width . toFloat () Ċĉĉĉ ĉ val Ġheight Ġ= Ġimage . height . toFloat () Ċĉĉĉ ĉ native Draw Image D xD y With Bitmap ( Ċĉĉĉĉ ĉ canvas . native Context , Ċĉĉĉĉ ĉ image , Ċĉĉĉĉ ĉ width , Ċĉĉĉĉ ĉ height , Ċĉĉĉĉ ĉ dx , Ċĉĉĉĉ ĉ dy Ċĉĉĉ ĉ ) Ċĉĉĉ ĉ update Canvas () Ċĉĉ ĉ }) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ fun Ġdraw Image ( asset : ĠT NS Image Asset , Ġdx : ĠFloat , Ġdy : ĠFloat ) Ġ{ Ċĉ ĉ print Log (" drawImage : Ġasset ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉ ĉ native Draw Image D xD y With Asset ( Ċĉĉĉ ĉ canvas . native Context , Ċĉĉĉ ĉ asset . native Image Asset , Ċĉĉĉ ĉ dx , Ċĉĉĉ ĉ dy Ċĉĉ ĉ ) Ċĉĉ ĉ update Canvas () Ċĉ ĉ }) Ċ ĉ } ĊĊ ĉ fun Ġdraw Image ( bitmap : ĠT NS Image Bitmap , Ġdx : ĠFloat , Ġdy : ĠFloat ) Ġ{ Ċĉ ĉ print Log (" drawImage : Ġbitmap ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉ ĉ native Draw Image D xD y With Asset ( Ċĉĉĉ ĉ canvas . native Context , Ċĉĉĉ ĉ bitmap . native Image Asset , Ċĉĉĉ ĉ dx , Ċĉĉĉ ĉ dy Ċĉĉ ĉ ) Ċĉĉ ĉ update Canvas () Ċĉ ĉ }) Ċ ĉ } ĊĊ ĉ fun Ġdraw Image ( image : ĠT N SC an vas , Ġdx : ĠFloat , Ġdy : ĠFloat , Ġd Width : ĠFloat , Ġd Height : ĠFloat ) Ġ{ Ċĉ ĉ print Log (" drawImage : Ġcanvas ") Ċĉ ĉ val Ġss Ġ= Ġimage . snapshot () Ċĉ ĉ var Ġwidth Ġ= Ġimage . width Ċĉ ĉ var Ġheight Ġ= Ġimage . height Ċĉ ĉ if Ġ( width Ġ== Ġ 0 ) Ġ{ Ċĉĉ ĉ val Ġparams Ġ= Ġimage . layout Params Ċĉĉ ĉ if Ġ( params Ġ!= Ġnull ) Ġ{ Ċĉĉĉ ĉ width Ġ= Ġparams . width Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ if Ġ( height Ġ== Ġ 0 ) Ġ{ Ċĉĉ ĉ val Ġparams Ġ= Ġimage . layout Params Ċĉĉ ĉ if Ġ( params Ġ!= Ġnull ) Ġ{ Ċĉĉĉ ĉ height Ġ= Ġparams . height Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ if Ġ( width Ġ< Ġ 1 ) Ġ{ Ċĉĉ ĉ width Ġ= Ġ 1 Ċĉ ĉ } Ċĉ ĉ if Ġ( height Ġ< Ġ 1 ) Ġ{ Ċĉĉ ĉ height Ġ= Ġ 1 Ċĉ ĉ } Ċĉ ĉ val Ġfinal Width Ġ= Ġwidth . toFloat () Ċĉ ĉ val Ġfinal Height Ġ= Ġheight . toFloat () Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉ ĉ native Draw Image D xD y Dw Dy ( Ċĉĉĉ ĉ canvas . native Context , Ċĉĉĉ ĉ ss , Ċĉĉĉ ĉ final Width , Ċĉĉĉ ĉ final Height , Ċĉĉĉ ĉ dx , Ċĉĉĉ ĉ dy , Ċĉĉĉ ĉ d Width , Ċĉĉĉ ĉ d Height Ċĉĉ ĉ ) Ċĉĉ ĉ update Canvas () Ċĉ ĉ }) Ċ ĉ } ĊĊ ĉ fun Ġdraw Image ( image : ĠBitmap ?, Ġdx : ĠFloat , Ġdy : ĠFloat , Ġd Width : ĠFloat , Ġd Height : ĠFloat ) Ġ{ Ċĉ ĉ print Log (" drawImage : Ġbitmap ") Ċĉ ĉ image ?. let Ġ{ Ċĉĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉĉ ĉ native Draw Image D xD y Dw Dh With Bitmap ( Ċĉĉĉĉ ĉ canvas . native Context , Ċĉĉĉĉ ĉ image , Ċĉĉĉĉ ĉ image . width . toFloat (), Ċĉĉĉĉ ĉ image . height . toFloat (), Ċĉĉĉĉ ĉ dx , Ċĉĉĉĉ ĉ dy , Ċĉĉĉĉ ĉ d Width , Ċĉĉĉĉ ĉ d Height Ċĉĉĉ ĉ ) Ċĉĉĉ ĉ update Canvas () Ċĉĉ ĉ }) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ fun Ġdraw Image ( asset : ĠT NS Image Asset , Ġdx : ĠFloat , Ġdy : ĠFloat , Ġd Width : ĠFloat , Ġd Height : ĠFloat ) Ġ{ Ċĉ ĉ print Log (" drawImage : Ġasset ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉ ĉ native Draw Image D xD y Dw Dh With Asset ( Ċĉĉĉ ĉ canvas . native Context , Ċĉĉĉ ĉ asset . native Image Asset , Ċĉĉĉ ĉ dx , Ċĉĉĉ ĉ dy , Ċĉĉĉ ĉ d Width , Ċĉĉĉ ĉ d Height Ċĉĉ ĉ ) Ċĉĉ ĉ update Canvas () Ċĉ ĉ }) Ċ ĉ } ĊĊ ĉ fun Ġdraw Image ( bitmap : ĠT NS Image Bitmap , Ġdx : ĠFloat , Ġdy : ĠFloat , Ġd Width : ĠFloat , Ġd Height : ĠFloat ) Ġ{ Ċĉ ĉ print Log (" drawImage : Ġbitmap ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉ ĉ native Draw Image D xD y Dw Dh With Asset ( Ċĉĉĉ ĉ canvas . native Context , Ċĉĉĉ ĉ bitmap . native Image Asset , Ċĉĉĉ ĉ dx , Ċĉĉĉ ĉ dy , Ċĉĉĉ ĉ d Width , Ċĉĉĉ ĉ d Height Ċĉĉ ĉ ) Ċĉĉ ĉ update Canvas () Ċĉ ĉ }) Ċ ĉ } ĊĊ ĉ fun Ġdraw Image ( Ċĉ ĉ image : ĠT N SC an vas , Ċĉ ĉ sx : ĠFloat , Ċĉ ĉ sy : ĠFloat , Ċĉ ĉ s Width : ĠFloat , Ċĉ ĉ s Height : ĠFloat , Ċĉ ĉ dx : ĠFloat , Ċĉ ĉ dy : ĠFloat , Ċĉ ĉ d Width : ĠFloat , Ċĉ ĉ d Height : ĠFloat Ċ ĉ ) Ġ{ Ċĉ ĉ print Log (" drawImage : Ġcanvas ") Ċĉ ĉ val Ġss Ġ= Ġimage . snapshot () Ċĉ ĉ var Ġwidth Ġ= Ġimage . width Ċĉ ĉ var Ġheight Ġ= Ġimage . height Ċĉ ĉ if Ġ( image . width Ġ== Ġ 0 ) Ġ{ Ċĉĉ ĉ val Ġparams Ġ= Ġimage . layout Params Ċĉĉ ĉ if Ġ( params Ġ!= Ġnull ) Ġ{ Ċĉĉĉ ĉ width Ġ= Ġparams . width Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ if Ġ( image . height Ġ== Ġ 0 ) Ġ{ Ċĉĉ ĉ val Ġparams Ġ= Ġimage . layout Params Ċĉĉ ĉ if Ġ( params Ġ!= Ġnull ) Ġ{ Ċĉĉĉ ĉ height Ġ= Ġparams . height Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ if Ġ( width Ġ< Ġ 1 ) Ġ{ Ċĉĉ ĉ width Ġ= Ġ 1 Ċĉ ĉ } Ċĉ ĉ if Ġ( height Ġ< Ġ 1 ) Ġ{ Ċĉĉ ĉ height Ġ= Ġ 1 Ċĉ ĉ } Ċĉ ĉ val Ġfinal Width Ġ= Ġwidth . toFloat () Ċĉ ĉ val Ġfinal Height Ġ= Ġheight . toFloat () Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉ ĉ native Draw Image ( Ċĉĉĉ ĉ canvas . native Context , Ċĉĉĉ ĉ ss , Ċĉĉĉ ĉ final Width , Ċĉĉĉ ĉ final Height , Ċĉĉĉ ĉ sx , Ċĉĉĉ ĉ sy , Ċĉĉĉ ĉ s Width , Ċĉĉĉ ĉ s Height , Ċĉĉĉ ĉ dx , Ċĉĉĉ ĉ dy , Ċĉĉĉ ĉ d Width , Ċĉĉĉ ĉ d Height Ċĉĉ ĉ ) Ċĉĉ ĉ update Canvas () Ċĉ ĉ }) Ċ ĉ } ĊĊ ĉ fun Ġdraw Image ( Ċĉ ĉ image : ĠBitmap ?, Ċĉ ĉ sx : ĠFloat , Ċĉ ĉ sy : ĠFloat , Ċĉ ĉ s Width : ĠFloat , Ċĉ ĉ s Height : ĠFloat , Ċĉ ĉ dx : ĠFloat , Ċĉ ĉ dy : ĠFloat , Ċĉ ĉ d Width : ĠFloat , Ċĉ ĉ d Height : ĠFloat Ċ ĉ ) Ġ{ Ċĉ ĉ print Log (" drawImage : Ġbitmap ") Ċĉ ĉ image ?. let Ġ{ Ċĉĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉĉ ĉ native Draw Image With Bitmap ( Ċĉĉĉĉ ĉ canvas . native Context , Ċĉĉĉĉ ĉ image , Ċĉĉĉĉ ĉ image . width . toFloat (), Ċĉĉĉĉ ĉ image . height . toFloat (), Ċĉĉĉĉ ĉ sx , Ċĉĉĉĉ ĉ sy , Ċĉĉĉĉ ĉ s Width , Ċĉĉĉĉ ĉ s Height , Ċĉĉĉĉ ĉ dx , Ċĉĉĉĉ ĉ dy , Ċĉĉĉĉ ĉ d Width , Ċĉĉĉĉ ĉ d Height Ċĉĉĉ ĉ ) Ċĉĉĉ ĉ update Canvas () Ċĉĉ ĉ }) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ fun Ġdraw Image ( Ċĉ ĉ asset : ĠT NS Image Asset , Ċĉ ĉ sx : ĠFloat , Ċĉ ĉ sy : ĠFloat , Ċĉ ĉ s Width : ĠFloat , Ċĉ ĉ s Height : ĠFloat , Ċĉ ĉ dx : ĠFloat , Ċĉ ĉ dy : ĠFloat , Ċĉ ĉ d Width : ĠFloat , Ċĉ ĉ d Height : ĠFloat Ċ ĉ ) Ġ{ Ċĉ ĉ print Log (" drawImage : Ġasset ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉ ĉ native Draw Image With Asset ( Ċĉĉĉ ĉ canvas . native Context , Ċĉĉĉ ĉ asset . native Image Asset , Ċĉĉĉ ĉ sx , Ċĉĉĉ ĉ sy , Ċĉĉĉ ĉ s Width , Ċĉĉĉ ĉ s Height , Ċĉĉĉ ĉ dx , Ċĉĉĉ ĉ dy , Ċĉĉĉ ĉ d Width , Ċĉĉĉ ĉ d Height Ċĉĉ ĉ ) Ċĉĉ ĉ update Canvas () Ċĉ ĉ }) Ċ ĉ } ĊĊĊ ĉ fun Ġdraw Image ( Ċĉ ĉ bitmap : ĠT NS Image Bitmap , Ċĉ ĉ sx : ĠFloat , Ċĉ ĉ sy : ĠFloat , Ċĉ ĉ s Width : ĠFloat , Ċĉ ĉ s Height : ĠFloat , Ċĉ ĉ dx : ĠFloat , Ċĉ ĉ dy : ĠFloat , Ċĉ ĉ d Width : ĠFloat , Ċĉ ĉ d Height : ĠFloat Ċ ĉ ) Ġ{ Ċĉ ĉ print Log (" drawImage : Ġbitmap ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ċĉĉ ĉ native Draw Image With Asset ( Ċĉĉĉ ĉ canvas . native Context , Ċĉĉĉ ĉ bitmap . native Image Asset , Ċĉĉĉ ĉ sx , Ċĉĉĉ ĉ sy , Ċĉĉĉ ĉ s Width , Ċĉĉĉ ĉ s Height , Ċĉĉĉ ĉ dx , Ċĉĉĉ ĉ dy , Ċĉĉĉ ĉ d Width , Ċĉĉĉ ĉ d Height Ċĉĉ ĉ ) Ċĉĉ ĉ update Canvas () Ċĉ ĉ }) Ċ ĉ } ĊĊĊ ĉ fun Ġmeasure Text ( text : ĠString ?): ĠT N ST ext Metrics Ġ{ Ċĉ ĉ print Log (" measure Text ") Ċĉ ĉ return ĠT N ST ext Metrics ( native Measure Text ( canvas . native Context , Ġtext Ġ?: Ġ"")) Ċ ĉ } ĊĊ ĉ fun Ġcreate ImageData ( width : ĠInt , Ġheight : ĠInt ): ĠT NS ImageData Ġ{ Ċĉ ĉ print Log (" create ImageData ") Ċĉ ĉ return ĠT NS ImageData ( width , Ġheight , Ġnative Create ImageData ( canvas . native Context , Ġwidth , Ġheight )) Ċ ĉ } ĊĊ ĉ fun Ġcreate ImageData ( image Data : ĠT NS ImageData ): ĠT NS ImageData Ġ{ Ċĉ ĉ print Log (" create ImageData ") Ċĉ ĉ val Ġwidth Ġ= Ġimage Data . width Ċĉ ĉ val Ġheight Ġ= Ġimage Data . height Ċĉ ĉ return ĠT NS ImageData ( Ċĉĉ ĉ width , Ġheight , Ġnative Create ImageData ( canvas . native Context , Ġwidth , Ġheight ) Ċĉ ĉ ) Ċ ĉ } ĊĊ ĉ fun Ġput ImageData ( Ċĉ ĉ data : ĠT NS ImageData , Ċĉ ĉ x : ĠFloat , Ċĉ ĉ y : ĠFloat Ċ ĉ ) Ġ{ Ċĉ ĉ put ImageData ( data , Ġx , Ġy , Ġ 0 f , Ġ 0 f , Ġ 0 f , Ġ 0 f ) Ċ ĉ } ĊĊĊ ĉ fun Ġput ImageData ( Ċĉ ĉ data : ĠT NS ImageData , Ċĉ ĉ x : ĠFloat , Ċĉ ĉ y : ĠFloat , Ċĉ ĉ dirty X : ĠFloat , Ċĉ ĉ dirty Y : ĠFloat , Ċĉ ĉ dirty Width : ĠFloat , Ċĉ ĉ dirty Height : ĠFloat Ċ ĉ ) Ġ{ Ċĉ ĉ canvas . queue Event Ġ{ Ċĉĉ ĉ native Put ImageData ( Ċĉĉĉ ĉ canvas . native Context , Ċĉĉĉ ĉ data . native ImageData , Ċĉĉĉ ĉ x , Ċĉĉĉ ĉ y , Ċĉĉĉ ĉ dirty X , Ċĉĉĉ ĉ dirty Y , Ċĉĉĉ ĉ dirty Width , Ċĉĉĉ ĉ dirty Height Ċĉĉ ĉ ) Ċĉĉ ĉ update Canvas () Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ fun Ġget ImageData ( sx : ĠFloat , Ġsy : ĠFloat , Ġsw : ĠFloat , Ġsh : ĠFloat ): ĠT NS ImageData Ġ{ Ċĉ ĉ print Log (" getImage Data ") Ċĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉ ĉ var Ġvalue : ĠT NS ImageData ? Ġ= Ġnull Ċĉ ĉ canvas . queue Event Ġ{ Ċĉĉ ĉ value Ġ= ĠT NS ImageData ( Ċĉĉĉ ĉ sw . toInt (), Ċĉĉĉ ĉ sh . toInt (), Ċĉĉĉ ĉ native Get ImageData ( canvas . native Context , Ġsx , Ġsy , Ġsw , Ġsh ) Ċĉĉ ĉ ) Ċĉĉ ĉ lock . count Down () Ċĉ ĉ } Ċĉ ĉ try Ġ{ Ċĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉ ĉ } Ġcatch Ġ( e : ĠException ) Ġ{ Ċĉ ĉ } Ċĉ ĉ return Ġvalue Ġ?: ĠT NS ImageData ( sw . toInt (), Ġsh . toInt (), Ġ- 1 ) Ċ ĉ } ĊĊĊ ĉ fun Ġreset Transform () Ġ{ Ċĉ ĉ print Log (" reset Transform ") Ċĉ ĉ canvas . queue Event ( Runnable Ġ{ Ġnative Reset Transform ( canvas . native Context ) Ġ}) Ċ ĉ } ĊĊ ĉ fun Ġis Point In Path ( x : ĠFloat , Ġy : ĠFloat ): ĠBoolean Ġ{ Ċĉ ĉ return Ġis Point In Path ( 0 , Ġx , Ġy , ĠT NS Fill Rule . Non Zero . to Native ()) Ċ ĉ } ĊĊ ĉ fun Ġis Point In Path ( x : ĠFloat , Ġy : ĠFloat , Ġfill Rule : ĠT NS Fill Rule ): ĠBoolean Ġ{ Ċĉ ĉ return Ġis Point In Path ( 0 , Ġx , Ġy , Ġfill Rule . to Native ()) Ċ ĉ } ĊĊĊ ĉ fun Ġis Point In Path ( Ċĉ ĉ path : ĠT NS Path 2 D , Ċĉ ĉ x : ĠFloat , Ċĉ ĉ y : ĠFloat Ċ ĉ ): ĠBoolean Ġ{ Ċĉ ĉ return Ġis Point In Path ( path . path , Ġx , Ġy , ĠT NS Fill Rule . Non Zero . to Native ()) Ċ ĉ } ĊĊ ĉ fun Ġis Point In Path ( Ċĉ ĉ path : ĠT NS Path 2 D , Ċĉ ĉ x : ĠFloat , Ċĉ ĉ y : ĠFloat , Ċĉ ĉ fill Rule : ĠT NS Fill Rule Ċ ĉ ): ĠBoolean Ġ{ Ċĉ ĉ return Ġis Point In Path ( path . path , Ġx , Ġy , Ġfill Rule . to Native ()) Ċ ĉ } ĊĊ ĉ private Ġfun Ġis Point In Path ( path : ĠLong , Ġx : ĠFloat , Ġy : ĠFloat , Ġfill Rule : ĠInt ): ĠBoolean Ġ{ Ċĉ ĉ print Log (" is Point In Path ") Ċĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉ ĉ var Ġvalue Ġ= Ġfalse Ċĉ ĉ canvas . queue Event Ġ{ Ċĉĉ ĉ value Ġ= Ġnative Is Point In Path ( canvas . native Context , Ġpath , Ġx , Ġy , Ġfill Rule ) Ċĉĉ ĉ lock . count Down () Ċĉ ĉ } Ċĉ ĉ try Ġ{ Ċĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉ ĉ } Ġcatch Ġ( e : Ġjava . lang . Exception ) Ġ{ Ċĉ ĉ } Ċĉ ĉ return Ġvalue Ċ ĉ } ĊĊ ĉ fun Ġis Point In Stroke ( x : ĠFloat , Ġy : ĠFloat ): ĠBoolean Ġ{ Ċĉ ĉ return Ġis Point In Stroke ( null , Ġx , Ġy ) Ċ ĉ } ĊĊ ĉ fun Ġis Point In Stroke ( path : ĠT NS Path 2 D ? Ġ= Ġnull , Ġx : ĠFloat , Ġy : ĠFloat ): ĠBoolean Ġ{ Ċĉ ĉ print Log (" is Point In Stroke ") Ċĉ ĉ val Ġlock Ġ= ĠCount DownLatch ( 1 ) Ċĉ ĉ var Ġvalue Ġ= Ġfalse Ċĉ ĉ canvas . queue Event Ġ{ Ċĉĉ ĉ value Ġ= Ġnative Is Point In Stroke ( canvas . native Context , Ġpath ?. path Ġ?: Ġ 0 L , Ġx , Ġy ) Ċĉĉ ĉ lock . count Down () Ċĉ ĉ } Ċĉ ĉ try Ġ{ Ċĉĉ ĉ lock . await ( 2 , ĠTimeUnit . SECONDS ) Ċĉ ĉ } Ġcatch Ġ( e : Ġjava . lang . Exception ) Ġ{ Ċĉ ĉ } Ċĉ ĉ return Ġvalue Ċ ĉ } ĊĊ ĉ comp anion Ġobject Ġ{ Ċĉ ĉ const Ġval ĠTAG Ġ= Ġ" Canvas Rendering Context " ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Destroy ( context : ĠLong ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Set Direction ( context : ĠLong , Ġdirection : ĠInt ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Get Direction ( context : ĠLong ): ĠInt ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Set Fill Color With String ( context : ĠLong , Ġcolor : ĠString ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Set Fill Style ( context : ĠLong , Ġstyle : ĠLong ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Get Fill Style ( context : ĠLong ): ĠJSONObject ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Set Filter ( context : ĠLong , Ġfilter : ĠString ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Get Filter ( context : ĠLong ): ĠString ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Set Stroke Color With String ( context : ĠLong , Ġcolor : ĠString ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Set Stroke Style ( context : ĠLong , Ġstyle : ĠLong ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Get Stroke Style ( context : ĠLong ): ĠJSONObject ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Get LineWidth ( context : ĠLong ): ĠFloat ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Set LineWidth ( context : ĠLong , Ġwidth : ĠFloat ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Set Line Cap ( context : ĠLong , Ġcap : ĠInt ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Get Line Cap ( context : ĠLong ): ĠInt ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Set Line Join ( context : ĠLong , Ġjoin : ĠInt ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Get Line Join ( context : ĠLong ): ĠInt ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Set M iter Limit ( context : ĠLong , Ġlimit : ĠFloat ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Get M iter Limit ( context : ĠLong ): ĠFloat ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Set Line Dash Offset ( context : ĠLong , Ġoffset : ĠFloat ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Get Line Dash Offset ( context : ĠLong ): ĠFloat ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Set Line Dash ( context : ĠLong , Ġdash : ĠFloat Array ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Get Line Dash ( context : ĠLong ): ĠFloat Array ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Clear Rect ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ x : ĠFloat , Ċĉĉ ĉ y : ĠFloat , Ċĉĉ ĉ width : ĠFloat , Ċĉĉ ĉ height : ĠFloat Ċĉ ĉ ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Fill Rect ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ x : ĠFloat , Ċĉĉ ĉ y : ĠFloat , Ċĉĉ ĉ width : ĠFloat , Ċĉĉ ĉ height : ĠFloat Ċĉ ĉ ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Stroke Rect ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ x : ĠFloat , Ċĉĉ ĉ y : ĠFloat , Ċĉĉ ĉ width : ĠFloat , Ċĉĉ ĉ height : ĠFloat Ċĉ ĉ ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Fill Text ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ text : ĠString , Ċĉĉ ĉ x : ĠFloat , Ċĉĉ ĉ y : ĠFloat , Ċĉĉ ĉ width : ĠFloat Ċĉ ĉ ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Stroke Text ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ text : ĠString , Ċĉĉ ĉ x : ĠFloat , Ċĉĉ ĉ y : ĠFloat , Ċĉĉ ĉ width : ĠFloat Ċĉ ĉ ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Rect ( context : ĠLong , Ġx : ĠFloat , Ġy : ĠFloat , Ġwidth : ĠFloat , Ġheight : ĠFloat ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Fill ( context : ĠLong , Ġpath : ĠLong , Ġfill : ĠInt ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Stroke ( context : ĠLong , Ġpath : ĠLong ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Begin Path ( context : ĠLong ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative MoveTo ( context : ĠLong , Ġx : ĠFloat , Ġy : ĠFloat ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Line To ( context : ĠLong , Ġx : ĠFloat , Ġy : ĠFloat ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Close Path ( context : ĠLong ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Arc ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ x : ĠFloat , Ċĉĉ ĉ y : ĠFloat , Ċĉĉ ĉ radius : ĠFloat , Ċĉĉ ĉ start Angle : ĠFloat , Ċĉĉ ĉ end Angle : ĠFloat , Ċĉĉ ĉ antic lock wise : ĠBoolean Ċĉ ĉ ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Arc To ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ x 1 : ĠFloat , Ċĉĉ ĉ y 1 : ĠFloat , Ċĉĉ ĉ x 2 : ĠFloat , Ċĉĉ ĉ y 2 : ĠFloat , Ċĉĉ ĉ radius : ĠFloat Ċĉ ĉ ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Bezier Curve To ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ cp 1 x : ĠFloat , Ċĉĉ ĉ cp 1 y : ĠFloat , Ċĉĉ ĉ cp 2 x : ĠFloat , Ċĉĉ ĉ cp 2 y : ĠFloat , Ċĉĉ ĉ x : ĠFloat , Ċĉĉ ĉ y : ĠFloat Ċĉ ĉ ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Ellipse ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ x : ĠFloat , Ċĉĉ ĉ y : ĠFloat , Ċĉĉ ĉ radius X : ĠFloat , Ċĉĉ ĉ radius Y : ĠFloat , Ċĉĉ ĉ rotation : ĠFloat , Ċĉĉ ĉ start Angle : ĠFloat , Ċĉĉ ĉ end Angle : ĠFloat , Ċĉĉ ĉ antic lock wise : ĠBoolean Ċĉ ĉ ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Clip ( context : ĠLong , Ġpath : ĠLong , Ġrule : ĠInt ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Create Linear Gradient ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ x 0 : ĠFloat , Ċĉĉ ĉ y 0 : ĠFloat , Ċĉĉ ĉ x 1 : ĠFloat , Ċĉĉ ĉ y 1 : ĠFloat Ċĉ ĉ ): ĠLong ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Create Rad ial Gradient ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ x 0 : ĠFloat , Ċĉĉ ĉ y 0 : ĠFloat , Ċĉĉ ĉ r 0 : ĠFloat , Ċĉĉ ĉ x 1 : ĠFloat , Ċĉĉ ĉ y 1 : ĠFloat , Ċĉĉ ĉ r 1 : ĠFloat Ċĉ ĉ ): ĠLong ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Create Pattern ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ data : ĠByteArray , Ċĉĉ ĉ width : ĠInt , Ċĉĉ ĉ height : ĠInt , Ċĉĉ ĉ re petition : ĠInt Ċĉ ĉ ): ĠLong ĊĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Create Pattern Encoded ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ data : ĠByteArray , Ċĉĉ ĉ re petition : ĠInt Ċĉ ĉ ): ĠLong ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Create Pattern With Asset ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ asset : ĠLong , Ċĉĉ ĉ re petition : ĠInt Ċĉ ĉ ): ĠLong ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Get Global Composite Operation ( context : ĠLong ): ĠInt ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Set Global Composite Operation ( context : ĠLong , Ġoperation : ĠInt ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Set Global Alpha ( context : ĠLong , Ġglobal Alpha : ĠFloat ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Get Global Alpha ( context : ĠLong ): ĠFloat ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative SetText Align ( context : ĠLong , Ġalignment : ĠInt ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative GetText Align ( context : ĠLong ): ĠInt ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Save ( context : ĠLong ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Restore ( context : ĠLong ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Set Transform ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ a : ĠFloat , Ċĉĉ ĉ b : ĠFloat , Ċĉĉ ĉ c : ĠFloat , Ċĉĉ ĉ d : ĠFloat , Ċĉĉ ĉ e : ĠFloat , Ċĉĉ ĉ f : ĠFloat Ċĉ ĉ ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Transform ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ a : ĠFloat , Ċĉĉ ĉ b : ĠFloat , Ċĉĉ ĉ c : ĠFloat , Ċĉĉ ĉ d : ĠFloat , Ċĉĉ ĉ e : ĠFloat , Ċĉĉ ĉ f : ĠFloat Ċĉ ĉ ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Scale ( context : ĠLong , Ġx : ĠFloat , Ġy : ĠFloat ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Rotate ( context : ĠLong , Ġangle : ĠFloat ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Translate ( context : ĠLong , Ġx : ĠFloat , Ġy : ĠFloat ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Quadr atic Curve To ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ c px : ĠFloat , Ċĉĉ ĉ cpy : ĠFloat , Ċĉĉ ĉ x : ĠFloat , Ċĉĉ ĉ y : ĠFloat Ċĉ ĉ ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Draw Image D xD y ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ data : ĠByteArray , Ċĉĉ ĉ width : ĠFloat , Ċĉĉ ĉ height : ĠFloat , Ċĉĉ ĉ dx : ĠFloat , Ċĉĉ ĉ dy : ĠFloat Ċĉ ĉ ) ĊĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Draw Image D xD y With Bitmap ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ bitmap : ĠBitmap , Ċĉĉ ĉ width : ĠFloat , Ċĉĉ ĉ height : ĠFloat , Ċĉĉ ĉ dx : ĠFloat , Ċĉĉ ĉ dy : ĠFloat Ċĉ ĉ ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Draw Image D xD y With Asset ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ asset : ĠLong , Ċĉĉ ĉ dx : ĠFloat , Ċĉĉ ĉ dy : ĠFloat Ċĉ ĉ ) ĊĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Draw Image D xD y Dw Dy ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ data : ĠByteArray , Ċĉĉ ĉ width : ĠFloat , Ċĉĉ ĉ height : ĠFloat , Ċĉĉ ĉ dx : ĠFloat , Ċĉĉ ĉ dy : ĠFloat , Ċĉĉ ĉ d Width : ĠFloat , Ċĉĉ ĉ d Height : ĠFloat Ċĉ ĉ ) ĊĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Draw Image D xD y Dw Dh With Bitmap ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ bitmap : ĠBitmap , Ċĉĉ ĉ width : ĠFloat , Ċĉĉ ĉ height : ĠFloat , Ċĉĉ ĉ dx : ĠFloat , Ċĉĉ ĉ dy : ĠFloat , Ċĉĉ ĉ d Width : ĠFloat , Ċĉĉ ĉ d Height : ĠFloat Ċĉ ĉ ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Draw Image D xD y Dw Dh With Asset ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ asset : ĠLong , Ċĉĉ ĉ dx : ĠFloat , Ċĉĉ ĉ dy : ĠFloat , Ċĉĉ ĉ d Width : ĠFloat , Ċĉĉ ĉ d Height : ĠFloat Ċĉ ĉ ) ĊĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Draw Image ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ data : ĠByteArray , Ċĉĉ ĉ width : ĠFloat , Ċĉĉ ĉ height : ĠFloat , Ċĉĉ ĉ sx : ĠFloat , Ċĉĉ ĉ sy : ĠFloat , Ċĉĉ ĉ s Width : ĠFloat , Ċĉĉ ĉ s Height : ĠFloat , Ċĉĉ ĉ dx : ĠFloat , Ċĉĉ ĉ dy : ĠFloat , Ċĉĉ ĉ d Width : ĠFloat , Ċĉĉ ĉ d Height : ĠFloat Ċĉ ĉ ) ĊĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Draw Image With Bitmap ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ bitmap : ĠBitmap , Ċĉĉ ĉ width : ĠFloat , Ċĉĉ ĉ height : ĠFloat , Ċĉĉ ĉ sx : ĠFloat , Ċĉĉ ĉ sy : ĠFloat , Ċĉĉ ĉ s Width : ĠFloat , Ċĉĉ ĉ s Height : ĠFloat , Ċĉĉ ĉ dx : ĠFloat , Ċĉĉ ĉ dy : ĠFloat , Ċĉĉ ĉ d Width : ĠFloat , Ċĉĉ ĉ d Height : ĠFloat Ċĉ ĉ ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Draw Image With Asset ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ asset : ĠLong , Ċĉĉ ĉ sx : ĠFloat , Ċĉĉ ĉ sy : ĠFloat , Ċĉĉ ĉ s Width : ĠFloat , Ċĉĉ ĉ s Height : ĠFloat , Ċĉĉ ĉ dx : ĠFloat , Ċĉĉ ĉ dy : ĠFloat , Ċĉĉ ĉ d Width : ĠFloat , Ċĉĉ ĉ d Height : ĠFloat Ċĉ ĉ ) ĊĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Get Shadow Blur ( context : ĠLong ): ĠFloat ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Set Shadow Blur ( context : ĠLong , Ġblur : ĠFloat ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Get Shadow Color ( context : ĠLong ): ĠString ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Set Shadow Color ( context : ĠLong , Ġr : ĠInt , Ġg : ĠInt , Ġb : ĠInt , Ġa : ĠInt ): ĠString ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Set Shadow Color String ( context : ĠLong , Ġcolor : ĠString ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Get Shadow Offset X ( context : ĠLong ): ĠFloat ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Set Shadow Offset X ( context : ĠLong , Ġx : ĠFloat ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Get Shadow Offset Y ( context : ĠLong ): ĠFloat ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Set Shadow Offset Y ( context : ĠLong , Ġy : ĠFloat ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Get Font ( context : ĠLong ): ĠString ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Set Font ( context : ĠLong , Ġfont : ĠString ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Get Image Sm oothing Enabled ( context : ĠLong ): ĠBoolean ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Set Image Sm oothing Enabled ( context : ĠLong , Ġenabled : ĠBoolean ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Get Image Sm oothing Quality ( context : ĠLong ): ĠInt ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Set Image Sm oothing Quality ( context : ĠLong , Ġquality : ĠInt ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative GetCurrent Transform ( context : ĠLong ): ĠLong ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Set Current Transform ( context : ĠLong , Ġtransform : ĠLong ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Measure Text ( context : ĠLong , Ġtext : ĠString ): ĠLong ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Create ImageData ( context : ĠLong , Ġwidth : ĠInt , Ġheight : ĠInt ): ĠLong ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Put ImageData ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ image Data : ĠLong , Ċĉĉ ĉ dx : ĠFloat , Ċĉĉ ĉ dy : ĠFloat , Ċĉĉ ĉ dirty X : ĠFloat , Ċĉĉ ĉ dirty Y : ĠFloat , Ċĉĉ ĉ dirty Width : ĠFloat , Ċĉĉ ĉ dirty Height : ĠFloat Ċĉ ĉ ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Get ImageData ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ sx : ĠFloat , Ċĉĉ ĉ sy : ĠFloat , Ċĉĉ ĉ sw : ĠFloat , Ċĉĉ ĉ sh : ĠFloat Ċĉ ĉ ): ĠLong ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Reset Transform ( context : ĠLong ) ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Is Point In Path ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ path : ĠLong , Ċĉĉ ĉ x : ĠFloat , Ċĉĉ ĉ y : ĠFloat , Ċĉĉ ĉ rule : ĠInt Ċĉ ĉ ): ĠBoolean ĊĊĉ ĉ @ Jvm Static Ċĉ ĉ private Ġexternal Ġfun Ġnative Is Point In Stroke ( Ċĉĉ ĉ context : ĠLong , Ċĉĉ ĉ path : ĠLong , Ċĉĉ ĉ x : ĠFloat , Ċĉĉ ĉ y : ĠFloat Ċĉ ĉ ): ĠBoolean ĊĊĉ ĉ private Ġfun Ġprint Log ( msg : ĠString ) Ġ{ Ċĉĉ ĉ if Ġ( isDebug ) Ġ{ Ċĉĉĉ ĉ Log . d ( TAG , Ġmsg ) Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ var Ġis Debug Ġ= Ġfalse Ċ ĉ } Ċ } Ċ