Crazy Eddies GUI System
0.7.6
|
00001 /*********************************************************************** 00002 filename: CEGUIMouseCursor.h 00003 created: 21/2/2004 00004 author: Paul D Turner 00005 00006 purpose: Defines interface for the MouseCursor class 00007 *************************************************************************/ 00008 /*************************************************************************** 00009 * Copyright (C) 2004 - 2009 Paul D Turner & The CEGUI Development Team 00010 * 00011 * Permission is hereby granted, free of charge, to any person obtaining 00012 * a copy of this software and associated documentation files (the 00013 * "Software"), to deal in the Software without restriction, including 00014 * without limitation the rights to use, copy, modify, merge, publish, 00015 * distribute, sublicense, and/or sell copies of the Software, and to 00016 * permit persons to whom the Software is furnished to do so, subject to 00017 * the following conditions: 00018 * 00019 * The above copyright notice and this permission notice shall be 00020 * included in all copies or substantial portions of the Software. 00021 * 00022 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 00023 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 00024 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 00025 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 00026 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 00027 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 00028 * OTHER DEALINGS IN THE SOFTWARE. 00029 ***************************************************************************/ 00030 #ifndef _CEGUIMouseCursor_h_ 00031 #define _CEGUIMouseCursor_h_ 00032 00033 #include "CEGUIBase.h" 00034 #include "CEGUIString.h" 00035 #include "CEGUISingleton.h" 00036 #include "CEGUIVector.h" 00037 #include "CEGUIRect.h" 00038 #include "CEGUIEventSet.h" 00039 #include "CEGUIInputEvent.h" 00040 #include "CEGUIUDim.h" 00041 00042 00043 #if defined(_MSC_VER) 00044 # pragma warning(push) 00045 # pragma warning(disable : 4275) 00046 # pragma warning(disable : 4251) 00047 #endif 00048 00049 00050 // Start of CEGUI namespace section 00051 namespace CEGUI 00052 { 00057 enum MouseCursorImage 00058 { 00059 BlankMouseCursor = 0, 00060 DefaultMouseCursor = -1 00061 }; 00062 00063 00070 class CEGUIEXPORT MouseCursor : public EventSet, public Singleton<MouseCursor> 00071 { 00072 public: 00073 static const String EventNamespace; 00074 00075 /************************************************************************* 00076 Event name constants 00077 *************************************************************************/ 00078 // generated internally by MouseCursor 00085 static const String EventImageChanged; 00086 00087 00092 MouseCursor(void); 00093 00094 00099 ~MouseCursor(void); 00100 00101 00109 static MouseCursor& getSingleton(void); 00110 00111 00119 static MouseCursor* getSingletonPtr(void); 00120 00121 00137 void setImage(const String& imageset, const String& image_name); 00138 00139 00144 void setImage(const Image* image); 00145 00146 00153 const Image* getImage(void) const {return d_cursorImage;} 00154 00155 00163 void draw(void) const; 00164 00165 00173 void setPosition(const Point& position); 00174 00175 00186 void offsetPosition(const Point& offset); 00187 00188 00201 void setConstraintArea(const Rect* area); 00202 00203 00216 void setUnifiedConstraintArea(const URect* area); 00217 00218 00226 void hide(void) {d_visible = false;} 00227 00228 00236 void show(void) {d_visible = true;} 00237 00238 00249 void setVisible(bool visible) {d_visible = visible;} 00250 00251 00259 bool isVisible(void) const {return d_visible;} 00260 00261 00269 Point getPosition(void) const 00270 { return d_position; } 00271 00272 00280 Rect getConstraintArea(void) const; 00281 00282 00290 const URect& getUnifiedConstraintArea(void) const; 00291 00292 00302 Point getDisplayIndependantPosition(void) const; 00303 00315 void notifyDisplaySizeChanged(const Size& new_size); 00316 00332 void setExplicitRenderSize(const Size& size); 00333 00339 const Size& getExplicitRenderSize() const; 00340 00355 static void setInitialMousePosition(const Point& position); 00356 00362 void invalidate(); 00363 00364 protected: 00365 /************************************************************************* 00366 New event handlers 00367 *************************************************************************/ 00372 virtual void onImageChanged(MouseCursorEventArgs& e); 00373 00374 00375 private: 00376 /************************************************************************* 00377 Implementation Methods 00378 *************************************************************************/ 00383 void constrainPosition(void); 00384 00386 void cacheGeometry() const; 00387 00389 void calculateCustomOffset() const; 00390 00391 /************************************************************************* 00392 Implementation Data 00393 *************************************************************************/ 00394 const Image* d_cursorImage; 00395 Vector2 d_position; 00396 bool d_visible; 00397 URect d_constraints; 00398 00399 GeometryBuffer* d_geometry; 00401 Size d_customSize; 00403 mutable Point d_customOffset; 00405 static bool s_initialPositionSet; 00407 static Point s_initialPosition; 00409 mutable bool d_cachedGeometryValid; 00410 }; 00411 00412 } // End of CEGUI namespace section 00413 00414 #if defined(_MSC_VER) 00415 # pragma warning(pop) 00416 #endif 00417 00418 #endif // end of guard _CEGUIMouseCursor_h_