Mercurial > repos > tabletprog
diff modules/sdl.tp @ 332:ead24192ed45
Initial work on a UI module
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 28 Mar 2015 14:21:22 -0700 |
parents | 4c669942c30d |
children | 577406b25f89 |
line wrap: on
line diff
--- a/modules/sdl.tp Sat Mar 28 14:21:04 2015 -0700 +++ b/modules/sdl.tp Sat Mar 28 14:21:22 2015 -0700 @@ -120,22 +120,42 @@ mcall: none 1 option } } + + llMessage: waitEvent withVars: { + constructor <- lambda ptr + event <- SDL_Event + eventPtr <- cpointer ptr + eventType <- obj_uint32 ptr + timeStampO <- obj_uint32 ptr + } andCode: :constructor { + if: (SDL_WaitEvent: (addr_of: event)) { + eventType <- make_object: (addr_of: obj_uint32_meta) NULL 0 + timeStampO <- make_object: (addr_of: obj_uint32_meta) NULL 0 + eventType num!: ((addr_of: event) type) + timeStampO num!: ((addr_of: ((addr_of: event) common)) timestamp) + eventPtr <- make_object: (addr_of: cpointer_meta) NULL 0 + eventPtr val!: (addr_of: event) + mcall: value 2 option (ccall: constructor 3 (eventType castTo: (object ptr)) ( + timeStampO castTo: (object ptr)) (eventPtr castTo: (object ptr))) + } else: { + mcall: none 1 option + } + } llMessage: populateWindowEvent withVars: { eventPtr <- cpointer ptr empty <- object ptr winEvent <- SDL_WindowEvent ptr ou32 <- obj_uint32 ptr - ou8 <- obj_uint8 ptr oi32 <- obj_int32 ptr } andCode: :eventPtr empty { winEvent <- eventPtr val ou32 <- make_object: (addr_of: obj_uint32_meta) NULL 0 ou32 num!: (winEvent windowID) mcall: windowID! 2 empty ou32 - ou8 <- make_object: (addr_of: obj_uint8_meta) NULL 0 - ou8 num!: (winEvent event) - mcall: event! 2 empty ou8 + ou32 <- make_object: (addr_of: obj_uint32_meta) NULL 0 + ou32 num!: (winEvent event) + mcall: event! 2 empty ou32 oi32 <- make_object: (addr_of: obj_int32_meta) NULL 0 oi32 num!: (winEvent data1) mcall: data1! 2 empty oi32 @@ -314,6 +334,23 @@ //TODO: Add mobile/touch/gesture events } + _windowEvents <- #{ + _constant: shown SDL_WINDOWEVENT_SHOWN + _constant: hidden SDL_WINDOWEVENT_HIDDEN + _constant: exposed SDL_WINDOWEVENT_EXPOSED + _constant: moved SDL_WINDOWEVENT_MOVED + _constant: resized SDL_WINDOWEVENT_RESIZED + _constant: sizeChanged SDL_WINDOWEVENT_SIZE_CHANGED + _constant: minimized SDL_WINDOWEVENT_MINIMIZED + _constant: maximized SDL_WINDOWEVENT_MAXIMIZED + _constant: restored SDL_WINDOWEVENT_RESTORED + _constant: enter SDL_WINDOWEVENT_ENTER + _constant: leave SDL_WINDOWEVENT_LEAVE + _constant: focusGained SDL_WINDOWEVENT_FOCUS_GAINED + _constant: focusLost SDL_WINDOWEVENT_FOCUS_LOST + _constant: close SDL_WINDOWEVENT_CLOSE + } + _textureAccess <- #{ _constant: static SDL_TEXTUREACCESS_STATIC _constant: streaming SDL_TEXTUREACCESS_STREAMING @@ -370,7 +407,7 @@ type <- typ timeStamp <- tstamp windowID <- 0u32 - event <- 0u8 + event <- 0u32 data1 <- 0 data2 <- 0 } @@ -811,10 +848,25 @@ } } } + + waitEvent <- { + _helper pollEvent: :typ tstamp eventPtr { + _eventConstructors ifget: typ :handler { + handler: typ tstamp eventPtr + } else: { + //fallback event + #{ + type <- typ + timeStamp <- tstamp + } + } + } + } subsystems <- { _subsystems } windowOpts <- { _windowOpts } eventTypes <- { _events } + windowEventTypes <- { _windowEvents } textureAccess <- { _textureAccess } pixelFormats <- { _pixelFormats } blendModes <- { _blendModes }