/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 Ġ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 . samples Ċ Ċ import Ġandroidx . annotation . Sample d Ċ import Ġandroidx . compose . foundation . Image Ċ import Ġandroidx . compose . foundation . click able Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . layout . required Size Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . setValue Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . ui . graphics . draw scope . Content Draw Scope Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . draw . draw With Cache Ċ import Ġandroidx . compose . ui . geometry . Offset Ċ import Ġandroidx . compose . ui . graphics . Blend Mode Ċ import Ġandroidx . compose . ui . graphics . Brush Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . graphics . Solid Color Ċ import Ġandroidx . compose . ui . graphics . vector . Path Ċ import Ġandroidx . compose . ui . graphics . vector . Path Data Ċ import Ġandroidx . compose . ui . graphics . vector . remember Vector Painter Ċ import Ġandroidx . compose . ui . unit . dp Ċ Ċ /** Ċ Ġ* ĠSample Ġshowing Ġhow Ġto Ġleverage Ġ[ Modifier . draw With Cache ] Ġin Ġorder Ċ Ġ* Ġto Ġcache Ġcontents Ġin Ġbetween Ġdraw Ġcalls Ġthat Ġdepend Ġon Ġs izing Ġinformation . Ċ Ġ* ĠIn Ġthe Ġexample Ġbelow , Ġthe ĠLinear Gradient Ġis Ġcreated Ġonce Ġand Ġre - used Ġacross Ċ Ġ* Ġcalls Ġto Ġon Draw . ĠIf Ġthe Ġsize Ġof Ġthe Ġdrawing Ġarea Ġchanges , Ġthen Ġthe Ċ Ġ* ĠLinear Gradient Ġis Ġre - created Ġwith Ġthe Ġupdated Ġwidth Ġand Ġheight . Ċ Ġ*/ Ċ @ Sample d Ċ @ Composable Ċ fun ĠDraw With Cache Modifier Sample () Ġ{ ĊĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠ ĠModifier . draw With Cache Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgradient Ġ= ĠBr ush . linear Gradient ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolors Ġ= ĠlistOf ( Color . Red , ĠColor . Blue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= ĠOffset . Zero , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= ĠOffset ( size . width , Ġsize . height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Draw Be hind Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Rect ( gradient ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠSample Ġshowing Ġhow Ġto Ġleverage Ġ[ Modifier . draw With Cache ] Ġto Ġpersist Ġdata Ġacross Ċ Ġ* Ġdraw Ġcalls . ĠIn Ġthe Ġexample Ġbelow , Ġthe Ġlinear Ġgradient Ġwill Ġbe Ġre - created Ġif Ġeither Ċ Ġ* Ġthe Ġsize Ġof Ġthe Ġdrawing Ġarea Ġchanges , Ġor Ġthe Ġtoggle Ġflag Ġrepresented Ġby Ġa Ġmutable Ġstate Ċ Ġ* Ġobject Ġchanges . ĠOtherwise Ġthe Ġsame Ġlinear Ġgradient Ġinstance Ġis Ġre - used Ġfor Ġeach Ġcall Ċ Ġ* Ġto Ġdraw Rect . Ċ Ġ*/ Ċ @ Sample d Ċ @ Composable Ċ fun ĠDraw With Cache Modifier State Parameter Sample () Ġ{ ĊĠĠĠ Ġval Ġcolors 1 Ġ= ĠlistOf ( Color . Red , ĠColor . Blue ) ĊĠĠĠ Ġval Ġcolors 2 Ġ= ĠlistOf ( Color . Yellow , ĠColor . Green ) ĊĠĠĠ Ġvar Ġtoggle Ġby Ġremember Ġ{ Ġmutable State Of ( true ) Ġ} ĊĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠ ĠModifier . click able Ġ{ Ġtoggle Ġ= Ġ! toggle Ġ}. draw With Cache Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgradient Ġ= ĠBr ush . linear Gradient ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolors Ġ= Ġif Ġ( toggle ) Ġcolors 1 Ġelse Ġcolors 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= ĠOffset . Zero , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= ĠOffset ( size . width , Ġsize . height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Draw Be hind Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Rect ( gradient ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠSample Ġshowing Ġhow Ġto Ġleverage Ġ[ Modifier . draw With Cache ] Ġto Ġcache Ġa ĠLinear Gradient Ċ Ġ* Ġif Ġthe Ġsize Ġis Ġunchanged . ĠAdditionally Ġthis Ġsample Ġillustr ates Ġhow Ġto Ġre - arrange Ċ Ġ* Ġdrawing Ġorder Ġusing Ġ[ Content Draw Scope . draw Content ] Ġin Ġorder Ġto Ġdraw Ġthe Ġdesired Ċ Ġ* Ġcontent Ġfirst Ġto Ġsupport Ġbl ending Ġagainst Ġthe Ġsample Ġvector Ġgraphic Ġof Ġa Ġtriangle Ċ Ġ*/ Ċ @ Sample d Ċ @ Composable Ċ fun ĠDraw With Cache Content Sample () Ġ{ ĊĠĠĠ Ġval Ġvector Painter Ġ= Ġremember Vector Painter ( 2 4 . dp , Ġ 2 4 . dp , Ġauto Mirror Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviewport Width , Ġviewport Height Ġ-> ĊĠĠĠĠĠĠĠ ĠPath ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Data Ġ= ĠPath Data Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( viewport Width , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( 0 f , Ġviewport Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfill Ġ= ĠSolid Color ( Color . Black ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ ĠImage ( ĊĠĠĠĠĠĠĠ Ġpainter Ġ= Ġvector Painter , ĊĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . required Size ( 1 2 0 . dp ). draw With Cache Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgradient Ġ= ĠBr ush . linear Gradient ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolors Ġ= ĠlistOf ( Color . Red , ĠColor . Blue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= ĠOffset . Zero , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= ĠOffset ( 0 f , Ġsize . height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Draw With Content Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Content () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Rect ( gradient , Ġblend Mode Ġ= ĠBlend Mode . Plus ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ }