/* Copyright (C) 2001-2006, William Joseph. All Rights Reserved. This file is part of GtkRadiant. GtkRadiant is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GtkRadiant is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GtkRadiant; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #if !defined(INCLUDED_WINDOWOBSERVER_H) #define INCLUDED_WINDOWOBSERVER_H template class BitFieldValue; struct ModifierEnumeration; typedef BitFieldValue ModifierFlags; template class EnumeratedValue; struct ButtonEnumeration; typedef EnumeratedValue ButtonIdentifier; #include "generic/bitfield.h" struct ModifierEnumeration { enum Value { SHIFT = 0, CONTROL = 1, ALT = 2 }; }; typedef BitFieldValue ModifierFlags; const ModifierFlags c_modifierNone; const ModifierFlags c_modifierShift(ModifierEnumeration::SHIFT); const ModifierFlags c_modifierControl(ModifierEnumeration::CONTROL); const ModifierFlags c_modifierAlt(ModifierEnumeration::ALT); #include "generic/enumeration.h" struct ButtonEnumeration { enum Value { INVALID = 0, LEFT = 1, MIDDLE = 3, RIGHT = 2 }; }; typedef EnumeratedValue ButtonIdentifier; const ButtonIdentifier c_buttonInvalid(ButtonEnumeration::INVALID); const ButtonIdentifier c_buttonLeft(ButtonEnumeration::LEFT); const ButtonIdentifier c_buttonMiddle(ButtonEnumeration::MIDDLE); const ButtonIdentifier c_buttonRight(ButtonEnumeration::RIGHT); template class BasicVector2; typedef BasicVector2 Vector2; typedef Vector2 WindowVector; class WindowObserver { public: virtual void release() = 0; virtual void onSizeChanged(int width, int height) = 0; virtual void onMouseDown(const WindowVector& position, ButtonIdentifier button, ModifierFlags modifiers) = 0; virtual void onMouseUp(const WindowVector& position, ButtonIdentifier button, ModifierFlags modifiers) = 0; virtual void onMouseMotion(const WindowVector& position, ModifierFlags modifiers) = 0; virtual void onModifierDown(ModifierFlags modifier) = 0; virtual void onModifierUp(ModifierFlags modifier) = 0; }; #endif