package Ġcom . github . compose . wave loading Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroidx . annotation . Float Range Ċ import Ġandroidx . compose . animation . core . remember Infinite Transition Ċ import Ġandroidx . compose . material . Material Theme Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . State Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . composed Ċ import Ġandroidx . compose . ui . draw . Draw Modifier Ċ import Ġandroidx . compose . ui . geometry . Rect Ċ import Ġandroidx . compose . ui . graphics . Blend Mode Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . graphics . Color Filter Ċ import Ġandroidx . compose . ui . graphics . Color Matrix Ċ import Ġandroidx . compose . ui . graphics . Paint Ċ import Ġandroidx . compose . ui . graphics . Paint ing Style Ċ import Ġandroidx . compose . ui . graphics . draw scope . Content Draw Scope Ċ import Ġandroidx . compose . ui . graphics . draw scope . Draw Scope Ċ import Ġandroidx . compose . ui . graphics . draw scope . draw Into Canvas Ċ import Ġandroidx . compose . ui . graphics . draw scope . translate Ċ import Ġandroidx . compose . ui . graphics . with Save Layer Ċ import Ġandroidx . compose . ui . platform . Local Density Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġkotlin . math . round ToInt Ċ Ċ @ Suppress Lint (" Un necessary Comp osed Modifier ", Ġ" Composable Modifier Factory ") Ċ @ Composable Ċ fun ĠModifier . wave Loading ( ĊĠĠĠ Ġfore Draw Type : ĠDraw Type Ġ= ĠDraw Type . Draw Image , ĊĠĠĠ Ġback Draw Type : ĠDraw Type Ġ= Ġremember Draw Color ( color Ġ= ĠColor . Light Gray ), ĊĠĠĠ Ġ@ Float Range ( from Ġ= Ġ 0 . 0 , Ġto Ġ= Ġ 1 . 0 ) Ġprogress : ĠFloat Ġ= Ġ 0 f , ĊĠĠĠ Ġ@ Float Range ( from Ġ= Ġ 0 . 0 , Ġto Ġ= Ġ 1 . 0 ) Ġamplitude : ĠFloat Ġ= Ġdefault A ml itude , ĊĠĠĠ Ġ@ Float Range ( from Ġ= Ġ 0 . 0 , Ġto Ġ= Ġ 1 . 0 ) Ġvelocity : ĠFloat Ġ= Ġdefault Velocity , Ċ ): ĠModifier Ġ= Ġcomposed Ġ{ ĊĠĠĠ Ġval Ġdp Ġ= ĠLocal Density . current . run Ġ{ Ġ 1 . dp . to Px () Ġ} ĊĊĠĠĠ Ġval Ġwaves Ġ= Ġremember Ġ{ ĊĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWave Anim ( wave Duration , Ġ 0 f , Ġ 0 f , Ġscale X , Ġscale Y ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWave Anim (( wave Duration Ġ* Ġ 0 . 7 5 f ). round ToInt (), Ġ 0 f , Ġ 0 f , Ġscale X , Ġscale Y ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWave Anim (( wave Duration Ġ* Ġ 0 . 5 f ). round ToInt (), Ġ 0 f , Ġ 0 f , Ġscale X , Ġscale Y ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġinfinite Transition Ġ= Ġremember Infinite Transition () ĊĠĠĠ Ġval Ġwave An imes Ġ= Ġwaves . map Ġ{ ĊĠĠĠĠĠĠĠ Ġinfinite Transition . animate Of ( duration Ġ= Ġit . duration ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġbackground Ġ= ĠMaterial Theme . colors . background ĊĊĠĠĠ Ġval Ġwave Loading Modifier Ġ= Ġremember ( progress , Ġamplitude , Ġvelocity , Ġwaves , Ġback Draw Type , Ġfore Draw Type ) Ġ{ ĊĠĠĠĠĠĠĠ ĠWave Loading Modifier ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfore Draw Type Ġ= Ġfore Draw Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġback Draw Type Ġ= Ġif Ġ( back Draw Type Ġis ĠDraw Type . None ) ĠDraw Type . Draw Color ( background ) Ġelse Ġback Draw Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdp Ġ= Ġdp , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Ġ= Ġprogress , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamplitude Ġ= Ġamplitude , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvelocity Ġ= Ġvelocity , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwaves Ġ= Ġwaves , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwave An imes Ġ= Ġwave An imes ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġwave Loading Modifier Ċ } Ċ Ċ private Ġclass ĠWave Loading Modifier ( ĊĠĠĠ Ġprivate Ġval Ġfore Draw Type : ĠDraw Type , ĊĠĠĠ Ġprivate Ġval Ġback Draw Type : ĠDraw Type , ĊĠĠĠ Ġprivate Ġval Ġdp : ĠFloat , ĊĠĠĠ Ġprivate Ġval Ġprogress : ĠFloat , ĊĠĠĠ Ġprivate Ġval Ġamplitude : ĠFloat , ĊĠĠĠ Ġprivate Ġval Ġvelocity : ĠFloat , ĊĠĠĠ Ġprivate Ġval Ġwaves : ĠList < Wave Anim >, ĊĠĠĠ Ġprivate Ġval Ġwave An imes : ĠList < State < Float >> Ċ ) Ġ: ĠDraw Modifier Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġwaves Color Ġ= Ġwhen Ġ( fore Draw Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠDraw Type . Draw Color Ġ-> Ġfore Draw Type . color ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠColor . Light Gray ĊĠĠĠ Ġ}. copy ( alpha Ġ= Ġfore Draw Alpha ) ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĽłä¸º çĽ®åīį ç¬¬äºĮ ä¸ª åĽ¾ å±Ĥ æĺ¯ ä½¿çĶ¨çļĦ Src In ï¼Į åıª æĺ¾ç¤º ä¸Ĭ åįĬ éĥ¨åĪĨ ï¼Ľ ĊĠĠĠĠ Ġ* Ġ æīĢä»¥ ç¬¬ä¸Ģ åĽ¾ å±Ĥ ä¸º Ġ è¿Ľ åº¦ ï¼Į ç¬¬äºĮ åĽ¾ å±Ĥ ä¸º Ġ èĥĮæĻ¯ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġforce Paint Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( fore Draw Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDraw Type . Draw Color Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint ing Style . Fill ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Filter Ġ= ĠColor Filter . tint ( fore Draw Type . color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDraw Type . Draw Image , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDraw Type . None Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnothing Ġto Ġdo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġback Paint Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint ing Style . Fill ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( back Draw Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDraw Type . Draw Color Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Filter Ġ= ĠColor Filter . tint ( back Draw Type . color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDraw Type . None Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDraw Type . Draw Image Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠColor Matrix () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . set ToS at uration ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Filter Ġ= ĠColor Filter . color Matrix ( matrix ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠContent Draw Scope . draw () Ġ= Ġdraw Into Canvas Ġ{ Ġcanvas Ġ-> ĊĠĠĠĠĠĠĠ Ġcanvas . with Save Layer ( max Bounds (), Ġforce Paint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Content () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcanvas . with Save Layer ( max Bounds (), Ġback Paint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Content () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw W aves ( waves Color , Ġblend Mode Ġ= ĠBlend Mode . Src In ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠDraw Scope . draw W aves ( wave Color : ĠColor , Ġblend Mode : ĠBlend Mode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwaves . forEach Indexed Ġ{ Ġindex , Ġwave Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmaxWidth Ġ= Ġ 2 Ġ* Ġscale X Ġ* Ġsize . width Ġ/ Ġvelocity . coerce At Least ( 0 . 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmaxHeight Ġ= Ġscale Y Ġ* Ġsize . height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset X Ġ= ĠmaxWidth Ġ/ Ġ 2 Ġ* Ġ( 1 Ġ- Ġwave An imes [ index ]. value ) Ġ- Ġwave . offset X ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Y Ġ= Ġwave . offset Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtranslate (- offset X , Ġ- offset Y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Path ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwave . build Wave Path ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdp Ġ= Ġdp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= ĠmaxWidth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= ĠmaxHeight , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamplitude Ġ= Ġsize . height Ġ* Ġamplitude , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Ġ= Ġprogress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġwave Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblend Mode Ġ= Ġblend Mode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Suppress (" NOTH ING _ TO _ INLINE ") Ċ internal Ġinline Ġfun ĠDraw Scope . max Bounds () Ġ= ĠRect ( 0 f , Ġ 0 f , Ġsize . width , Ġsize . height ) Ċ