bullet3/examples/ThirdPartyLibs/Gwen/Input/SDL13.h
erwincoumans ab8f16961e Code-style consistency improvement:
Apply clang-format-all.sh using the _clang-format file through all the cpp/.h files.
make sure not to apply it to certain serialization structures, since some parser expects the * as part of the name, instead of type.
This commit contains no other changes aside from adding and applying clang-format-all.sh
2018-09-23 14:17:31 -07:00

161 lines
3.2 KiB
C++

/*
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;
};
} // namespace Input
} // namespace Gwen
#endif