package Ġcom . o he u rop a . android . ui . intro Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Matrix Ċ import Ġandroid . graphics . Surface Texture Ċ import Ġandroid . media . MediaPlayer Ċ import Ġandroid . net . Uri Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Surface Ċ import Ġandroid . view . Texture View Ċ import Ġcom . github . aj alt . tim ber kt . d Ċ import Ġcom . github . aj alt . tim ber kt . w Ċ import Ġjava . io . IOException Ċ Ċ class ĠTexture Video View ( ctx : ĠContext , Ġattrs : ĠAttributeSet ) Ġ: ĠTexture View ( ctx , Ġattrs ), ĊĠĠĠ ĠTexture View . Surface Texture Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġmedia Player : ĠMedia Player ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġvideo Height : ĠFloat Ġ= Ġ 0 F ĊĠĠĠ Ġprivate Ġvar Ġvideo Width : ĠFloat Ġ= Ġ 0 F ĊĊĠĠĠ Ġprivate Ġvar Ġis DataSource Set : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis View Available : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis Video Prepared : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis Play Called : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġvar Ġscale Type : ĠScale Type ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġstate : ĠState ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġfun Ġlog ( message : ĠString ) Ġ= Ġd Ġ{ Ġmessage Ġ} ĊĊĠĠĠ Ġval Ġduration : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmedia Player !!. duration ĊĊĠĠĠ Ġprivate Ġvar Ġm Listener : ĠMedia Player Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġenum Ġclass ĠScale Type Ġ{ ĠC ENTER _ C ROP , ĠTOP , ĠBOTTOM Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠState Ġ{ ĠUN INITIAL IZED , ĠP LAY , ĠSTOP , ĠPA USE , ĠEND Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Player () ĊĠĠĠĠĠĠĠ Ġscale Type Ġ= ĠScale Type . CENTER _ C ROP ĊĠĠĠĠĠĠĠ Ġsurface Texture Listener Ġ= Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Texture View Size () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Width Ġ= Ġwidth . toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġview Height Ġ= Ġheight . toFloat () ĊĊĠĠĠĠĠĠĠ Ġvar Ġscale X Ġ= Ġ 1 . 0 f ĊĠĠĠĠĠĠĠ Ġvar Ġscale Y Ġ= Ġ 1 . 0 f ĊĊĠĠĠĠĠĠĠ Ġif Ġ( video Width Ġ> Ġview Width Ġ&& Ġvideo Height Ġ> Ġview Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale X Ġ= Ġvideo Width Ġ/ Ġview Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale Y Ġ= Ġvideo Height Ġ/ Ġview Height ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( video Width Ġ< Ġview Width Ġ&& Ġvideo Height Ġ< Ġview Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale Y Ġ= Ġview Width Ġ/ Ġvideo Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale X Ġ= Ġview Height Ġ/ Ġvideo Height ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( view Width Ġ> Ġvideo Width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale Y Ġ= Ġview Width Ġ/ Ġvideo Width Ġ/ Ġ( view Height Ġ/ Ġvideo Height ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( view Height Ġ> Ġvideo Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale X Ġ= Ġview Height Ġ/ Ġvideo Height Ġ/ Ġ( view Width Ġ/ Ġvideo Width ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠCalculate Ġpivot Ġpoints , Ġin Ġour Ġcase Ġcrop Ġfrom Ġcenter ĊĠĠĠĠĠĠĠ Ġval Ġpivot Point X : ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġpivot Point Y : ĠInt ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( scale Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTexture Video View . Scale Type . TOP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpivot Point X Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpivot Point Y Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTexture Video View . Scale Type . BOTTOM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpivot Point X Ġ= Ġview Width . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpivot Point Y Ġ= Ġview Height . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTexture Video View . Scale Type . CENTER _ C ROP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpivot Point X Ġ= Ġ( view Width Ġ/ Ġ 2 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpivot Point Y Ġ= Ġ( view Height Ġ/ Ġ 2 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpivot Point X Ġ= Ġ( view Width Ġ/ Ġ 2 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpivot Point Y Ġ= Ġ( view Height Ġ/ Ġ 2 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () ĊĠĠĠĠĠĠĠ Ġmatrix . set Scale ( scale X , Ġscale Y , Ġpivot Point X . toFloat (), Ġpivot Point Y . toFloat ()) ĊĊĠĠĠĠĠĠĠ Ġset Transform ( matrix ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Player () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( media Player Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player Ġ= ĠMedia Player () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. reset () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis Video Prepared Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġis Play Called Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . UN INITIAL IZED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset DataSource ( context : ĠContext , Ġuri : ĠUri ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Player () ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. set DataSource ( context , Ġuri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis DataSource Set Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprepare () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġw ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. setOn Video Size Changed Listener Ġ{ Ġ_, Ġwidth , Ġheight Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Width Ġ= Ġwidth . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Height Ġ= Ġheight . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Texture View Size () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. setOn Completion Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . END ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" Video Ġhas Ġended .") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Listener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Listener ?. on Video End () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdon 't Ġforget Ġto Ġcall ĠMedia Player . prepare Async () Ġmethod Ġwhen Ġyou Ġuse Ġconstructor Ġfor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcreating ĠMedia Player ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. prepare Async () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPlay Ġvideo Ġwhen Ġthe Ġmedia Ġsource Ġis Ġready Ġfor Ġplayback . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. setOn Prepared Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Video Prepared Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Play Called Ġ&& Ġis View Available ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" Player Ġis Ġprepared Ġand Ġplay () Ġwas Ġcalled .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Listener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Listener ?. on Video Prepared () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġw ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPlay Ġor Ġresume Ġvideo . ĠVideo Ġwill Ġbe Ġplayed Ġas Ġsoon Ġas Ġview Ġis Ġavailable Ġand Ġmedia Ġplayer Ġis ĊĠĠĠĠ Ġ* Ġprepared . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġvideo Ġis Ġstopped Ġor Ġended Ġand Ġplay () Ġmethod Ġwas Ġcalled , Ġvideo Ġwill Ġstart Ġover . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġplay () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is DataSource Set ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" play () Ġwas Ġcalled Ġbut Ġdata Ġsource Ġwas Ġnot Ġset .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis Play Called Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! is Video Prepared ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" play () Ġwas Ġcalled Ġbut Ġvideo Ġis Ġnot Ġprepared Ġyet , Ġwaiting .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! is View Available ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" play () Ġwas Ġcalled Ġbut Ġview Ġis Ġnot Ġavailable Ġyet , Ġwaiting .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠState . PLAY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" play () Ġwas Ġcalled Ġbut Ġvideo Ġis Ġalready Ġplaying .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠState . PAUSE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" play () Ġwas Ġcalled Ġbut Ġvideo Ġis Ġpaused , Ġres uming .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . PLAY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠState . END Ġ|| Ġstate Ġ== ĠState . STOP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" play () Ġwas Ġcalled Ġbut Ġvideo Ġalready Ġended , Ġstarting Ġover .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . PLAY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. seek To ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . PLAY ĊĠĠĠĠĠĠĠ Ġmedia Player ?. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPause Ġvideo . ĠIf Ġvideo Ġis Ġalready Ġpaused , Ġstopped Ġor Ġended Ġnothing Ġwill Ġhappen . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpause () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠState . PAUSE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" pause () Ġwas Ġcalled Ġbut Ġvideo Ġalready Ġpaused .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠState . STOP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" pause () Ġwas Ġcalled Ġbut Ġvideo Ġalready Ġstopped .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠState . END ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" pause () Ġwas Ġcalled Ġbut Ġvideo Ġalready Ġended .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . PAUSE ĊĠĠĠĠĠĠĠ Ġif Ġ( media Player ?. is Playing Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. pause () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStop Ġvideo Ġ( pause Ġand Ġseek Ġto Ġbeginning ). ĠIf Ġvideo Ġis Ġalready Ġstopped Ġor Ġended Ġnothing Ġwill ĊĠĠĠĠ Ġ* Ġhappen . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠState . STOP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" stop () Ġwas Ġcalled Ġbut Ġvideo Ġalready Ġstopped .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠState . END ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" stop () Ġwas Ġcalled Ġbut Ġvideo Ġalready Ġended .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . STOP ĊĠĠĠĠĠĠĠ Ġif Ġ( media Player ?. is Playing Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. pause () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player ?. seek To ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see Ġandroid . media . MediaPlayer . seek To ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġseek To ( milliseconds : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmedia Player ?. seek To ( milliseconds ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠListener Ġtrigger Ġ' on Video Prepared ' Ġand Ġ` on Video End ` Ġevents ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Listener ( listener : ĠMedia Player Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Listener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠMedia Player Listener Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Video Prepared () ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Video End () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Surface Texture Available ( surface Texture : ĠSurface Texture , Ġwidth : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsurface Ġ= ĠSurface ( surface Texture ) ĊĠĠĠĠĠĠĠ Ġmedia Player ?. set Surface ( surface ) ĊĠĠĠĠĠĠĠ Ġis View Available Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( is DataSource Set Ġ&& Ġis Play Called Ġ&& Ġis Video Prepared ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" View Ġis Ġavailable Ġand Ġplay () Ġwas Ġcalled .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Surface Texture Size Changed ( surface : ĠSurface Texture , Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Surface Texture Destroyed ( surface : ĠSurface Texture ) Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġon Surface Texture Updated ( surface : ĠSurface Texture ) Ġ{ ĊĊĠĠĠ Ġ} Ċ } Ċ