package Ġcom . app spell . shader view . demo . ui Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . ViewGroup . LayoutParams . MATCH _ PARENT Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroidx . annotation . Attr Res Ċ import Ġandroidx . annotation . Color Res Ċ import Ġandroidx . annotation . Style Res Ċ import Ġandroidx . core . view . children Ċ import Ġcom . app spell . shader view . Shader View Ċ import Ġcom . app spell . shader view . demo . R Ċ import Ġcom . app spell . shader view . gl . params . Shader Params Builder Ċ Ċ private Ġconst Ġval ĠSH ADER _ UNIFORM _ VIEW _ SIZE Ġ= Ġ" u View Size " Ċ private Ġconst Ġval ĠSH ADER _ UNIFORM _ COR NER _ RADIUS Ġ= Ġ" u Corner Radius " Ċ private Ġconst Ġval ĠSH ADER _ UNIFORM _ S MO OTH NESS Ġ= Ġ" u Smooth ness " Ċ private Ġconst Ġval ĠSH ADER _ UNIFORM _ SCALE Ġ= Ġ" u Scale " Ċ private Ġconst Ġval ĠSH ADER _ UNIFORM _ COLOR Ġ= Ġ" u Color " Ċ private Ġconst Ġval ĠSH ADER _ UNIFORM _ LIGHT _ DIRECTION Ġ= Ġ" u Light Direction " Ċ Ċ /** Ċ Ġ* ĠThis Ġclass Ġis Ġmade Ġjust Ġonly Ġas Ġa Ġproof Ġof Ġconcept Ċ Ġ* Ġdon 't Ġjudge Ġthe Ġcode Ċ Ġ*/ Ċ class ĠShape Layout Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġ@ Attr Res Ġdef Style Attr : ĠInt Ġ= Ġ 0 , ĊĠĠĠ Ġ@ Style Res Ġdef Style Res : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠFrame Layout ( context , Ġattrs , Ġdef Style Attr , Ġdef Style Res ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlight Direction Ġ= Ġfloat ArrayOf (- 0 . 5 f , Ġ 1 . 0 f , Ġ 1 . 0 f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġradius : ĠFloat Ġ= Ġresources . get Dimension ( R . dim en . corner _ radius ) ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġupdate Ġshape ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshape ?. shader Params Ġ= Ġshape ?. shader Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . add Float ( SHADER _ UNIFORM _ COR NER _ RADIUS , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġsmooth ness : ĠFloat Ġ= Ġ 1 . 5 f ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshape ?. shader Params Ġ= Ġshape ?. shader Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . add Float ( SHADER _ UNIFORM _ S MO OTH NESS , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġscale : ĠFloat Ġ= Ġ 0 . 0 1 f ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshape ?. shader Params Ġ= Ġshape ?. shader Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . add Float ( SHADER _ UNIFORM _ SCALE , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Color Res ĊĠĠĠ Ġvar Ġcolor : ĠInt Ġ= ĠR . color . background ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshape ?. shader Params Ġ= Ġshape ?. shader Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . add Color ( SHADER _ UNIFORM _ COLOR , Ġvalue , Ġresources ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġoffset ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( radius Ġ* Ġ 0 . 5 f ). toInt () ĊĊĠĠĠ Ġprivate Ġvar Ġshape : ĠShader View ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate Background ( attrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Background ( attrs : ĠAttributeSet ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġshape Ġ= ĠShader View ( context , Ġattrs ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params Ġ= ĠViewGroup . LayoutParams ( MATCH _ PARENT , ĠMATCH _ PARENT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Continuous ly Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertex Shader Raw Res Id Ġ= ĠR . raw . quad _ tang ent _ space _ vert ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Shader Raw Res Id Ġ= ĠR . raw . gui _ element _ fair _ light ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshader Params Ġ= ĠShader Params Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Vec 2 f ( SHADER _ UNIFORM _ VIEW _ SIZE , Ġfloat ArrayOf ( 0 f , Ġ 0 f )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Float ( SHADER _ UNIFORM _ COR NER _ RADIUS , Ġradius ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Float ( SHADER _ UNIFORM _ S MO OTH NESS , Ġsmooth ness ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Float ( SHADER _ UNIFORM _ SCALE , Ġscale ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Color ( SHADER _ UNIFORM _ COLOR , Ġcolor , Ġresources ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Vec 3 f ( SHADER _ UNIFORM _ LIGHT _ DIRECTION , Ġlight Direction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdebug Mode Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd View ( shape ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= ĠMeasure Spec . getSize ( width Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= ĠMeasure Spec . getSize ( height Measure Spec ) ĊĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( width , Ġheight ) ĊĊĠĠĠĠĠĠĠ Ġchildren . forEach Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Ġ! is ĠShader View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Width Ġ= ĠMeasure Spec . make Measure Spec ( width Ġ- Ġoffset , ĠMeasure Spec . EX ACT LY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Height Ġ= ĠMeasure Spec . make Measure Spec ( height Ġ- Ġoffset , ĠMeasure Spec . EX ACT LY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . measure ( new Width , Ġnew Height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Width Ġ= ĠMeasure Spec . make Measure Spec ( width , ĠMeasure Spec . EX ACT LY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Height Ġ= ĠMeasure Spec . make Measure Spec ( height , ĠMeasure Spec . EX ACT LY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . measure ( new Width , Ġnew Height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Layout ( changed : ĠBoolean , Ġleft : ĠInt , Ġtop : ĠInt , Ġright : ĠInt , Ġbottom : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchildren . forEach Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth : ĠInt Ġ= Ġview . meas ured Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight : ĠInt Ġ= Ġview . meas ured Height ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Ġ! is ĠShader View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . layout ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . layout ( 0 , Ġ 0 , Ġwidth , Ġheight ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġapply Ġnew Ġsize Ġfor Ġshaders ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Shaders View Size ( width , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Shaders View Size ( width : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshape ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshader Params Ġ= Ġshader Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . add Vec 2 f ( SHADER _ UNIFORM _ VIEW _ SIZE , Ġfloat ArrayOf ( width . toFloat (), Ġheight . toFloat ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Render () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }