package Ġk lay . core Ċ Ċ import Ġreact . Signal Ċ Ċ /** Ċ Ġ* ĠAbstract s Ġover Ġ[ Mouse ] Ġand Ġ[ Touch ] Ġinput , Ġproviding Ġa Ġleast - common - denom inator ĠAPI Ċ Ġ* Ġwhich Ġtracks Ġa Ġsingle Ġ" pointer " Ġwith Ġsimple Ġinteractions . ĠIf Ġyou Ġwant Ġglobal Ġpointer Ġevents , Ċ Ġ* Ġyou Ġhave Ġto Ġcreate Ġan Ġinstance Ġof Ġthis Ġclass Ġyourself . Ċ Ġ*/ Ċ open Ġclass ĠPointer ( private Ġval Ġpl at : ĠPlatform ) Ġ{ ĊĊĠĠĠ Ġ/** ĠContains Ġinformation Ġon Ġa Ġpointer Ġevent . Ġ Ġ*/ ĊĠĠĠ Ġclass ĠEvent ( flags : ĠInt , Ġtime : ĠDouble , Ġx : ĠFloat , Ġy : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNOTE : Ġthis Ġenum Ġmust Ġmatch ĠTouch . Event . Kind Ġexactly ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĠWhether Ġthis Ġevent Ġrepresents Ġa Ġstart , Ġmove , Ġetc . Ġ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkind : ĠEvent . Kind , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĠWhether Ġthis Ġevent Ġorigin ated Ġfrom Ġa Ġtouch Ġevent . Ġ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġis Touch : ĠBoolean ) Ġ: Ġk lay . core . Event . XY ( flags , Ġtime , Ġx , Ġy ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĠEnum er ates Ġthe Ġdifferent Ġkinds Ġof Ġpointer Ġevent . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġenum Ġclass ĠKind Ġconstructor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĠWhether Ġthis Ġkind Ġstarts Ġor Ġends Ġan Ġinteraction . Ġ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Start : ĠBoolean , Ġval Ġis End : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSTART ( true , Ġfalse ), ĠDR AG ( false , Ġfalse ), ĠEND ( false , Ġtrue ), ĠCANCEL ( false , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġname (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Pointer " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġadd Fields ( builder : ĠStringBuilder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . add Fields ( builder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (", Ġkind =" ). append ( kind ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (", Ġtouch =" ). append ( is Touch ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠAllows Ġpointer Ġinteraction Ġto Ġbe Ġtemporarily Ġdisabled . ĊĠĠĠĠ Ġ* ĠNo Ġpointer Ġevents Ġwill Ġbe Ġdis patched Ġwh il st Ġthis Ġbig Ġswitch Ġis Ġin Ġthe Ġoff Ġposition . Ġ Ġ*/ ĊĠĠĠ Ġvar Ġenabled Ġ= Ġtrue ĊĊĠĠĠ Ġ/** ĠA Ġsignal Ġwhich Ġemits Ġpointer Ġevents . Ġ Ġ*/ ĊĠĠĠ Ġvar Ġevents : ĠSignal < Event > Ġ= ĠSignal () ĊĊĠĠĠ Ġinit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġif Ġthis Ġplatform Ġsupports Ġtouch Ġevents , Ġuse Ġthose ĊĠĠĠĠĠĠĠ Ġif Ġ( plat . input . has Touch ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġactive Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpl at . input . touch Events . connect Ġ{ Ġevents : ĠArray < Touch . Event > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( event Ġin Ġevents ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( active Ġ== Ġ- 1 Ġ&& Ġevent . kind . is Start ) Ġactive Ġ= Ġevent . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . id Ġ== Ġactive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġforward ( Event . Kind . values ()[ event . kind . ordinal ], Ġtrue , Ġevent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . kind . is End ) Ġactive Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( plat . input . has Mouse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdragging : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpl at . input . mouse Events . connect Ġ{ Ġevent : ĠMouse . Event Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event Ġis ĠMouse . Motion Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( drag ging ) Ġforward ( Event . Kind . DR AG , Ġfalse , Ġevent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( event Ġis ĠMouse . Button Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbe vent Ġ= Ġevent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( be vent . button Ġ== ĠMouse . Button Event . Id . LEFT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdragging Ġ= Ġbe vent . down ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġforward ( if Ġ( be vent . down ) ĠEvent . Kind . START Ġelse ĠEvent . Kind . END , Ġfalse , Ġbe vent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpl at . log . warn (" Platform Ġhas Ġneither Ġmouse Ġnor Ġtouch Ġevents ? Ġ[ type =${ plat . type ()} ]") // Ġotherwise Ġcompl ain Ġbecause Ġwhat 's Ġgoing Ġon ? ĊĠĠĠĠĠĠĠ Ġ// Ġotherwise Ġuse Ġmouse Ġevents Ġif Ġit Ġhas Ġthose ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġforward ( kind : ĠEvent . Kind , Ġis Touch : ĠBoolean , Ġsource : Ġk lay . core . Event . XY ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! enabled Ġ|| Ġ! events . has Connections ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġevent Ġ= ĠEvent ( source . flags , Ġsource . time , Ġsource . x , Ġsource . y , Ġkind , Ġis Touch ) ĊĠĠĠĠĠĠĠ Ġpl at . dispatchEvent ( events , Ġevent ) ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġpropagate Ġprevent Ġdefault Ġback Ġto Ġoriginal Ġevent ĊĠĠĠ Ġ} Ċ } Ċ