00001 00002 /* 00003 TEDDY - General graphics application library 00004 Copyright (C) 1999-2002 Timo Suoranta 00005 tksuoran@cc.helsinki.fi 00006 00007 This library is free software; you can redistribute it and/or 00008 modify it under the terms of the GNU Lesser General Public 00009 License as published by the Free Software Foundation; either 00010 version 2.1 of the License, or (at your option) any later version. 00011 00012 This library is distributed in the hope that it will be useful, 00013 but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 Lesser General Public License for more details. 00016 00017 You should have received a copy of the GNU Lesser General Public 00018 License along with this library; if not, write to the Free Software 00019 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00020 00021 $Id: $ 00022 */ 00023 00024 00025 #ifndef TEDDY__PHYSICAL_COMPONENTS__WINDOW_MANAGER__H 00026 #define TEDDY__PHYSICAL_COMPONENTS__WINDOW_MANAGER__H 00027 00028 00029 #include "Teddy/TeddyConfig.h" // for HAVE_SDL_JOYSTICK 00030 #include "Teddy/Maths/Vector2.h" 00031 #include "Teddy/PhysicalComponents/EventListener.h" 00032 #include "Teddy/SysSupport/StdList.h" 00033 #include "Teddy/SysSupport/StdSDL.h" 00034 00035 00036 // Forward declarations 00037 namespace Teddy { 00038 namespace Graphics { class View; }; 00039 namespace Graphics { class Texture; }; 00040 } 00041 using namespace Teddy::Graphics; 00042 using namespace Teddy::Maths; 00043 00044 00045 namespace Teddy { 00046 namespace PhysicalComponents { 00047 00048 00049 class Area; 00050 class Layer; 00051 00052 00061 class WindowManager : public EventListener { 00062 public: 00063 WindowManager( View *view ); 00064 virtual ~WindowManager(); 00065 00066 void inputLoop (); // never returns 00067 void mouseKey ( const int button, const int state, const int x, const int y ); 00068 void mouseMotion( const int x, const int y, const int dx, const int dy ); 00069 void insert ( Layer *layer ); 00070 void setFocus ( EventListener *focus ); 00071 void setHold ( bool apply ); 00072 bool getHold () const; 00073 void showCursor (); 00074 void hideCursor (); 00075 void draw (); 00076 void update (); 00077 View *getView (); 00078 00079 protected: 00080 View *view; 00081 EventListener *focus; 00082 Texture *cursor; 00083 SDL_Joystick *joystick; 00084 list<Layer*> layers; 00085 list<Area*> focus_stack; 00086 bool show_cursor; 00087 bool hold; 00088 int mouse_b[4]; 00089 IntVector2 hold_pos; 00090 IntVector2 mouse_pos; 00091 }; 00092 00093 00094 }; // namespace PhysicalComponents 00095 }; // namespace Teddy 00096 00097 00098 #endif // TEDDY__PHYSICAL_COMPONENTS__WINDOW_MANAGER_H 00099