/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġandroidx . compose . ui . graphics Ċ Ċ import Ġandroid . graphics . Port er D uff X fer mode Ċ import Ġandroid . os . Build Ċ import Ġandroidx . annotation . Requires Api Ċ Ċ actual Ġtype alias ĠNative Paint Ġ= Ġandroid . graphics . Paint Ċ Ċ actual Ġfun ĠPaint (): ĠPaint Ġ= ĠAndroid Paint () Ċ Ċ class ĠAndroid Paint Ġ: ĠPaint Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġinternal Paint Ġ= Ġmake Native Paint () ĊĠĠĠ Ġprivate Ġvar Ġ_ blend Mode Ġ= ĠBlend Mode . Src Over ĊĠĠĠ Ġprivate Ġvar Ġinternal Shader : ĠShader ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġinternal Color Filter : ĠColor Filter ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġas Framework Paint (): ĠNative Paint Ġ= Ġinternal Paint ĊĊĠĠĠ Ġoverride Ġvar Ġalpha : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinternal Paint . get Native Alpha () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Paint . set Native Alpha ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġis Anti Alias : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinternal Paint . get Native Anti Alias () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Paint . set Native Anti Alias ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġcolor : ĠColor ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinternal Paint . get Native Color () ĊĠĠĠĠĠĠĠ Ġset ( color ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Paint . set Native Color ( color ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġblend Mode : ĠBlend Mode ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ blend Mode ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ blend Mode Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Paint . set Native Blend Mode ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġstyle : ĠPaint ing Style ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinternal Paint . get Native Style () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Paint . set Native Style ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar ĠstrokeWidth : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinternal Paint . get Native Stroke Width () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Paint . set Native Stroke Width ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġstroke Cap : ĠSt roke Cap ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinternal Paint . get Native Stroke Cap () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Paint . set Native Stroke Cap ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġstroke Join : ĠSt roke Join ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinternal Paint . get Native Stroke Join () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Paint . set Native Stroke Join ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġstroke M iter Limit : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinternal Paint . get Native Stroke M iter Limit () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Paint . set Native Stroke M iter Limit ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO ( ian h ): Ġverify Ġthat Ġthe Ġimage Ġdrawing Ġmethods Ġactually Ġrespect Ġthis ĊĠĠĠ Ġoverride Ġvar Ġfilter Quality : ĠFilter Quality ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinternal Paint . get Native Filter Quality () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Paint . set Native Filter Quality ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġshader : ĠShader ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinternal Shader ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Shader Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Paint . set Native Shader ( internal Shader ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġcolor Filter : ĠColor Filter ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinternal Color Filter ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Color Filter Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Paint . set Native Color Filter ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġpath Effect : ĠPath Effect ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Paint . set Native Path Effect ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun Ġmake Native Paint () Ġ= ĊĠĠĠ Ġandroid . graphics . Paint ( android . graphics . Paint . ANTI _ ALIAS _ FLAG ) Ċ Ċ internal Ġfun ĠNative Paint . set Native Blend Mode ( mode : ĠBlend Mode ) Ġ{ ĊĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 9 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAll Ġblend Ġmodes Ġsupported Ġin ĠQ ĊĠĠĠĠĠĠĠ ĠWrapper Verification Helper Methods . set Blend Mode ( this , Ġmode ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠElse Ġfall Ġback Ġon Ġplatform Ġalternatives ĊĠĠĠĠĠĠĠ Ġthis . xfer mode Ġ= ĠPort er D uff X fer mode ( mode . to Port er D uff Mode ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun ĠNative Paint . set Native Color Filter ( value : ĠColor Filter ?) Ġ{ ĊĠĠĠ Ġcolor Filter Ġ= Ġvalue ?. as Android Color Filter () Ċ } Ċ Ċ internal Ġfun ĠNative Paint . get Native Alpha () Ġ= Ġthis . alpha Ġ/ Ġ 2 5 5 f Ċ Ċ internal Ġfun ĠNative Paint . set Native Alpha ( value : ĠFloat ) Ġ{ ĊĠĠĠ Ġthis . alpha Ġ= Ġkotlin . math . round ( value Ġ* Ġ 2 5 5 . 0 f ). toInt () Ċ } Ċ Ċ internal Ġfun ĠNative Paint . get Native Anti Alias (): ĠBoolean Ġ= Ġthis . is Anti Alias Ċ Ċ internal Ġfun ĠNative Paint . set Native Anti Alias ( value : ĠBoolean ) Ġ{ ĊĠĠĠ Ġthis . is Anti Alias Ġ= Ġvalue Ċ } Ċ Ċ internal Ġfun ĠNative Paint . get Native Color (): ĠColor Ġ= ĠColor ( this . color ) Ċ Ċ internal Ġfun ĠNative Paint . set Native Color ( value : ĠColor ) Ġ{ ĊĠĠĠ Ġthis . color Ġ= Ġvalue . to Argb () Ċ } Ċ Ċ internal Ġfun ĠNative Paint . set Native Style ( value : ĠPaint ing Style ) Ġ{ ĊĠĠĠ Ġ// ĠTODO ( nj aw ad ): ĠPlatform Ġalso Ġsupports ĠPaint . Style . FILL _ AND _ ST RO KE ) ĊĠĠĠ Ġthis . style Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ ĠPaint ing Style . Stroke Ġ-> Ġandroid . graphics . Paint . Style . ST RO KE ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġandroid . graphics . Paint . Style . FILL ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun ĠNative Paint . get Native Style () Ġ= Ġwhen Ġ( this . style ) Ġ{ ĊĠĠĠ Ġandroid . graphics . Paint . Style . ST RO KE Ġ-> ĠPaint ing Style . Stroke ĊĠĠĠ Ġelse Ġ-> ĠPaint ing Style . Fill Ċ } Ċ Ċ internal Ġfun ĠNative Paint . get Native Stroke Width (): ĠFloat Ġ= ĊĠĠĠ Ġthis . stroke Width Ċ Ċ internal Ġfun ĠNative Paint . set Native Stroke Width ( value : ĠFloat ) Ġ{ ĊĠĠĠ Ġthis . stroke Width Ġ= Ġvalue Ċ } Ċ Ċ internal Ġfun ĠNative Paint . get Native Stroke Cap (): ĠSt roke Cap Ġ= Ġwhen Ġ( this . stroke Cap ) Ġ{ ĊĠĠĠ Ġandroid . graphics . Paint . Cap . B UT T Ġ-> ĠSt roke Cap . But t ĊĠĠĠ Ġandroid . graphics . Paint . Cap . ROUND Ġ-> ĠSt roke Cap . Round ĊĠĠĠ Ġandroid . graphics . Paint . Cap . S QUARE Ġ-> ĠSt roke Cap . Square ĊĠĠĠ Ġelse Ġ-> ĠSt roke Cap . But t Ċ } Ċ Ċ internal Ġfun ĠNative Paint . set Native Stroke Cap ( value : ĠSt roke Cap ) Ġ{ ĊĠĠĠ Ġthis . stroke Cap Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSt roke Cap . Square Ġ-> Ġandroid . graphics . Paint . Cap . S QUARE ĊĠĠĠĠĠĠĠ ĠSt roke Cap . Round Ġ-> Ġandroid . graphics . Paint . Cap . ROUND ĊĠĠĠĠĠĠĠ ĠSt roke Cap . But t Ġ-> Ġandroid . graphics . Paint . Cap . B UT T ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġandroid . graphics . Paint . Cap . B UT T ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun ĠNative Paint . get Native Stroke Join (): ĠSt roke Join Ġ= ĊĠĠĠ Ġwhen Ġ( this . stroke Join ) Ġ{ ĊĠĠĠĠĠĠĠ Ġandroid . graphics . Paint . Join . MIT ER Ġ-> ĠSt roke Join . M iter ĊĠĠĠĠĠĠĠ Ġandroid . graphics . Paint . Join . BE VEL Ġ-> ĠSt roke Join . Be vel ĊĠĠĠĠĠĠĠ Ġandroid . graphics . Paint . Join . ROUND Ġ-> ĠSt roke Join . Round ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠSt roke Join . M iter ĊĠĠĠ Ġ} Ċ Ċ internal Ġfun ĠNative Paint . set Native Stroke Join ( value : ĠSt roke Join ) Ġ{ ĊĠĠĠ Ġthis . stroke Join Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSt roke Join . M iter Ġ-> Ġandroid . graphics . Paint . Join . MIT ER ĊĠĠĠĠĠĠĠ ĠSt roke Join . Be vel Ġ-> Ġandroid . graphics . Paint . Join . BE VEL ĊĠĠĠĠĠĠĠ ĠSt roke Join . Round Ġ-> Ġandroid . graphics . Paint . Join . ROUND ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġandroid . graphics . Paint . Join . MIT ER ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun ĠNative Paint . get Native Stroke M iter Limit (): ĠFloat Ġ= ĊĠĠĠ Ġthis . stroke M iter Ċ Ċ internal Ġfun ĠNative Paint . set Native Stroke M iter Limit ( value : ĠFloat ) Ġ{ ĊĠĠĠ Ġthis . stroke M iter Ġ= Ġvalue Ċ } Ċ Ċ internal Ġfun ĠNative Paint . get Native Filter Quality (): ĠFilter Quality Ġ= ĊĠĠĠ Ġif Ġ(! this . is Filter Bitmap ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFilter Quality . None ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO Ġb / 1 6 2 2 8 4 7 2 1 Ġ( nj aw ad ): ĠAlign Ġwith ĠFramework ĠAPIs ) ĊĠĠĠĠĠĠĠ Ġ// ĠFramework Ġonly Ġsupports Ġb ilinear Ġfiltering Ġwhich Ġmaps Ġto ĠFilter Quality . low ĊĠĠĠĠĠĠĠ Ġ// ĠFilter Quality . medium Ġand ĠFilter Qu ail ty . high Ġrefer Ġto Ġa Ġcombination Ġof ĊĠĠĠĠĠĠĠ Ġ// Ġb ilinear Ġinterpolation , Ġpy ramid al Ġparameter ic Ġpref ilter ing Ġ( mip maps ) Ġas Ġwell Ġas ĊĠĠĠĠĠĠĠ Ġ// Ġb ic ubic Ġinterpolation Ġrespectively ĊĠĠĠĠĠĠĠ ĠFilter Quality . Low ĊĠĠĠ Ġ} Ċ Ċ internal Ġfun ĠNative Paint . set Native Filter Quality ( value : ĠFilter Quality ) Ġ{ ĊĠĠĠ Ġthis . is Filter Bitmap Ġ= Ġvalue Ġ!= ĠFilter Quality . None Ċ } Ċ Ċ internal Ġfun ĠNative Paint . set Native Shader ( value : ĠShader ?) Ġ{ ĊĠĠĠ Ġthis . shader Ġ= Ġvalue Ċ } Ċ Ċ internal Ġfun ĠNative Paint . set Native Path Effect ( value : ĠPath Effect ?) Ġ{ ĊĠĠĠ Ġthis . path Effect Ġ= Ġ( value Ġas ĠAndroid Path Effect ?) ?. native Path Effect Ċ } Ċ Ċ /** Ċ Ġ* ĠThis Ġclass Ġis Ġhere Ġto Ġensure Ġthat Ġthe Ġclasses Ġthat Ġuse Ġthis ĠAPI Ġwill Ġget Ġverified Ġand Ġcan Ġbe Ċ Ġ* ĠA OT Ġcompiled . ĠIt Ġis Ġexpected Ġthat Ġthis Ġclass Ġwill Ġsoft - fail Ġverification , Ġbut Ġthe Ġclasses Ċ Ġ* Ġwhich Ġuse Ġthis Ġmethod Ġwill Ġpass . Ċ Ġ*/ Ċ @ Requires Api ( Build . VERSION _ CODES . Q ) Ċ internal Ġobject ĠWrapper Verification Helper Methods Ġ{ ĊĠĠĠ Ġ@ android x . annotation . DoNot Inline ĊĠĠĠ Ġfun Ġset Blend Mode ( paint : ĠNative Paint , Ġmode : ĠBlend Mode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpaint . blend Mode Ġ= Ġmode . to Android Blend Mode () ĊĠĠĠ Ġ} Ċ }