;******************* ;- Events ;******************* #EVENT_CLOSE = 1 #EVENT_MOUSELEFTCLICK = 2 ;******************* ;- Handler ;******************* Structure CallbackEntry *callback *data EndStructure Procedure setCallBackStructure(*struc.CallbackEntry, *callback, *data) *struc\callback = *callback *struc\data = *data EndProcedure Procedure runCallback(Map callbackMap.CallbackEntry(), key, *handleData) Define result = #False Define *struc.CallbackEntry = FindMapElement(callbackMap(), Str(key)) If (*struc <> #Null) CallFunctionFast(*struc\callback, *struc\data, *handleData) result = #True EndIf ProcedureReturn result EndProcedure Procedure addCallbackStruc(Map callbackMap.CallbackEntry(), key, *callback.CallbackEntry) callbackMap(Str(key))\callback = *callback\callback callbackMap()\data = *callback\data EndProcedure Procedure addCallback(Map callbackMap.CallbackEntry(), key, *callback, *data) callbackMap(Str(key))\callback = *callback callbackMap()\data = *data EndProcedure Procedure handleWindowEvents(Map handler.CallbackEntry()) Define event Repeat event = WindowEvent() Select event Case #PB_Event_CloseWindow runCallback(handler(), #EVENT_CLOSE, #Null) Case #PB_Event_LeftClick Define mousePosition.Vector2 Define activeWin = GetActiveWindow() setVector2(@mousePosition, WindowMouseX(activeWin), WindowMouseY(activeWin)) runCallback(handler(), #EVENT_MOUSELEFTCLICK, @mousePosition) EndSelect Until event = 0 EndProcedure ; IDE Options = PureBasic 5.11 (Windows - x64) ; CursorPosition = 62 ; FirstLine = 10 ; Folding = - ; EnableAsm ; EnableUnicode ; EnableThread ; EnableXP ; CPU = 1