/************************************************************************ filename: CEGUIMouseCursor.h created: 21/2/2004 author: Paul D Turner purpose: Defines interface for the MouseCursor class *************************************************************************/ /************************************************************************* Crazy Eddie's GUI System (http://www.cegui.org.uk) Copyright (C)2004 - 2005 Paul D Turner (paul@cegui.org.uk) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *************************************************************************/ #ifndef _CEGUIMouseCursor_h_ #define _CEGUIMouseCursor_h_ #include "CEGUIBase.h" #include "CEGUIString.h" #include "CEGUISingleton.h" #include "CEGUIVector.h" #include "CEGUIRect.h" #include "CEGUIEventSet.h" #include "CEGUIInputEvent.h" #if defined(_MSC_VER) # pragma warning(push) # pragma warning(disable : 4275) # pragma warning(disable : 4251) #endif // Start of CEGUI namespace section namespace CEGUI { /*! \brief Enumeration of special values used for mouse cursor settings in Window objects. */ enum MouseCursorImage { BlankMouseCursor = 0, //!< No image should be displayed for the mouse cursor. DefaultMouseCursor = -1 //!< The default mouse cursor image should be displayed. }; /*! \brief Class that allows access to the GUI system mouse cursor. The MouseCursor provides functionality to access the position and imagery of the mouse cursor / pointer */ class CEGUIEXPORT MouseCursor : public EventSet, public Singleton { public: static const String EventNamespace; //!< Namespace for global events /************************************************************************* Event name constants *************************************************************************/ // generated internally by MouseCursor static const String EventImageChanged; //!< The cursor image of the widget has changed. /*! \brief Constructor for MouseCursor objects */ MouseCursor(void); /*! \brief Destructor for MouseCursor objects */ ~MouseCursor(void); /*! \brief Return singleton MouseCursor object \return Singleton MouseCursor object */ static MouseCursor& getSingleton(void); /*! \brief Return pointer to singleton MouseCursor object \return Pointer to singleton MouseCursor object */ static MouseCursor* getSingletonPtr(void); /*! \brief Set the current mouse cursor image \param imageset String object holding the name of the Imageset that contains the desired Image. \param image_name String object holding the name of the desired Image on Imageset \a imageset. \return Nothing. \exception UnknownObjectException thrown if \a imageset is not known, or if \a imageset contains no Image named \a image_name. */ void setImage(const String& imageset, const String& image_name); /*! \brief Set the current mouse cursor image */ void setImage(const Image* image); /*! \brief Get the current mouse cursor image \return The current image used to draw mouse cursor. */ const Image* getImage(void) const {return d_cursorImage;} /*! \brief Makes the cursor draw itself \return Nothing */ void draw(void) const; /*! \brief Set the current mouse cursor position \param position Point object describing the new location for the mouse. This will be clipped to within the renderer screen area. */ void setPosition(const Point& position); /*! \brief Offset the mouse cursor position by the deltas specified in \a offset. \param offset Point object which describes the amount to move the cursor in each axis. \return Nothing. */ void offsetPosition(const Point& offset); /*! \brief Set the area that the mouse cursor is constrained to. \param area Pointer to a Rect object that describes the area of the display that the mouse is allowed to occupy. The given area will be clipped to the current Renderer screen area - it is never possible for the mouse to leave this area. If this parameter is NULL, the constraint is set to the size of the current Renderer screen area. \return Nothing. */ void setConstraintArea(const Rect* area); /*! \brief Hides the mouse cursor. \return Nothing. */ void hide(void) {d_visible = false;} /*! \brief Shows the mouse cursor. \return Nothing. */ void show(void) {d_visible = true;} /*! \brief return whether the mouse cursor is visible. \return true if the mouse cursor is visible, false if the mouse cursor is hidden. */ bool isVisible(void) const {return d_visible;} /*! \brief Return the current mouse cursor position as a pixel offset from the top-left corner of the display. \return Point object describing the mouse cursor position in screen pixels. */ Point getPosition(void) const {return Point(d_position.d_x, d_position.d_y);} /*! \brief return the current constraint area of the mouse cursor. \return Rect object describing the active area that the mouse cursor is constrained to. */ Rect getConstraintArea(void) const {return d_constraints;} /*! \brief Return the current mouse cursor position as display resolution independant values. \return Point object describing the current mouse cursor position as resolution independant values that range from 0.0f to 1.0f, where 0.0f represents the left-most and top-most positions, and 1.0f represents the right-most and bottom-most positions. */ Point getDisplayIndependantPosition(void) const; protected: /************************************************************************* New event handlers *************************************************************************/ /*! \brief event triggered internally when image of mouse cursor changes */ virtual void onImageChanged(MouseCursorEventArgs& e); /************************************************************************* Implementation Functions *************************************************************************/ /*! \brief Add mouse cursor specific events */ void addMouseCursorEvents(void); private: /************************************************************************* Implementation Methods *************************************************************************/ /*! \brief Checks the mouse cursor position is within the current 'constrain' Rect and adjusts as required. */ void constrainPosition(void); /************************************************************************* Implementation Data *************************************************************************/ const Image* d_cursorImage; //!< Image that is currently set as the mouse cursor. Vector3 d_position; //!< Current location of the cursor bool d_visible; //!< true if the cursor will be drawn, else false. Rect d_constraints; //!< Specifies the area (in screen pixels) that the mouse can move around in. }; } // End of CEGUI namespace section #if defined(_MSC_VER) # pragma warning(pop) #endif #endif // end of guard _CEGUIMouseCursor_h_