Sander Schobers
cdfb863ab0
Added Action{,s}. List of actions that can be used to defer cleanup code (see NewRenderer implementations). Added TextInputEvent (replaces the old KeyPressEvent) and added to new events KeyDown & KeyUp. Added VSync to NewRendererOptions. Removed IconScale from button. Added ImageSource interface that replaces the Image/Texture method on the Texture interface. This makes converting back a texture to an image optional (since this is atypical for a hardware texture for instance). Added new KeyModifier: OSCommand (Windows/Command key). Added KeyState that can keep the state of keys (pressed or not). Added KeyEnter, representing the Enter key. Changed signatures of CreateTexture methods in Renderer. Changed signatures of icon related method (removed factories). Basic example now depends on sdlgui.
527 lines
11 KiB
Go
527 lines
11 KiB
Go
package sdlui
|
|
|
|
import (
|
|
"github.com/veandco/go-sdl2/sdl"
|
|
"opslag.de/schobers/zntg/ui"
|
|
)
|
|
|
|
func eventBase(e sdl.Event) ui.EventBase {
|
|
return ui.EventBase{StampInSeconds: .001 * float64(e.GetTimestamp())}
|
|
}
|
|
|
|
func key(code sdl.Keycode) ui.Key {
|
|
switch code {
|
|
case sdl.K_UNKNOWN:
|
|
return ui.KeyNone
|
|
case sdl.K_RETURN:
|
|
return ui.KeyEnter
|
|
case sdl.K_ESCAPE:
|
|
return ui.KeyEscape
|
|
case sdl.K_BACKSPACE:
|
|
return ui.KeyBackspace
|
|
case sdl.K_TAB:
|
|
return ui.KeyTab
|
|
case sdl.K_SPACE:
|
|
return ui.KeySpace
|
|
// case sdl.K_EXCLAIM:
|
|
// return ui.KeyNone
|
|
// case sdl.K_QUOTEDBL:
|
|
// return ui.KeyNone
|
|
// case sdl.K_HASH:
|
|
// return ui.KeyNone
|
|
// case sdl.K_PERCENT:
|
|
// return ui.KeyNone
|
|
// case sdl.K_DOLLAR:
|
|
// return ui.KeyNone
|
|
// case sdl.K_AMPERSAND:
|
|
// return ui.KeyNone
|
|
case sdl.K_QUOTE:
|
|
return ui.KeyQuote
|
|
// case sdl.K_LEFTPAREN:
|
|
// return ui.KeyNone
|
|
// case sdl.K_RIGHTPAREN:
|
|
// return ui.KeyNone
|
|
case sdl.K_ASTERISK:
|
|
return ui.KeyPadAsterisk
|
|
case sdl.K_PLUS:
|
|
return ui.KeyPadPlus
|
|
case sdl.K_COMMA:
|
|
return ui.KeyComma
|
|
case sdl.K_MINUS:
|
|
return ui.KeyMinus
|
|
case sdl.K_PERIOD:
|
|
return ui.KeyFullstop
|
|
case sdl.K_SLASH:
|
|
return ui.KeySlash
|
|
case sdl.K_0:
|
|
return ui.Key0
|
|
case sdl.K_1:
|
|
return ui.Key1
|
|
case sdl.K_2:
|
|
return ui.Key2
|
|
case sdl.K_3:
|
|
return ui.Key3
|
|
case sdl.K_4:
|
|
return ui.Key4
|
|
case sdl.K_5:
|
|
return ui.Key5
|
|
case sdl.K_6:
|
|
return ui.Key6
|
|
case sdl.K_7:
|
|
return ui.Key7
|
|
case sdl.K_8:
|
|
return ui.Key8
|
|
case sdl.K_9:
|
|
return ui.Key9
|
|
// case sdl.K_COLON:
|
|
// return ui.KeyNone
|
|
case sdl.K_SEMICOLON:
|
|
return ui.KeySemicolon
|
|
// case sdl.K_LESS:
|
|
// return ui.KeyNone
|
|
case sdl.K_EQUALS:
|
|
return ui.KeyEquals
|
|
// case sdl.K_GREATER:
|
|
// return ui.KeyNone
|
|
// case sdl.K_QUESTION:
|
|
// return ui.KeyNone
|
|
// case sdl.K_AT:
|
|
// return ui.KeyNone
|
|
case sdl.K_LEFTBRACKET:
|
|
return ui.KeyOpenBrace
|
|
case sdl.K_BACKSLASH:
|
|
return ui.KeyBackslash
|
|
case sdl.K_RIGHTBRACKET:
|
|
return ui.KeyCloseBrace
|
|
// case sdl.K_CARET:
|
|
// return ui.KeyNone
|
|
// case sdl.K_UNDERSCORE:
|
|
// return ui.KeyNone
|
|
case sdl.K_BACKQUOTE:
|
|
return ui.KeyBacktick
|
|
case sdl.K_a:
|
|
return ui.KeyA
|
|
case sdl.K_b:
|
|
return ui.KeyB
|
|
case sdl.K_c:
|
|
return ui.KeyC
|
|
case sdl.K_d:
|
|
return ui.KeyD
|
|
case sdl.K_e:
|
|
return ui.KeyE
|
|
case sdl.K_f:
|
|
return ui.KeyF
|
|
case sdl.K_g:
|
|
return ui.KeyG
|
|
case sdl.K_h:
|
|
return ui.KeyH
|
|
case sdl.K_i:
|
|
return ui.KeyI
|
|
case sdl.K_j:
|
|
return ui.KeyJ
|
|
case sdl.K_k:
|
|
return ui.KeyK
|
|
case sdl.K_l:
|
|
return ui.KeyL
|
|
case sdl.K_m:
|
|
return ui.KeyM
|
|
case sdl.K_n:
|
|
return ui.KeyN
|
|
case sdl.K_o:
|
|
return ui.KeyO
|
|
case sdl.K_p:
|
|
return ui.KeyP
|
|
case sdl.K_q:
|
|
return ui.KeyQ
|
|
case sdl.K_r:
|
|
return ui.KeyR
|
|
case sdl.K_s:
|
|
return ui.KeyS
|
|
case sdl.K_t:
|
|
return ui.KeyT
|
|
case sdl.K_u:
|
|
return ui.KeyU
|
|
case sdl.K_v:
|
|
return ui.KeyV
|
|
case sdl.K_w:
|
|
return ui.KeyW
|
|
case sdl.K_x:
|
|
return ui.KeyX
|
|
case sdl.K_y:
|
|
return ui.KeyY
|
|
case sdl.K_z:
|
|
return ui.KeyZ
|
|
case sdl.K_CAPSLOCK:
|
|
return ui.KeyCapsLock
|
|
case sdl.K_F1:
|
|
return ui.KeyF1
|
|
case sdl.K_F2:
|
|
return ui.KeyF2
|
|
case sdl.K_F3:
|
|
return ui.KeyF3
|
|
case sdl.K_F4:
|
|
return ui.KeyF4
|
|
case sdl.K_F5:
|
|
return ui.KeyF5
|
|
case sdl.K_F6:
|
|
return ui.KeyF6
|
|
case sdl.K_F7:
|
|
return ui.KeyF7
|
|
case sdl.K_F8:
|
|
return ui.KeyF8
|
|
case sdl.K_F9:
|
|
return ui.KeyF9
|
|
case sdl.K_F10:
|
|
return ui.KeyF10
|
|
case sdl.K_F11:
|
|
return ui.KeyF11
|
|
case sdl.K_F12:
|
|
return ui.KeyF12
|
|
case sdl.K_PRINTSCREEN:
|
|
return ui.KeyPrintScreen
|
|
case sdl.K_SCROLLLOCK:
|
|
return ui.KeyScrollLock
|
|
case sdl.K_PAUSE:
|
|
return ui.KeyPause
|
|
case sdl.K_INSERT:
|
|
return ui.KeyInsert
|
|
case sdl.K_HOME:
|
|
return ui.KeyHome
|
|
case sdl.K_PAGEUP:
|
|
return ui.KeyPageUp
|
|
case sdl.K_DELETE:
|
|
return ui.KeyDelete
|
|
case sdl.K_END:
|
|
return ui.KeyEnd
|
|
case sdl.K_PAGEDOWN:
|
|
return ui.KeyPageDown
|
|
case sdl.K_RIGHT:
|
|
return ui.KeyRight
|
|
case sdl.K_LEFT:
|
|
return ui.KeyLeft
|
|
case sdl.K_DOWN:
|
|
return ui.KeyDown
|
|
case sdl.K_UP:
|
|
return ui.KeyUp
|
|
// case sdl.K_NUMLOCKCLEAR:
|
|
// return ui.KeyNone
|
|
case sdl.K_KP_DIVIDE:
|
|
return ui.KeyPadSlash
|
|
case sdl.K_KP_MULTIPLY:
|
|
return ui.KeyPadAsterisk
|
|
case sdl.K_KP_MINUS:
|
|
return ui.KeyPadMinus
|
|
case sdl.K_KP_PLUS:
|
|
return ui.KeyPadPlus
|
|
case sdl.K_KP_ENTER:
|
|
return ui.KeyPadEnter
|
|
case sdl.K_KP_1:
|
|
return ui.KeyPad1
|
|
case sdl.K_KP_2:
|
|
return ui.KeyPad2
|
|
case sdl.K_KP_3:
|
|
return ui.KeyPad3
|
|
case sdl.K_KP_4:
|
|
return ui.KeyPad4
|
|
case sdl.K_KP_5:
|
|
return ui.KeyPad5
|
|
case sdl.K_KP_6:
|
|
return ui.KeyPad6
|
|
case sdl.K_KP_7:
|
|
return ui.KeyPad7
|
|
case sdl.K_KP_8:
|
|
return ui.KeyPad8
|
|
case sdl.K_KP_9:
|
|
return ui.KeyPad9
|
|
case sdl.K_KP_0:
|
|
return ui.KeyPad0
|
|
// case sdl.K_KP_PERIOD:
|
|
// return ui.KeyNone
|
|
// case sdl.K_APPLICATION:
|
|
// return ui.KeyNone
|
|
// case sdl.K_POWER:
|
|
// return ui.KeyNone
|
|
case sdl.K_KP_EQUALS:
|
|
return ui.KeyPadEquals
|
|
// case sdl.K_F13:
|
|
// return ui.KeyNone
|
|
// case sdl.K_F14:
|
|
// return ui.KeyNone
|
|
// case sdl.K_F15:
|
|
// return ui.KeyNone
|
|
// case sdl.K_F16:
|
|
// return ui.KeyNone
|
|
// case sdl.K_F17:
|
|
// return ui.KeyNone
|
|
// case sdl.K_F18:
|
|
// return ui.KeyNone
|
|
// case sdl.K_F19:
|
|
// return ui.KeyNone
|
|
// case sdl.K_F20:
|
|
// return ui.KeyNone
|
|
// case sdl.K_F21:
|
|
// return ui.KeyNone
|
|
// case sdl.K_F22:
|
|
// return ui.KeyNone
|
|
// case sdl.K_F23:
|
|
// return ui.KeyNone
|
|
// case sdl.K_F24:
|
|
// return ui.KeyNone
|
|
// case sdl.K_EXECUTE:
|
|
// return ui.KeyNone
|
|
// case sdl.K_HELP:
|
|
// return ui.KeyNone
|
|
case sdl.K_MENU:
|
|
return ui.KeyNone
|
|
case sdl.K_SELECT:
|
|
return ui.KeyNone
|
|
case sdl.K_STOP:
|
|
return ui.KeyNone
|
|
case sdl.K_AGAIN:
|
|
return ui.KeyNone
|
|
case sdl.K_UNDO:
|
|
return ui.KeyNone
|
|
case sdl.K_CUT:
|
|
return ui.KeyNone
|
|
case sdl.K_COPY:
|
|
return ui.KeyNone
|
|
case sdl.K_PASTE:
|
|
return ui.KeyNone
|
|
case sdl.K_FIND:
|
|
return ui.KeyNone
|
|
case sdl.K_MUTE:
|
|
return ui.KeyNone
|
|
case sdl.K_VOLUMEUP:
|
|
return ui.KeyVolumeUp
|
|
case sdl.K_VOLUMEDOWN:
|
|
return ui.KeyVolumeDown
|
|
// case sdl.K_KP_COMMA:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_EQUALSAS400:
|
|
// return ui.KeyNone
|
|
// case sdl.K_ALTERASE:
|
|
// return ui.KeyNone
|
|
// case sdl.K_SYSREQ:
|
|
// return ui.KeyNone
|
|
// case sdl.K_CANCEL:
|
|
// return ui.KeyNone
|
|
// case sdl.K_CLEAR:
|
|
// return ui.KeyNone
|
|
// case sdl.K_PRIOR:
|
|
// return ui.KeyNone
|
|
// case sdl.K_RETURN2:
|
|
// return ui.KeyNone
|
|
// case sdl.K_SEPARATOR:
|
|
// return ui.KeyNone
|
|
// case sdl.K_OUT:
|
|
// return ui.KeyNone
|
|
// case sdl.K_OPER:
|
|
// return ui.KeyNone
|
|
// case sdl.K_CLEARAGAIN:
|
|
// return ui.KeyNone
|
|
// case sdl.K_CRSEL:
|
|
// return ui.KeyNone
|
|
// case sdl.K_EXSEL:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_00:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_000:
|
|
// return ui.KeyNone
|
|
// case sdl.K_THOUSANDSSEPARATOR:
|
|
// return ui.KeyNone
|
|
// case sdl.K_DECIMALSEPARATOR:
|
|
// return ui.KeyNone
|
|
// case sdl.K_CURRENCYUNIT:
|
|
// return ui.KeyNone
|
|
// case sdl.K_CURRENCYSUBUNIT:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_LEFTPAREN:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_RIGHTPAREN:
|
|
// return ui.KeyNone
|
|
case sdl.K_KP_LEFTBRACE:
|
|
return ui.KeyOpenBrace // generic equivalent
|
|
case sdl.K_KP_RIGHTBRACE:
|
|
return ui.KeyCloseBrace // generic equivalent
|
|
case sdl.K_KP_TAB:
|
|
return ui.KeyTab // generic equivalent
|
|
case sdl.K_KP_BACKSPACE:
|
|
return ui.KeyBackspace // generic equivalent
|
|
case sdl.K_KP_A:
|
|
return ui.KeyA // generic equivalent
|
|
case sdl.K_KP_B:
|
|
return ui.KeyB // generic equivalent
|
|
case sdl.K_KP_C:
|
|
return ui.KeyC // generic equivalent
|
|
case sdl.K_KP_D:
|
|
return ui.KeyD // generic equivalent
|
|
case sdl.K_KP_E:
|
|
return ui.KeyE // generic equivalent
|
|
case sdl.K_KP_F:
|
|
return ui.KeyF // generic equivalent
|
|
// case sdl.K_KP_XOR:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_POWER:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_PERCENT:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_LESS:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_GREATER:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_AMPERSAND:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_DBLAMPERSAND:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_VERTICALBAR:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_DBLVERTICALBAR:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_COLON:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_HASH:
|
|
// return ui.KeyNone
|
|
case sdl.K_KP_SPACE:
|
|
return ui.KeySpace // generic equivalent
|
|
// case sdl.K_KP_AT:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_EXCLAM:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_MEMSTORE:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_MEMRECALL:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_MEMCLEAR:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_MEMADD:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_MEMSUBTRACT:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_MEMMULTIPLY:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_MEMDIVIDE:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_PLUSMINUS:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_CLEAR:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_CLEARENTRY:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_BINARY:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_OCTAL:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_DECIMAL:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KP_HEXADECIMAL:
|
|
// return ui.KeyNone
|
|
case sdl.K_LCTRL:
|
|
return ui.KeyLeftControl
|
|
case sdl.K_LSHIFT:
|
|
return ui.KeyLeftShift
|
|
case sdl.K_LALT:
|
|
return ui.KeyAlt
|
|
case sdl.K_LGUI:
|
|
return ui.KeyLeftWin
|
|
case sdl.K_RCTRL:
|
|
return ui.KeyRightControl
|
|
case sdl.K_RSHIFT:
|
|
return ui.KeyRightShift
|
|
case sdl.K_RALT:
|
|
return ui.KeyAltGr
|
|
case sdl.K_RGUI:
|
|
return ui.KeyRightWin
|
|
// case sdl.K_MODE:
|
|
// return ui.KeyNone
|
|
// case sdl.K_AUDIONEXT:
|
|
// return ui.KeyNone
|
|
// case sdl.K_AUDIOPREV:
|
|
// return ui.KeyNone
|
|
// case sdl.K_AUDIOSTOP:
|
|
// return ui.KeyNone
|
|
// case sdl.K_AUDIOPLAY:
|
|
// return ui.KeyNone
|
|
// case sdl.K_AUDIOMUTE:
|
|
// return ui.KeyNone
|
|
// case sdl.K_MEDIASELECT:
|
|
// return ui.KeyNone
|
|
// case sdl.K_WWW:
|
|
// return ui.KeyNone
|
|
// case sdl.K_MAIL:
|
|
// return ui.KeyNone
|
|
// case sdl.K_CALCULATOR:
|
|
// return ui.KeyNone
|
|
// case sdl.K_COMPUTER:
|
|
// return ui.KeyNone
|
|
// case sdl.K_AC_SEARCH:
|
|
// return ui.KeyNone
|
|
// case sdl.K_AC_HOME:
|
|
// return ui.KeyNone
|
|
// case sdl.K_AC_BACK:
|
|
// return ui.KeyNone
|
|
// case sdl.K_AC_FORWARD:
|
|
// return ui.KeyNone
|
|
// case sdl.K_AC_STOP:
|
|
// return ui.KeyNone
|
|
// case sdl.K_AC_REFRESH:
|
|
// return ui.KeyNone
|
|
// case sdl.K_AC_BOOKMARKS:
|
|
// return ui.KeyNone
|
|
// case sdl.K_BRIGHTNESSDOWN:
|
|
// return ui.KeyNone
|
|
// case sdl.K_BRIGHTNESSUP:
|
|
// return ui.KeyNone
|
|
// case sdl.K_DISPLAYSWITCH:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KBDILLUMTOGGLE:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KBDILLUMDOWN:
|
|
// return ui.KeyNone
|
|
// case sdl.K_KBDILLUMUP:
|
|
// return ui.KeyNone
|
|
// case sdl.K_EJECT:
|
|
// return ui.KeyNone
|
|
// case sdl.K_SLEEP:
|
|
// return ui.KeyNone
|
|
default:
|
|
return ui.KeyNone
|
|
}
|
|
}
|
|
|
|
func keyModifiers(mod uint16) ui.KeyModifier {
|
|
var modifiers ui.KeyModifier
|
|
if mod&uint16(sdl.KMOD_ALT|sdl.KMOD_LALT) != 0 {
|
|
modifiers |= ui.KeyModifierAlt
|
|
}
|
|
if mod&uint16(sdl.KMOD_CTRL|sdl.KMOD_LCTRL) != 0 {
|
|
modifiers |= ui.KeyModifierControl
|
|
}
|
|
if mod&uint16(sdl.KMOD_SHIFT|sdl.KMOD_LSHIFT) != 0 {
|
|
modifiers |= ui.KeyModifierShift
|
|
}
|
|
if mod&uint16(sdl.KMOD_GUI|sdl.KMOD_LGUI) != 0 {
|
|
modifiers |= ui.KeyModifierOSCommand
|
|
}
|
|
return modifiers
|
|
}
|
|
|
|
func mouseButton(b uint8) ui.MouseButton {
|
|
switch b {
|
|
case sdl.BUTTON_LEFT:
|
|
return ui.MouseButtonLeft
|
|
case sdl.BUTTON_MIDDLE:
|
|
return ui.MouseButtonMiddle
|
|
case sdl.BUTTON_RIGHT:
|
|
return ui.MouseButtonRight
|
|
}
|
|
return ui.MouseButtonLeft
|
|
}
|
|
|
|
func mouseEvent(e sdl.Event, x, y int32) ui.MouseEvent {
|
|
return ui.MouseEvent{
|
|
X: float32(x),
|
|
Y: float32(y),
|
|
EventBase: eventBase(e),
|
|
}
|
|
}
|