123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- /*
- GWEN
- Copyright (c) 2011 Facepunch Studios
- See license in Gwen.h
- */
- #ifndef GWEN_INPUT_SDL13_H
- #define GWEN_INPUT_SDL13_H
- #include "Gwen/InputHandler.h"
- #include "Gwen/Gwen.h"
- #include "Gwen/Controls/Canvas.h"
- #ifdef _WIN32
- #define UCS_STRING "UCS-2"
- #else
- #define UCS_STRING "UCS-4"
- #endif
- namespace Gwen
- {
- namespace Input
- {
- class SDL13
- {
- public:
- SDL13()
- {
- m_Canvas = NULL;
- }
- void Initialize( Gwen::Controls::Canvas* c )
- {
- m_Canvas = c;
- }
- bool ProcessEvent( SDL_Event* Event )
- {
- if (!m_Canvas) return false;
- switch(Event->type)
- {
- case SDL_KEYUP:
- case SDL_KEYDOWN:
- {
- SDL_KeyboardEvent* E = &Event->key;
- int iKey = -1;
- SDL_scancode scancode = E->keysym.scancode;
- switch (scancode) {
- case SDL_SCANCODE_RETURN: iKey = Gwen::Key::Return; break;
- case SDL_SCANCODE_BACKSPACE: iKey = Gwen::Key::Backspace; break;
- case SDL_SCANCODE_DELETE: iKey = Gwen::Key::Delete; break;
- case SDL_SCANCODE_LEFT: iKey = Gwen::Key::Left; break;
- case SDL_SCANCODE_RIGHT: iKey = Gwen::Key::Right; break;
- case SDL_SCANCODE_LSHIFT: iKey = Gwen::Key::Shift; break;
- case SDL_SCANCODE_RSHIFT: iKey = Gwen::Key::Shift; break;
- case SDL_SCANCODE_TAB: iKey = Gwen::Key::Tab; break;
- case SDL_SCANCODE_SPACE: iKey = Gwen::Key::Space; break;
- case SDL_SCANCODE_HOME: iKey = Gwen::Key::Home; break;
- case SDL_SCANCODE_END: iKey = Gwen::Key::End; break;
- case SDL_SCANCODE_LCTRL: iKey = Gwen::Key::Control; break;
- case SDL_SCANCODE_RCTRL: iKey = Gwen::Key::Control; break;
- case SDL_SCANCODE_UP: iKey = Gwen::Key::Up; break;
- case SDL_SCANCODE_DOWN: iKey = Gwen::Key::Down; break;
- case SDL_SCANCODE_ESCAPE: iKey = Gwen::Key::Escape; break;
- case SDL_SCANCODE_LALT: iKey = Gwen::Key::Alt; break;
- case SDL_SCANCODE_RALT: iKey = Gwen::Key::Alt; break;
- default: return false;
- }
- return m_Canvas->InputKey(iKey, E->state);
- }
- case SDL_TEXTINPUT:
- {
- SDL_TextInputEvent* E = &Event->text;
- wchar_t* widechar = (wchar_t*)SDL_iconv_string(UCS_STRING, "UTF-8", E->text, SDL_strlen(E->text)+1);
- bool ret = m_Canvas->InputCharacter(*widechar);
- SDL_free(widechar);
- return ret;
- }
- case SDL_MOUSEMOTION:
- {
- SDL_MouseMotionEvent* E = &Event->motion;
- return m_Canvas->InputMouseMoved(E->x, E->y, E->xrel, E->yrel);
- }
- case SDL_MOUSEBUTTONDOWN:
- case SDL_MOUSEBUTTONUP:
- {
- SDL_MouseButtonEvent* E = &Event->button;
- int Button = -1;
- switch (E->button) {
- case SDL_BUTTON_LEFT: Button = 0; break;
- case SDL_BUTTON_MIDDLE: Button = 2; break;
- case SDL_BUTTON_RIGHT: Button = 1; break;
- default: return false;
- }
- return m_Canvas->InputMouseButton(Button, E->state);
- }
- case SDL_MOUSEWHEEL:
- {
- SDL_MouseWheelEvent* E = &Event->wheel;
- return m_Canvas->InputMouseWheel(E->y);
- }
- default:
- {
- return false;
- }
- }
- }
- protected:
- Gwen::Controls::Canvas* m_Canvas;
- };
- }
- }
- #endif
|