// ĠCopyright Ġ 2 0 1 8 ĠGoogle ĠLLC č Ċ // č Ċ // Ġ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 Ġorg . mon ks an ct um . x and 1 1 . windows čĊč Ċ import Ġorg . mon ks an ct um . x and 1 1 . atoms . Atom Manager č Ċ import Ġorg . mon ks an ct um . x and 1 1 . comm . Client č Ċ import Ġorg . mon ks an ct um . x and 1 1 . comm . Event č Ċ import Ġorg . mon ks an ct um . x and 1 1 . comm . Event . Event Info č Ċ import Ġorg . mon ks an ct um . x and 1 1 . core .* č Ċ import Ġorg . mon ks an ct um . x and 1 1 . core . Platform . Companion . int To HexString č Ċ import Ġorg . mon ks an ct um . x and 1 1 . errors . Atom Error č Ċ import Ġorg . mon ks an ct um . x and 1 1 . errors . Window Error č Ċ import Ġorg . mon ks an ct um . x and 1 1 . graphics . X Drawable č Ċ import Ġorg . mon ks an ct um . x and 1 1 . graphics . X Paint able č Ċ import Ġorg . mon ks an ct um . x and 1 1 . windows . X WindowManager . Companion . DEBUG č Ċ import Ġkotlin . math . max čĊč Ċ class ĠX Window ( override Ġval Ġid : ĠInt , Ġwidth : ĠInt , Ġheight : ĠInt , Ġval Ġwindow Class : ĠByte , Ġprivate Ġval Ġm WindowManager : ĠX WindowManager ) Ġ: ĠX Drawable Ġ{ čĊčĊĠĠĠ Ġprivate Ġval Ġm Properties Ġ= Ġmutable Map Of < Int , ĠProperty >() čĊĠĠĠ Ġprivate Ġval Ġm Children Ġ= ĠArrayList < X Window >() čĊĠĠĠ Ġprivate Ġval Ġm Callbacks Ġ= ĠArrayList < Event Callback >() čĊčĊĠĠĠ Ġoverride Ġvar Ġparent : ĠX Window ? Ġ= Ġnull čĊĠĠĠĠĠĠĠ Ġprivate Ġset čĊčĊĠĠĠ Ġprivate Ġval Ġm Bounds Ġ= ĠRect () čĊĠĠĠ Ġoverride Ġvar ĠborderWidth : ĠInt Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġprivate Ġset čĊĠĠĠ Ġvar Ġbackground : ĠX Paint able ? Ġ= Ġnull čĊĠĠĠĠĠĠĠ Ġset ( background ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġbackground čĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Background () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġvar Ġborder : ĠX Paint able ? Ġ= Ġnull čĊĠĠĠĠĠĠĠ Ġset ( border ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġborder čĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Background () čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠ Ġvar Ġbitmap : ĠBitmap ? Ġ= Ġnull čĊĠĠĠĠĠĠĠ Ġprivate Ġset čĊĠĠĠ Ġprivate Ġvar Ġm Canvas : ĠCanvas ? Ġ= Ġnull čĊčĊĠĠĠ Ġvar Ġbit Gravity : ĠByte Ġ= Ġ 0 čĊĠĠĠ Ġvar Ġwin Gravity : ĠByte Ġ= Ġ 0 čĊĠĠĠ Ġvar Ġbacking : ĠByte Ġ= Ġ 0 čĊĠĠĠ Ġvar Ġbacking Planes : ĠInt Ġ= Ġ 0 čĊĠĠĠ Ġvar Ġbacking Pixels : ĠInt Ġ= Ġ 0 čĊĠĠĠ Ġvar Ġis Override Redirect : ĠBoolean Ġ= Ġfalse čĊĠĠĠĠĠĠĠ Ġset ( override Redirect ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Override Redirect Ġ== Ġoverride Redirect ) Ġreturn čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġoverride Redirect čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġvar Ġis Save Under : ĠBoolean Ġ= Ġfalse čĊĠĠĠ Ġvar Ġdo Not Prop og ate : ĠInt Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġprivate Ġset čĊĠĠĠ Ġvar Ġcolor Map : ĠInt Ġ= Ġ 0 čĊĠĠĠ Ġvar Ġcursor : ĠInt Ġ= Ġ 0 čĊčĊĠĠĠ Ġvar Ġvisibility : ĠInt Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġprivate Ġset čĊĠĠĠ Ġprivate Ġvar Ġm Callback : ĠWindow Callback ? Ġ= Ġnull čĊĠĠĠ Ġval Ġinner Bounds Ġ= ĠRect () čĊĠĠĠ Ġprivate Ġvar Ġm Drawing Background : ĠBoolean Ġ= Ġfalse čĊčĊĠĠĠ Ġoverride Ġval Ġdepth : ĠInt čĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ 3 2 čĊčĊĠĠĠ Ġoverride Ġval Ġx : ĠInt čĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm Bounds . left čĊčĊĠĠĠ Ġoverride Ġval Ġy : ĠInt čĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm Bounds . top čĊčĊĠĠĠ Ġoverride Ġval Ġwidth : ĠInt čĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm Bounds . width () čĊčĊĠĠĠ Ġoverride Ġval Ġheight : ĠInt čĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm Bounds . height () čĊčĊĠĠĠ Ġval Ġchild Count Locked : ĠInt čĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġm Children . size čĊčĊĠĠĠ Ġval Ġbounds : ĠRect čĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠRect ( m Bounds ) čĊčĊĠĠĠ Ġval Ġevent Mask : ĠInt čĊĠĠĠĠĠĠĠ Ġget () Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmask Ġ= Ġ 0 čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġm Callbacks . indices ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmask Ġ= Ġmask Ġor Ġm Callbacks [ i ]. mask čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmask čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠ Ġinit Ġ{ čĊĠĠĠĠĠĠĠ Ġset Bounds ( Rect ( 0 , Ġ 0 , Ġwidth , Ġheight )) čĊĠĠĠĠĠĠĠ Ġinit Background () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġlock Canvas ( gc : ĠGraphics Context ?): ĠCanvas Ġ{ čĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠTrack Ġwhether Ġthis Ġis Ġavailable . čĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠFigure Ġout Ġa Ġway Ġto Ġnot Ġback Ġthese Ġand Ġdraw Ġthem Ġdirectly Ġinto Ġthe Ġview Ġif Ġpossible čĊĠĠĠĠĠĠĠ Ġm Canvas !!. save () čĊĠĠĠĠĠĠĠ Ġif Ġ(! m Drawing Background ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Canvas !!. clip Rect ( inner Bounds ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// m Canvas . translate ( m Border Width , Ġm Border Width ); čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġgc ?. init ( m Canvas !! ) čĊĠĠĠĠĠĠĠ Ġreturn Ġm Canvas !! čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġunlock Canvas () Ġ{ čĊĠĠĠĠĠĠĠ Ġm Canvas !!. restore () čĊĠĠĠĠĠĠĠ Ġif Ġ( m Callback Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback !!. on Content Changed () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun ĠgetProperty Locked ( atom : ĠInt , Ġdelete : ĠBoolean ): ĠProperty ? Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġproperty Ġ= Ġm Properties . get ( atom ) čĊĠĠĠĠĠĠĠ Ġif Ġ( delete ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Properties . remove ( atom ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent . obtain Info ( Event . PROPERTY _ NOTIFY , Ġid , Ġatom , Ġtrue ). also Ġ{ Ġinfo Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Event ( info , ĠEVENT _ MASK _ PROPERTY _ CHANGE ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . close () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġproperty čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġadd Property Locked ( atom : ĠInt , Ġproperty : ĠProperty ) Ġ{ čĊĠĠĠĠĠĠĠ Ġm Properties . put ( atom , Ġproperty ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġremove Property Locked ( atom : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ Ġm Properties . remove ( atom ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġnotify PropertyChanged ( atom : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( DEBUG ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform . log d ( TAG , Ġ" notify PropertyChanged Ġ" Ġ+ ĠAtom Manager . instance . getString ( atom )) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( atom Error : ĠAtom Error ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ ĠEvent . obtain Info ( Event . PROPERTY _ NOTIFY , Ġid , Ġatom , Ġfalse ). also Ġ{ Ġinfo Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Event ( info , ĠEVENT _ MASK _ PROPERTY _ CHANGE ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . close () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġadd Child Locked ( w : ĠX Window ) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( DEBUG ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform . log d ( TAG , Ġ" addChild Ġ" Ġ+ Ġint To HexString ( w . id ) Ġ+ Ġ" Ġ" Ġ+ Ġint To HexString ( id )) čĊĠĠĠĠĠĠĠ Ġsynchronized ( w ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( w . parent Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠSomething Ġother Ġthan Ġruntime ... čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Already Ġchild Ġof Ġ" Ġ+ Ġw . parent !! ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Children . add ( w ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġw . parent Ġ= Ġthis čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġif Ġ( m Callback Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback !!. on Child Added ( w ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġinternal Ġfun Ġremove Child Locked ( w : ĠX Window ) Ġ{ čĊĠĠĠĠĠĠĠ Ġsynchronized ( w ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Children . remove ( w ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġw . parent Ġ= Ġnull čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ ĠEvent . obtain Info ( Event . DESTROY _ NOTIFY , Ġid , Ġw . id ). also Ġ{ Ġinfo Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Event ( info , ĠEVENT _ MASK _ SUB STRUCTURE _ NOTIFY ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . close () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġif Ġ( m Callback Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback !!. on Child Removed ( w ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġget Child At Locked ( i : ĠInt ): ĠX Window Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġm Children [ i ] čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġdestroy Locked () Ġ{ čĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠFree / remove Ġanything . čĊĠĠĠĠĠĠĠ Ġset Visibility Flag ( FLAG _ MAP PED , Ġ 0 . to Byte ()) čĊĠĠĠĠĠĠĠ Ġdestroy Children Locked () čĊĠĠĠĠĠĠĠ Ġparent ?. let Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( it ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . removeChild Locked ( this ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ ĠEvent . obtain Info ( Event . DESTROY _ NOTIFY , Ġid , Ġid ). also Ġ{ Ġinfo Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Event ( info , ĠEVENT _ MASK _ STRUCTURE _ NOTIFY ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . close () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġdestroy Children Locked () Ġ{ čĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġm Children . indices . reversed ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġm Children [ i ] čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( child ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . destroy Locked () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġset Border Width ( border Width : ĠInt ): ĠBoolean Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( this . border Width Ġ== ĠborderWidth ) Ġreturn Ġfalse čĊĠĠĠĠĠĠĠ Ġthis . border Width Ġ= ĠborderWidth čĊĠĠĠĠĠĠĠ Ġinner Bounds . left Ġ= Ġthis . border Width čĊĠĠĠĠĠĠĠ Ġinner Bounds . top Ġ= Ġthis . border Width čĊĠĠĠĠĠĠĠ Ġinner Bounds . right Ġ= Ġm Bounds . width () Ġ- Ġthis . border Width čĊĠĠĠĠĠĠĠ Ġinner Bounds . bottom Ġ= Ġm Bounds . height () Ġ- Ġthis . border Width čĊĠĠĠĠĠĠĠ Ġinit Background () čĊĠĠĠĠĠĠĠ Ġreturn Ġtrue čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġset Bounds ( rect : ĠRect ): ĠBoolean Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( m Bounds Ġ== Ġrect ) Ġreturn Ġfalse čĊĠĠĠĠĠĠĠ Ġm Bounds . set ( rect ) čĊĠĠĠĠĠĠĠ Ġinner Bounds . left Ġ= ĠborderWidth čĊĠĠĠĠĠĠĠ Ġinner Bounds . top Ġ= ĠborderWidth čĊĠĠĠĠĠĠĠ Ġinner Bounds . right Ġ= Ġm Bounds . width () Ġ- ĠborderWidth čĊĠĠĠĠĠĠĠ Ġinner Bounds . bottom Ġ= Ġm Bounds . height () Ġ- ĠborderWidth čĊĠĠĠĠĠĠĠ Ġif Ġ( bitmap Ġ!= Ġnull Ġ&& Ġ( m Bounds . width () Ġ!= Ġbitmap !!. getWidth () Ġ|| Ġm Bounds . height () Ġ!= Ġbitmap !!. getHeight ())) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Size Changed () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġnotify Location Changed () čĊĠĠĠĠĠĠĠ Ġreturn Ġtrue čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġnotify Location Changed () Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( m Callback Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback !!. on Location Changed () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġnotify Size Changed () Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( m Callback Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback !!. on Size Changed () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġval Ġold Bitmap Ġ= Ġbitmap čĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠNeed Ġto Ġhandle Ġcopying Ġthe Ġcontent Ġbased Ġon Ġgravity . čĊĠĠĠĠĠĠĠ Ġbitmap Ġ= Ġcreate Bitmap ( max ( m Bounds . width (), Ġ 1 ), Ġmax ( m Bounds . height (), Ġ 1 )) čĊĠĠĠĠĠĠĠ Ġm Canvas Ġ= ĠCanvas ( bitmap !! ) čĊĠĠĠĠĠĠĠ Ġinit Background () čĊĠĠĠĠĠĠĠ Ġwhen Ġ( win Gravity ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠGR AV ITY _ UN MAP Ġ-> Ġrequest Un map () čĊĠĠĠĠĠĠĠĠĠĠĠ ĠGR AV ITY _ NORTH WEST Ġ-> Ġm Canvas !!. draw Bitmap ( null , Ġold Bitmap !! , Ġ 0 f , Ġ 0 f ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠGR AV ITY _ NORTH Ġ-> Ġm Canvas !!. draw Bitmap ( null , Ġold Bitmap !! , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( bitmap !!. getWidth () Ġ- Ġold Bitmap . getWidth ()) Ġ/ Ġ 2 ). toFloat (), Ġ 0 f ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠGR AV ITY _ N ORT HE AST Ġ-> Ġm Canvas !!. draw Bitmap ( null , Ġold Bitmap !! , Ġ( bitmap !!. getWidth () Ġ- Ġold Bitmap . getWidth ()). toFloat (), Ġ 0 f ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠGR AV ITY _ WEST Ġ-> Ġm Canvas !!. draw Bitmap ( null , Ġold Bitmap !! , Ġ 0 f , Ġ(( bitmap !!. getHeight () Ġ- Ġold Bitmap . getHeight ()) Ġ/ Ġ 2 ). toFloat ()) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠGR AV ITY _ CENTER Ġ-> Ġm Canvas !!. draw Bitmap ( null , Ġold Bitmap !! , Ġ(( bitmap !!. getWidth () Ġ- Ġold Bitmap . getWidth ()) Ġ/ Ġ 2 ). toFloat (), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( bitmap !!. getHeight () Ġ- Ġold Bitmap . getHeight ()) Ġ/ Ġ 2 ). toFloat ()) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠGR AV ITY _ EAST Ġ-> Ġm Canvas !!. draw Bitmap ( null , Ġold Bitmap !! , Ġ( bitmap !!. getWidth () Ġ- Ġold Bitmap . getWidth ()). toFloat (), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( bitmap !!. getHeight () Ġ- Ġold Bitmap . getHeight ()) Ġ/ Ġ 2 ). toFloat ()) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠGR AV ITY _ SO UTH WEST Ġ-> Ġm Canvas !!. draw Bitmap ( null , Ġold Bitmap !! , Ġ 0 f , Ġ( bitmap !!. getHeight () Ġ- Ġold Bitmap . getHeight ()). toFloat ()) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠGR AV ITY _ SO UTH Ġ-> Ġm Canvas !!. draw Bitmap ( null , Ġold Bitmap !! , Ġ(( bitmap !!. getWidth () Ġ- Ġold Bitmap . getWidth ()) Ġ/ Ġ 2 ). toFloat (), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( bitmap !!. getHeight () Ġ- Ġold Bitmap . getHeight ()). toFloat ()) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠGR AV ITY _ SO UT HE AST Ġ-> Ġm Canvas !!. draw Bitmap ( null , Ġold Bitmap !! , Ġ( bitmap !!. getWidth () Ġ- Ġold Bitmap . getWidth ()). toFloat (), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( bitmap !!. getHeight () Ġ- Ġold Bitmap . getHeight ()). toFloat ()) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠGR AV ITY _ STATIC Ġ-> Ġthrow ĠRuntimeException (" Static Ġgravity Ġunsupported ") čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġset Background Parent () Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( parent Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Unsupported Ġparent ") čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Ġ= Ġparent !!. background čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġinit Background () Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( bitmap Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= Ġcreate Bitmap ( m Bounds . width (), Ġm Bounds . height ()) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Canvas Ġ= ĠCanvas ( bitmap !! ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= ĠRect ( 0 , Ġ 0 , Ġm Bounds . width (), Ġm Bounds . height ()) čĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drawing Background Ġ= Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( border Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġborder !!. draw ( this , Ġr , Ġnull ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Drawing Background Ġ= Ġfalse čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( background Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground !!. draw ( this , Ġr , Ġnull ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġclear Area ( x : ĠInt , Ġy : ĠInt , Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( background Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground !!. draw ( this , ĠRect ( x , Ġy , Ġx Ġ+ Ġwidth , Ġy Ġ+ Ġheight ), Ġnull ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġset Event Mask ( client : ĠClient , Ġevent Mask : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġget Or Add State ( client ) čĊĠĠĠĠĠĠĠ Ġstate . set Event Mask ( event Mask ) čĊĠĠĠĠĠĠĠ Ġif Ġ( event Mask Ġ== Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove Callback ( state ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠHandle Ġredirect Ġrestrictions čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġadd Callback ( callback : ĠEvent Callback ) Ġ{ čĊĠĠĠĠĠĠĠ Ġm Callbacks . add ( callback ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġremove Callback ( callback : ĠEvent Callback ) Ġ{ čĊĠĠĠĠĠĠĠ Ġm Callbacks . remove ( callback ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġget Event Mask ( client : ĠClient ): ĠInt Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġget Or Add State ( client ) čĊĠĠĠĠĠĠĠ Ġreturn Ġstate . mask čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġget Or Add State ( client : ĠClient ): ĠClient Window Callback Ġ{ čĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġm Callbacks . indices ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġm Callbacks [ i ] Ġas ? ĠClient Window Callback Ġ?: Ġcontinue čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( callback . client Ġ=== Ġclient ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcallback čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= ĠClient Window Callback ( client ) čĊĠĠĠĠĠĠĠ Ġm Callbacks . add ( state ) čĊĠĠĠĠĠĠĠ Ġreturn Ġstate čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġset DoNot Propag ate ( do Not Propag ate : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ Ġdo Not Prop og ate Ġ= Ġdo Not Propag ate čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġrequest Map () Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( DEBUG ) ĠPlatform . log d ( TAG , Ġ" request Map Ġ" Ġ+ Ġint To HexString ( id )) čĊĠĠĠĠĠĠĠ Ġset Visibility Flag ( FLAG _ MAP PED , ĠFLAG _ MAP PED ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġset Vis ib ily ( visible : ĠBoolean ) Ġ{ čĊĠĠĠĠĠĠĠ Ġset Visibility Flag ( FLAG _ VISIBLE , Ġif Ġ( visible ) ĠFLAG _ VISIBLE Ġelse Ġ 0 ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġrequest Un map () Ġ{ čĊĠĠĠĠĠĠĠ Ġset Visibility Flag ( FLAG _ MAP PED , Ġ 0 . to Byte ()) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġset Visibility Flag ( mask : ĠByte , Ġvalue : ĠByte ) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( visibility Ġand Ġmask . toInt () Ġ!= Ġvalue . toInt ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= Ġvisibility Ġand Ġmask . toInt (). inv () Ġor Ġvalue . toInt () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mask . toInt () Ġand ĠFLAG _ MAP PED . toInt () Ġ!= Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent ?. let Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( it ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . notify Mapping Changed ( this ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value . toInt () Ġand ĠFLAG _ MAP PED . toInt () Ġ!= Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent . obtain Info ( Event . MAP _ NOTIFY , Ġid , Ġid , Ġfalse ). also Ġ{ Ġinfo Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Event ( info , ĠEVENT _ MASK _ STRUCTURE _ NOTIFY ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . close () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent . obtain Info ( Event . UN MAP _ NOTIFY , Ġid , Ġid , Ġfalse ). also Ġ{ Ġinfo Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Event ( info , ĠEVENT _ MASK _ STRUCTURE _ NOTIFY ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . close () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mask . toInt () Ġand ĠFLAG _ VISIBLE . toInt () Ġ!= Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Callback Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback !!. on Visibility Changed () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value . toInt () Ġand ĠFLAG _ VISIBLE . toInt () Ġ!= Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent . obtain Info ( Event . EXPOSE , Ġid , Ġm Bounds , Ġfalse ). also Ġ{ Ġinfo Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Event ( info , ĠEVENT _ MASK _ EXPOSE ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . close () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġnotify Configure Window () Ġ{ čĊĠĠĠĠĠĠĠ ĠEvent . obtain Info ( Event . CONFIGURE _ NOTIFY , Ġid , Ġid , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Ġ!= Ġnull ) Ġparent !!. get Under Sibling ( this ) Ġelse Ġ 0 , ĠborderWidth , Ġm Bounds , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Override Redirect ). also Ġ{ Ġinfo Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Event ( info , ĠEVENT _ MASK _ STRUCTURE _ NOTIFY ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . close () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġparent ?. let Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠUtils . s Bg Handler . post Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( it ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . notify Configure Window ( this ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġnotify Configure Window ( child : ĠX Window ) Ġ{ čĊĠĠĠĠĠĠĠ ĠEvent . obtain Info ( Event . CONFIGURE _ NOTIFY , Ġchild . id , Ġid , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Under Sibling ( child ), ĠborderWidth , Ġm Bounds , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Override Redirect ). also Ġ{ Ġinfo Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Event ( info , ĠEVENT _ MASK _ STRUCTURE _ NOTIFY ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . close () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġget Under Sibling ( child : ĠX Window ): ĠInt Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġm Children . indexOf ( child ) čĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( index Ġ> Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Children [ index Ġ- Ġ 1 ]. id čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ 0 čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġrequest Sub window Map () Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( DEBUG ) ĠPlatform . log d ( TAG , Ġ" request Sub window Map Ġ" Ġ+ Ġint To HexString ( id )) čĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġm Children . indices ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Children [ i ]. request Map () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Children [ i ]. request Sub window Map () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġrequest Sub window Un map () Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( DEBUG ) ĠPlatform . log d ( TAG , Ġ" request Sub window Un map Ġ" Ġ+ Ġint To HexString ( id )) čĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġm Children . indices ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Children [ i ]. request Un map () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Children [ i ]. request Sub window Un map () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġnotify Mapping Changed ( child : ĠX Window ) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( child . visibility Ġand ĠFLAG _ MAP PED . toInt () Ġ!= Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent . obtain Info ( Event . MAP _ NOTIFY , Ġid , Ġchild . id , Ġfalse ). also Ġ{ Ġinfo Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Event ( info , ĠEVENT _ MASK _ SUB STRUCTURE _ NOTIFY ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . close () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent . obtain Info ( Event . UN MAP _ NOTIFY , Ġid , Ġchild . id , Ġfalse ). also Ġ{ Ġinfo Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Event ( info , ĠEVENT _ MASK _ SUB STRUCTURE _ NOTIFY ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . close () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġif Ġ( m Callback Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback !!. on Child Mapping Changed ( child ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġset Window Callback ( window Callback : ĠWindow Callback ) Ġ{ čĊĠĠĠĠĠĠĠ Ġm Callback Ġ= Ġwindow Callback čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Throws ( Window Error :: class ) čĊĠĠĠ Ġfun Ġstack Window Locked ( window : ĠX Window , Ġsibling : ĠX Window , Ġstack Mode : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ Ġm Children . remove ( window ) čĊĠĠĠĠĠĠĠ Ġwhen Ġ( stack Mode . to Byte ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠSTACK _ AB O VE Ġ-> Ġm Children . add ( m Children . indexOf ( sibling ), Ġwindow ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠSTACK _ BE LOW Ġ-> Ġm Children . add ( m Children . indexOf ( sibling ) Ġ+ Ġ 1 , Ġwindow ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠSTACK _ TOP _ IF , ĠSTACK _ BOTTOM _ IF , ĠSTACK _ OP POS ITE Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform . log d ( TAG , Ġ" Unsupported Ġstack Window Ġ$ stack Mode ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠWindow Error ( stack Mode ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġif Ġ( m Callback Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback !!. window Order Changed () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Throws ( Window Error :: class ) čĊĠĠĠ Ġfun Ġstack Window Locked ( window : ĠX Window , Ġstack Mode : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ Ġm Children . remove ( window ) čĊĠĠĠĠĠĠĠ Ġwhen Ġ( stack Mode . to Byte ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠSTACK _ AB O VE Ġ-> Ġm Children . add ( 0 , Ġwindow ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠSTACK _ BE LOW Ġ-> Ġm Children . add ( window ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠSTACK _ TOP _ IF , ĠSTACK _ BOTTOM _ IF , ĠSTACK _ OP POS ITE Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform . log d ( TAG , Ġ" Unsupported Ġstack Window Ġ$ stack Mode ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠWindow Error ( stack Mode ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġif Ġ( m Callback Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback !!. window Order Changed () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġnotify KeyDown ( keyCode : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ Ġm WindowManager . input Manager . on KeyDown ( keyCode ) čĊĠĠĠĠĠĠĠ ĠEvent . obtain Info ( Event . KEY _ PRESS , Ġid , Ġwidth Ġ/ Ġ 2 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ/ Ġ 2 , Ġm WindowManager . input Manager . translate ( keyCode ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm WindowManager . input Manager . state ). also Ġ{ Ġinfo Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Event ( info , ĠEVENT _ MASK _ KEY _ PRESS ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . close () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġnotify KeyUp ( keyCode : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ Ġm WindowManager . input Manager . on KeyUp ( keyCode ) čĊĠĠĠĠĠĠĠ ĠEvent . obtain Info ( Event . KEY _ RELEASE , Ġid , Ġwidth Ġ/ Ġ 2 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ/ Ġ 2 , Ġm WindowManager . input Manager . translate ( keyCode ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm WindowManager . input Manager . state ). also Ġ{ Ġinfo Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Event ( info , ĠEVENT _ MASK _ KEY _ RELEASE ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . close () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġnotify Enter () Ġ{ čĊĠĠĠĠĠĠĠ ĠEvent . obtain Info ( Event . ENTER _ NOTIFY , Ġid , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ/ Ġ 2 , Ġheight Ġ/ Ġ 2 ). also Ġ{ Ġinfo Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Event ( info , ĠEVENT _ MASK _ ENTER _ WINDOW ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . close () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġnotify Leave () Ġ{ čĊĠĠĠĠĠĠĠ ĠEvent . obtain Info ( Event . LEAVE _ NOTIFY , Ġid , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ/ Ġ 2 , Ġheight Ġ/ Ġ 2 ). also Ġ{ Ġinfo Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Event ( info , ĠEVENT _ MASK _ ENTER _ WINDOW ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . close () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġsend Selection Request ( timestamp : ĠInt , Ġowner : ĠInt , Ġrequest er : ĠInt , Ġselection : ĠInt , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget : ĠInt , Ġproperty : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ ĠEvent . obtain Info ( Event . SELECTION _ REQUEST , Ġtimestamp , Ġowner , Ġrequest er , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection , Ġtarget , Ġproperty ). also Ġ{ Ġinfo Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Event ( info , Ġ 0 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . close () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġsend Selection Notify ( timestamp : ĠInt , Ġrequest or : ĠInt , Ġselection : ĠInt , Ġtarget : ĠInt , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperty : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ ĠEvent . obtain Info ( Event . SELECTION _ NOTIFY , Ġtimestamp , Ġrequest or , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection , Ġtarget , Ġproperty ). also Ġ{ Ġinfo Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Event ( info , Ġ 0 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . close () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġsend Selection Clear ( timestamp : ĠInt , Ġowner : ĠInt , Ġsel : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ ĠEvent . obtain Info ( Event . SELECTION _ CLEAR , Ġtimestamp , Ġowner , Ġsel ). also Ġ{ Ġinfo Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Event ( info , Ġ 0 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . close () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġnotify Child Created ( w : ĠX Window ) Ġ{ čĊĠĠĠĠĠĠĠ ĠEvent . obtain Info ( Event . CREATE _ NOTIFY , Ġid , Ġw . id , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw . x , Ġw . y , Ġw . width , Ġw . height , Ġw . border Width , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw . is Override Redirect ). also Ġ{ Ġinfo Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Event ( info , ĠEVENT _ MASK _ SUB STRUCTURE _ NOTIFY ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . close () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġsend Event ( info : ĠEvent Info , Ġmask : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġm Callbacks . indices ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġm Callbacks [ i ] čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( callback . mask Ġand Ġmask Ġ!= Ġmask ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Event ( info ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġread ( bitmap : ĠBitmap , Ġx : ĠInt , Ġy : ĠInt , Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= ĠCanvas ( bitmap ) čĊĠĠĠĠĠĠĠ Ġc . draw Bitmap ( null , Ġthis . bitmap !! , ĠRect ( x , Ġy , Ġwidth , Ġheight ), ĠRect ( 0 , Ġ 0 , Ġwidth , Ġheight )) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġinterface ĠEvent Callback Ġ{ čĊčĊĠĠĠĠĠĠĠ Ġval Ġmask : ĠInt čĊĠĠĠĠĠĠĠ Ġfun Ġon Event ( info : ĠEvent Info ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġinterface ĠWindow Callback Ġ{ čĊĠĠĠĠĠĠĠ Ġfun Ġon Visibility Changed () čĊĠĠĠĠĠĠĠ Ġfun Ġon Child Mapping Changed ( child : ĠX Window ) čĊĠĠĠĠĠĠĠ Ġfun Ġon Location Changed () čĊĠĠĠĠĠĠĠ Ġfun Ġon Size Changed () čĊĠĠĠĠĠĠĠ Ġfun Ġon Content Changed () čĊĠĠĠĠĠĠĠ Ġfun Ġwindow Order Changed () čĊčĊĠĠĠĠĠĠĠ Ġfun Ġon Child Added ( w : ĠX Window ) čĊĠĠĠĠĠĠĠ Ġfun Ġon Child Removed ( w : ĠX Window ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġclass ĠProperty ( val Ġkey : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ Ġvar Ġtype Atom Ġ= ĠTYPE _ NONE čĊĠĠĠĠĠĠĠ Ġvar Ġvalue : ĠByteArray Ġ= Ġbyte ArrayOf () čĊĠĠĠĠĠĠĠ Ġvar Ġformat Ġ= ĠFORMAT _ NONE . to Byte () čĊčĊĠĠĠĠĠĠĠ Ġfun Ġchange ( mode : ĠByte , Ġbytes : ĠByteArray ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( mode ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMODE _ REPLACE Ġ-> Ġthis . value Ġ= Ġbytes čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMODE _ APPEND Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġappend Ġ= ĠByteArray ( value . size Ġ+ Ġbytes . size ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġvalue . indices ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend [ i ] Ġ= Ġvalue [ i ] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġbytes . indices ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend [ i Ġ+ Ġvalue . size ] Ġ= Ġbytes [ i ] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġappend čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMODE _ PRE PEND Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprepend Ġ= ĠByteArray ( value . size Ġ+ Ġbytes . size ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġbytes . indices ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprepend [ i ] Ġ= Ġbytes [ i ] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġvalue . indices ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprepend [ i Ġ+ Ġbytes . size ] Ġ= Ġvalue [ i ] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġprepend čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠTYPE _ NONE Ġ= Ġ 0 čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠFORMAT _ NONE Ġ= Ġ 0 čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠFORMAT _ N : ĠByte Ġ= Ġ 8 čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠFORMAT _ N _ 2 : ĠByte Ġ= Ġ 1 6 čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠFORMAT _ N _ 4 : ĠByte Ġ= Ġ 3 2 čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠMODE _ REPLACE : ĠByte Ġ= Ġ 0 čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠMODE _ PRE PEND : ĠByte Ġ= Ġ 1 čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠMODE _ APPEND : ĠByte Ġ= Ġ 2 čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġcompanion Ġobject Ġ{ čĊčĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" X Window " čĊčĊĠĠĠĠĠĠĠ Ġval ĠINPUT _ OUTPUT : ĠByte Ġ= Ġ 1 čĊĠĠĠĠĠĠĠ Ġval ĠINPUT _ ONLY : ĠByte Ġ= Ġ 2 čĊĠĠĠĠĠĠĠ Ġval ĠCOPY _ FROM _ PARENT : ĠByte Ġ= Ġ 3 čĊčĊĠĠĠĠĠĠĠ Ġval ĠBACK GROUND _ NONE Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġval ĠBACK GROUND _ PARENT _ REL ATIVE Ġ= Ġ 1 čĊčĊĠĠĠĠĠĠĠ Ġval ĠBORDER _ COPY _ PARENT Ġ= Ġ 0 čĊčĊĠĠĠĠĠĠĠ Ġval ĠBACK ING _ NOT _ USE FUL Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġval ĠBACK ING _ WHEN _ MAP PED Ġ= Ġ 1 čĊĠĠĠĠĠĠĠ Ġval ĠBACK ING _ ALWAYS Ġ= Ġ 2 čĊčĊĠĠĠĠĠĠĠ Ġval ĠCOLOR MAP _ COPY _ PARENT Ġ= Ġ 0 čĊčĊĠĠĠĠĠĠĠ Ġval ĠFLAG _ MAP PED : ĠByte Ġ= Ġ 0 x 0 1 čĊĠĠĠĠĠĠĠ Ġval ĠFLAG _ VISIBLE : ĠByte Ġ= Ġ 0 x 0 2 čĊčĊĠĠĠĠĠĠĠ Ġval ĠSTACK _ AB O VE : ĠByte Ġ= Ġ 0 x 0 0 čĊĠĠĠĠĠĠĠ Ġval ĠSTACK _ BE LOW : ĠByte Ġ= Ġ 0 x 0 1 čĊĠĠĠĠĠĠĠ Ġval ĠSTACK _ TOP _ IF : ĠByte Ġ= Ġ 0 x 0 2 čĊĠĠĠĠĠĠĠ Ġval ĠSTACK _ BOTTOM _ IF : ĠByte Ġ= Ġ 0 x 0 3 čĊĠĠĠĠĠĠĠ Ġval ĠSTACK _ OP POS ITE : ĠByte Ġ= Ġ 0 x 0 4 čĊčĊĠĠĠĠĠĠĠ Ġval ĠGR AV ITY _ UN MAP : ĠByte Ġ= Ġ 0 x 0 0 čĊĠĠĠĠĠĠĠ Ġval ĠGR AV ITY _ NORTH WEST : ĠByte Ġ= Ġ 0 x 0 1 čĊĠĠĠĠĠĠĠ Ġval ĠGR AV ITY _ NORTH : ĠByte Ġ= Ġ 0 x 0 2 čĊĠĠĠĠĠĠĠ Ġval ĠGR AV ITY _ N ORT HE AST : ĠByte Ġ= Ġ 0 x 0 3 čĊĠĠĠĠĠĠĠ Ġval ĠGR AV ITY _ WEST : ĠByte Ġ= Ġ 0 x 0 4 čĊĠĠĠĠĠĠĠ Ġval ĠGR AV ITY _ CENTER : ĠByte Ġ= Ġ 0 x 0 5 čĊĠĠĠĠĠĠĠ Ġval ĠGR AV ITY _ EAST : ĠByte Ġ= Ġ 0 x 0 6 čĊĠĠĠĠĠĠĠ Ġval ĠGR AV ITY _ SO UTH WEST : ĠByte Ġ= Ġ 0 x 0 7 čĊĠĠĠĠĠĠĠ Ġval ĠGR AV ITY _ SO UTH : ĠByte Ġ= Ġ 0 x 0 8 čĊĠĠĠĠĠĠĠ Ġval ĠGR AV ITY _ SO UT HE AST : ĠByte Ġ= Ġ 0 x 0 9 čĊĠĠĠĠĠĠĠ Ġval ĠGR AV ITY _ STATIC : ĠByte Ġ= Ġ 0 x 0 A čĊčĊĠĠĠĠĠĠĠ Ġval ĠEVENT _ MASK _ KEY _ PRESS Ġ= Ġ 0 x 1 čĊĠĠĠĠĠĠĠ Ġval ĠEVENT _ MASK _ KEY _ RELEASE Ġ= Ġ 0 x 2 čĊĠĠĠĠĠĠĠ Ġval ĠEVENT _ MASK _ BUTTON _ PRESS Ġ= Ġ 0 x 4 čĊĠĠĠĠĠĠĠ Ġval ĠEVENT _ MASK _ BUTTON _ RELEASE Ġ= Ġ 0 x 8 čĊĠĠĠĠĠĠĠ Ġval ĠEVENT _ MASK _ ENTER _ WINDOW Ġ= Ġ 0 x 1 0 čĊĠĠĠĠĠĠĠ Ġval ĠEVENT _ MASK _ LEAVE _ WINDOW Ġ= Ġ 0 x 2 0 čĊĠĠĠĠĠĠĠ Ġval ĠEVENT _ MASK _ POINTER _ MOT ION Ġ= Ġ 0 x 4 0 čĊĠĠĠĠĠĠĠ Ġval ĠEVENT _ MASK _ POINTER _ MOT ION _ HINT Ġ= Ġ 0 x 8 0 čĊĠĠĠĠĠĠĠ Ġval ĠEVENT _ MASK _ BUTTON _ 1 _ MOT ION Ġ= Ġ 0 x 1 0 0 čĊĠĠĠĠĠĠĠ Ġval ĠEVENT _ MASK _ BUTTON _ 2 _ MOT ION Ġ= Ġ 0 x 2 0 0 čĊĠĠĠĠĠĠĠ Ġval ĠEVENT _ MASK _ BUTTON _ 3 _ MOT ION Ġ= Ġ 0 x 4 0 0 čĊĠĠĠĠĠĠĠ Ġval ĠEVENT _ MASK _ BUTTON _ 4 _ MOT ION Ġ= Ġ 0 x 8 0 0 čĊĠĠĠĠĠĠĠ Ġval ĠEVENT _ MASK _ BUTTON _ 5 _ MOT ION Ġ= Ġ 0 x 1 0 0 0 čĊĠĠĠĠĠĠĠ Ġval ĠEVENT _ MASK _ BUTTON _ MOT ION Ġ= Ġ 0 x 2 0 0 0 čĊĠĠĠĠĠĠĠ Ġval ĠEVENT _ MASK _ KEY MAP _ STATE Ġ= Ġ 0 x 4 0 0 0 čĊĠĠĠĠĠĠĠ Ġval ĠEVENT _ MASK _ EXPOSE Ġ= Ġ 0 x 8 0 0 0 čĊĠĠĠĠĠĠĠ Ġval ĠEVENT _ MASK _ VIS IBILITY _ CHANGE Ġ= Ġ 0 x 1 0 0 0 0 čĊĠĠĠĠĠĠĠ Ġval ĠEVENT _ MASK _ STRUCTURE _ NOTIFY Ġ= Ġ 0 x 2 0 0 0 0 čĊĠĠĠĠĠĠĠ Ġval ĠEVENT _ MASK _ RE SIZE _ RE DIRECT Ġ= Ġ 0 x 4 0 0 0 0 čĊĠĠĠĠĠĠĠ Ġval ĠEVENT _ MASK _ SUB STRUCTURE _ NOTIFY Ġ= Ġ 0 x 8 0 0 0 0 čĊĠĠĠĠĠĠĠ Ġval ĠEVENT _ MASK _ SUB STRUCTURE _ RE DIRECT Ġ= Ġ 0 x 1 0 0 0 0 0 čĊĠĠĠĠĠĠĠ Ġval ĠEVENT _ MASK _ FOCUS _ CHANGE Ġ= Ġ 0 x 2 0 0 0 0 0 čĊĠĠĠĠĠĠĠ Ġval ĠEVENT _ MASK _ PROPERTY _ CHANGE Ġ= Ġ 0 x 4 0 0 0 0 0 čĊĠĠĠĠĠĠĠ Ġval ĠEVENT _ MASK _ COLOR MAP _ CHANGE Ġ= Ġ 0 x 8 0 0 0 0 0 čĊĠĠĠĠĠĠĠ Ġval ĠEVENT _ MASK _ OWNER _ GR AB _ BUTTON Ġ= Ġ 0 x 1 0 0 0 0 0 0 čĊĠĠĠ Ġ} č Ċ } čĊ