void UI::HandleMouseButtonUp(StringHash eventType, VariantMap& eventData) { if (inputDisabled_ || consoleVisible_) return; using namespace MouseButtonUp; unsigned button = eventData[P_BUTTON].GetUInt(); IntVector2 pos; Input* input = GetSubsystem<Input>(); pos = input->GetMousePosition(); int qualifiers = input->GetQualifiers(); #ifdef ATOMIC_PLATFORM_WINDOWS bool superdown = input->GetKeyDown(KEY_LCTRL) || input->GetKeyDown(KEY_RCTRL); #else bool superdown = input->GetKeyDown(KEY_LGUI) || input->GetKeyDown(KEY_RGUI); #endif MODIFIER_KEYS mod = GetModifierKeys(qualifiers, superdown); if (button == MOUSEB_RIGHT) rootWidget_->InvokeRightPointerUp(pos.x_, pos.y_, mod); else rootWidget_->InvokePointerUp(pos.x_, pos.y_, mod, false); }
void UI::HandleMouseButtonDown(StringHash eventType, VariantMap& eventData) { if (inputDisabled_ || consoleVisible_) return; using namespace MouseButtonDown; unsigned button = eventData[P_BUTTON].GetUInt(); IntVector2 pos; pos = GetSubsystem<Input>()->GetMousePosition(); Input* input = GetSubsystem<Input>(); int qualifiers = input->GetQualifiers(); #ifdef ATOMIC_PLATFORM_WINDOWS bool superdown = input->GetKeyDown(KEY_LCTRL) || input->GetKeyDown(KEY_RCTRL); #else bool superdown = input->GetKeyDown(KEY_LGUI) || input->GetKeyDown(KEY_RGUI); #endif MODIFIER_KEYS mod = GetModifierKeys(qualifiers, superdown); static double last_time = 0; static int counter = 1; Time* t = GetSubsystem<Time>(); double time = t->GetElapsedTime() * 1000; if (time < last_time + 600) counter++; else counter = 1; last_time = time; if (button == MOUSEB_RIGHT) rootWidget_->InvokeRightPointerDown(pos.x_, pos.y_, counter, mod); else rootWidget_->InvokePointerDown(pos.x_, pos.y_, counter, mod, false); }
void UI::HandleKey(bool keydown, int keycode, int scancode) { if (keydown && (keycode == KEY_ESCAPE || keycode == KEY_RETURN || keycode == KEY_RETURN2 || keycode == KEY_KP_ENTER) && TBWidget::focused_widget) { SendEvent(E_UIWIDGETFOCUSESCAPED); } #ifdef ATOMIC_PLATFORM_WINDOWS if (keycode == KEY_LCTRL || keycode == KEY_RCTRL) return; #else if (keycode == KEY_LGUI || keycode == KEY_RGUI) return; #endif Input* input = GetSubsystem<Input>(); int qualifiers = input->GetQualifiers(); #ifdef ATOMIC_PLATFORM_WINDOWS bool superdown = input->GetKeyDown(KEY_LCTRL) || input->GetKeyDown(KEY_RCTRL); #else bool superdown = input->GetKeyDown(KEY_LGUI) || input->GetKeyDown(KEY_RGUI); #endif MODIFIER_KEYS mod = GetModifierKeys(qualifiers, superdown); SPECIAL_KEY specialKey = TB_KEY_UNDEFINED; switch (keycode) { case KEY_RETURN: case KEY_RETURN2: case KEY_KP_ENTER: specialKey = TB_KEY_ENTER; break; case KEY_F1: specialKey = TB_KEY_F1; break; case KEY_F2: specialKey = TB_KEY_F2; break; case KEY_F3: specialKey = TB_KEY_F3; break; case KEY_F4: specialKey = TB_KEY_F4; break; case KEY_F5: specialKey = TB_KEY_F5; break; case KEY_F6: specialKey = TB_KEY_F6; break; case KEY_F7: specialKey = TB_KEY_F7; break; case KEY_F8: specialKey = TB_KEY_F8; break; case KEY_F9: specialKey = TB_KEY_F9; break; case KEY_F10: specialKey = TB_KEY_F10; break; case KEY_F11: specialKey = TB_KEY_F11; break; case KEY_F12: specialKey = TB_KEY_F12; break; case KEY_LEFT: specialKey = TB_KEY_LEFT; break; case KEY_UP: specialKey = TB_KEY_UP; break; case KEY_RIGHT: specialKey = TB_KEY_RIGHT; break; case KEY_DOWN: specialKey = TB_KEY_DOWN; break; case KEY_PAGEUP: specialKey = TB_KEY_PAGE_UP; break; case KEY_PAGEDOWN: specialKey = TB_KEY_PAGE_DOWN; break; case KEY_HOME: specialKey = TB_KEY_HOME; break; case KEY_END: specialKey = TB_KEY_END; break; case KEY_INSERT: specialKey = TB_KEY_INSERT; break; case KEY_TAB: specialKey = TB_KEY_TAB; break; case KEY_DELETE: specialKey = TB_KEY_DELETE; break; case KEY_BACKSPACE: specialKey = TB_KEY_BACKSPACE; break; case KEY_ESCAPE: specialKey = TB_KEY_ESC; break; } if (specialKey == TB_KEY_UNDEFINED) { if (mod & TB_SUPER) { InvokeKey(this, rootWidget_, keycode, TB_KEY_UNDEFINED, mod, keydown); } } else { InvokeKey(this, rootWidget_, 0, specialKey, mod, keydown); } }
void UI::HandleKey(bool keydown, int keycode, int scancode) { #ifdef ATOMIC_PLATFORM_WINDOWS if (keycode == KEY_LCTRL || keycode == KEY_RCTRL) return; #else if (keycode == KEY_LGUI || keycode == KEY_RGUI) return; #endif Input* input = GetSubsystem<Input>(); int qualifiers = input->GetQualifiers(); #ifdef ATOMIC_PLATFORM_WINDOWS bool superdown = input->GetKeyDown(KEY_LCTRL) || input->GetKeyDown(KEY_RCTRL); #else bool superdown = input->GetKeyDown(KEY_LGUI) || input->GetKeyDown(KEY_RGUI); #endif MODIFIER_KEYS mod = GetModifierKeys(qualifiers, superdown); switch (keycode) { case KEY_RETURN: case KEY_RETURN2: case KEY_KP_ENTER: InvokeKey(rootWidget_, 0, TB_KEY_ENTER, mod, keydown); break; case KEY_F1: InvokeKey(rootWidget_, 0, TB_KEY_F1, mod, keydown); break; case KEY_F2: InvokeKey(rootWidget_, 0, TB_KEY_F2, mod, keydown); break; case KEY_F3: InvokeKey(rootWidget_, 0, TB_KEY_F3, mod, keydown); break; case KEY_F4: InvokeKey(rootWidget_, 0, TB_KEY_F4, mod, keydown); break; case KEY_F5: InvokeKey(rootWidget_, 0, TB_KEY_F5, mod, keydown); break; case KEY_F6: InvokeKey(rootWidget_, 0, TB_KEY_F6, mod, keydown); break; case KEY_F7: InvokeKey(rootWidget_, 0, TB_KEY_F7, mod, keydown); break; case KEY_F8: InvokeKey(rootWidget_, 0, TB_KEY_F8, mod, keydown); break; case KEY_F9: InvokeKey(rootWidget_, 0, TB_KEY_F9, mod, keydown); break; case KEY_F10: InvokeKey(rootWidget_, 0, TB_KEY_F10, mod, keydown); break; case KEY_F11: InvokeKey(rootWidget_, 0, TB_KEY_F11, mod, keydown); break; case KEY_F12: InvokeKey(rootWidget_, 0, TB_KEY_F12, mod, keydown); break; case KEY_LEFT: InvokeKey(rootWidget_, 0, TB_KEY_LEFT, mod, keydown); break; case KEY_UP: InvokeKey(rootWidget_, 0, TB_KEY_UP, mod, keydown); break; case KEY_RIGHT: InvokeKey(rootWidget_, 0, TB_KEY_RIGHT, mod, keydown); break; case KEY_DOWN: InvokeKey(rootWidget_, 0, TB_KEY_DOWN, mod, keydown); break; case KEY_PAGEUP: InvokeKey(rootWidget_, 0, TB_KEY_PAGE_UP, mod, keydown); break; case KEY_PAGEDOWN: InvokeKey(rootWidget_, 0, TB_KEY_PAGE_DOWN, mod, keydown); break; case KEY_HOME: InvokeKey(rootWidget_, 0, TB_KEY_HOME, mod, keydown); break; case KEY_END: InvokeKey(rootWidget_, 0, TB_KEY_END, mod, keydown); break; case KEY_INSERT: InvokeKey(rootWidget_, 0, TB_KEY_INSERT, mod, keydown); break; case KEY_TAB: InvokeKey(rootWidget_, 0, TB_KEY_TAB, mod, keydown); break; case KEY_DELETE: InvokeKey(rootWidget_, 0, TB_KEY_DELETE, mod, keydown); break; case KEY_BACKSPACE: InvokeKey(rootWidget_, 0, TB_KEY_BACKSPACE, mod, keydown); break; case KEY_ESC: InvokeKey(rootWidget_, 0, TB_KEY_ESC, mod, keydown); break; default: if (mod & TB_SUPER) { InvokeKey(rootWidget_, keycode, TB_KEY_UNDEFINED, mod, keydown); } } }