diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/ThirdParty/ANGLE/util/OSWindow.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/ThirdParty/ANGLE/util/OSWindow.cpp')
-rw-r--r-- | Source/ThirdParty/ANGLE/util/OSWindow.cpp | 323 |
1 files changed, 323 insertions, 0 deletions
diff --git a/Source/ThirdParty/ANGLE/util/OSWindow.cpp b/Source/ThirdParty/ANGLE/util/OSWindow.cpp new file mode 100644 index 000000000..abe8607af --- /dev/null +++ b/Source/ThirdParty/ANGLE/util/OSWindow.cpp @@ -0,0 +1,323 @@ +// +// Copyright (c) 2014 The ANGLE Project Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// + +#include "OSWindow.h" + +#include <iostream> +#include <sstream> + +#include "common/debug.h" + +#ifndef DEBUG_EVENTS +#define DEBUG_EVENTS 0 +#endif + +#if DEBUG_EVENTS +static const char *MouseButtonName(MouseButton button) +{ + switch (button) + { + case MOUSEBUTTON_UNKNOWN: + return "Unknown"; + case MOUSEBUTTON_LEFT: + return "Left"; + case MOUSEBUTTON_RIGHT: + return "Right"; + case MOUSEBUTTON_MIDDLE: + return "Middle"; + case MOUSEBUTTON_BUTTON4: + return "Button4"; + case MOUSEBUTTON_BUTTON5: + return "Button5"; + default: + UNREACHABLE(); + return nullptr; + } +} + +static const char *KeyName(Key key) +{ + switch (key) + { + case KEY_UNKNOWN: return "Unknown"; + case KEY_A: return "A"; + case KEY_B: return "B"; + case KEY_C: return "C"; + case KEY_D: return "D"; + case KEY_E: return "E"; + case KEY_F: return "F"; + case KEY_G: return "G"; + case KEY_H: return "H"; + case KEY_I: return "I"; + case KEY_J: return "J"; + case KEY_K: return "K"; + case KEY_L: return "L"; + case KEY_M: return "M"; + case KEY_N: return "N"; + case KEY_O: return "O"; + case KEY_P: return "P"; + case KEY_Q: return "Q"; + case KEY_R: return "R"; + case KEY_S: return "S"; + case KEY_T: return "T"; + case KEY_U: return "U"; + case KEY_V: return "V"; + case KEY_W: return "W"; + case KEY_X: return "X"; + case KEY_Y: return "Y"; + case KEY_Z: return "Z"; + case KEY_NUM0: return "Num0"; + case KEY_NUM1: return "Num1"; + case KEY_NUM2: return "Num2"; + case KEY_NUM3: return "Num3"; + case KEY_NUM4: return "Num4"; + case KEY_NUM5: return "Num5"; + case KEY_NUM6: return "Num6"; + case KEY_NUM7: return "Num7"; + case KEY_NUM8: return "Num8"; + case KEY_NUM9: return "Num9"; + case KEY_ESCAPE: return "Escape"; + case KEY_LCONTROL: return "Left Control"; + case KEY_LSHIFT: return "Left Shift"; + case KEY_LALT: return "Left Alt"; + case KEY_LSYSTEM: return "Left System"; + case KEY_RCONTROL: return "Right Control"; + case KEY_RSHIFT: return "Right Shift"; + case KEY_RALT: return "Right Alt"; + case KEY_RSYSTEM: return "Right System"; + case KEY_MENU: return "Menu"; + case KEY_LBRACKET: return "Left Bracket"; + case KEY_RBRACKET: return "Right Bracket"; + case KEY_SEMICOLON: return "Semicolon"; + case KEY_COMMA: return "Comma"; + case KEY_PERIOD: return "Period"; + case KEY_QUOTE: return "Quote"; + case KEY_SLASH: return "Slash"; + case KEY_BACKSLASH: return "Backslash"; + case KEY_TILDE: return "Tilde"; + case KEY_EQUAL: return "Equal"; + case KEY_DASH: return "Dash"; + case KEY_SPACE: return "Space"; + case KEY_RETURN: return "Return"; + case KEY_BACK: return "Back"; + case KEY_TAB: return "Tab"; + case KEY_PAGEUP: return "Page Up"; + case KEY_PAGEDOWN: return "Page Down"; + case KEY_END: return "End"; + case KEY_HOME: return "Home"; + case KEY_INSERT: return "Insert"; + case KEY_DELETE: return "Delete"; + case KEY_ADD: return "Add"; + case KEY_SUBTRACT: return "Substract"; + case KEY_MULTIPLY: return "Multiply"; + case KEY_DIVIDE: return "Divide"; + case KEY_LEFT: return "Left"; + case KEY_RIGHT: return "Right"; + case KEY_UP: return "Up"; + case KEY_DOWN: return "Down"; + case KEY_NUMPAD0: return "Numpad 0"; + case KEY_NUMPAD1: return "Numpad 1"; + case KEY_NUMPAD2: return "Numpad 2"; + case KEY_NUMPAD3: return "Numpad 3"; + case KEY_NUMPAD4: return "Numpad 4"; + case KEY_NUMPAD5: return "Numpad 5"; + case KEY_NUMPAD6: return "Numpad 6"; + case KEY_NUMPAD7: return "Numpad 7"; + case KEY_NUMPAD8: return "Numpad 8"; + case KEY_NUMPAD9: return "Numpad 9"; + case KEY_F1: return "F1"; + case KEY_F2: return "F2"; + case KEY_F3: return "F3"; + case KEY_F4: return "F4"; + case KEY_F5: return "F5"; + case KEY_F6: return "F6"; + case KEY_F7: return "F7"; + case KEY_F8: return "F8"; + case KEY_F9: return "F9"; + case KEY_F10: return "F10"; + case KEY_F11: return "F11"; + case KEY_F12: return "F12"; + case KEY_F13: return "F13"; + case KEY_F14: return "F14"; + case KEY_F15: return "F15"; + case KEY_PAUSE: return "Pause"; + default: return "Unknown Key"; + } +} + +static std::string KeyState(const Event::KeyEvent &event) +{ + if (event.Shift || event.Control || event.Alt || event.System) + { + std::ostringstream buffer; + buffer << " ["; + + if (event.Shift) + { + buffer << "Shift"; + } + if (event.Control) + { + buffer << "Control"; + } + if (event.Alt) + { + buffer << "Alt"; + } + if (event.System) + { + buffer << "System"; + } + + buffer << "]"; + return buffer.str(); + } + return ""; +} + +static void PrintEvent(const Event& event) +{ + switch (event.Type) + { + case Event::EVENT_CLOSED: + std::cout << "Event: Window Closed" << std::endl; + break; + case Event::EVENT_MOVED: + std::cout << "Event: Window Moved (" << event.Move.X + << ", " << event.Move.Y << ")" << std::endl; + break; + case Event::EVENT_RESIZED: + std::cout << "Event: Window Resized (" << event.Size.Width + << ", " << event.Size.Height << ")" << std::endl; + break; + case Event::EVENT_LOST_FOCUS: + std::cout << "Event: Window Lost Focus" << std::endl; + break; + case Event::EVENT_GAINED_FOCUS: + std::cout << "Event: Window Gained Focus" << std::endl; + break; + case Event::EVENT_TEXT_ENTERED: + // TODO(cwallez) show the character + std::cout << "Event: Text Entered" << std::endl; + break; + case Event::EVENT_KEY_PRESSED: + std::cout << "Event: Key Pressed (" << KeyName(event.Key.Code) << KeyState(event.Key) << ")" << std::endl; + break; + case Event::EVENT_KEY_RELEASED: + std::cout << "Event: Key Released (" << KeyName(event.Key.Code) << KeyState(event.Key) << ")" << std::endl; + break; + case Event::EVENT_MOUSE_WHEEL_MOVED: + std::cout << "Event: Mouse Wheel (" << event.MouseWheel.Delta << ")" << std::endl; + break; + case Event::EVENT_MOUSE_BUTTON_PRESSED: + std::cout << "Event: Mouse Button Pressed " << MouseButtonName(event.MouseButton.Button) << + " at (" << event.MouseButton.X << ", " << event.MouseButton.Y << ")" << std::endl; + break; + case Event::EVENT_MOUSE_BUTTON_RELEASED: + std::cout << "Event: Mouse Button Released " << MouseButtonName(event.MouseButton.Button) << + " at (" << event.MouseButton.X << ", " << event.MouseButton.Y << ")" << std::endl; + break; + case Event::EVENT_MOUSE_MOVED: + std::cout << "Event: Mouse Moved (" << event.MouseMove.X + << ", " << event.MouseMove.Y << ")" << std::endl; + break; + case Event::EVENT_MOUSE_ENTERED: + std::cout << "Event: Mouse Entered Window" << std::endl; + break; + case Event::EVENT_MOUSE_LEFT: + std::cout << "Event: Mouse Left Window" << std::endl; + break; + case Event::EVENT_TEST: + std::cout << "Event: Test" << std::endl; + break; + default: + UNREACHABLE(); + break; + } +} +#endif + +OSWindow::OSWindow() + : mX(0), + mY(0), + mWidth(0), + mHeight(0) +{ +} + +OSWindow::~OSWindow() +{} + +int OSWindow::getX() const +{ + return mX; +} + +int OSWindow::getY() const +{ + return mY; +} + +int OSWindow::getWidth() const +{ + return mWidth; +} + +int OSWindow::getHeight() const +{ + return mHeight; +} + +bool OSWindow::popEvent(Event *event) +{ + if (mEvents.size() > 0 && event) + { + *event = mEvents.front(); + mEvents.pop_front(); + return true; + } + else + { + return false; + } +} + +void OSWindow::pushEvent(Event event) +{ + switch (event.Type) + { + case Event::EVENT_MOVED: + mX = event.Move.X; + mY = event.Move.Y; + break; + case Event::EVENT_RESIZED: + mWidth = event.Size.Width; + mHeight = event.Size.Height; + break; + default: + break; + } + + mEvents.push_back(event); + +#if DEBUG_EVENTS + PrintEvent(event); +#endif +} + +bool OSWindow::didTestEventFire() +{ + Event topEvent; + while (popEvent(&topEvent)) + { + if (topEvent.Type == Event::EVENT_TEST) + { + return true; + } + } + + return false; +} |