summaryrefslogtreecommitdiff
path: root/Source/ThirdParty/ANGLE/util/OSWindow.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/ThirdParty/ANGLE/util/OSWindow.cpp
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/ThirdParty/ANGLE/util/OSWindow.cpp')
-rw-r--r--Source/ThirdParty/ANGLE/util/OSWindow.cpp323
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;
+}