Sirikata
libogre/include/sirikata/ogre/ViewportOverlay.hpp
Go to the documentation of this file.
00001 /*  Sirikata libproxyobject -- Ogre Graphics Plugin
00002  *  ViewportOverlay.hpp
00003  *
00004  *  Copyright (c) 2009, Adam Jean Simmons
00005  *  All rights reserved.
00006  *
00007  *  Redistribution and use in source and binary forms, with or without
00008  *  modification, are permitted provided that the following conditions are
00009  *  met:
00010  *  * Redistributions of source code must retain the above copyright
00011  *    notice, this list of conditions and the following disclaimer.
00012  *  * Redistributions in binary form must reproduce the above copyright
00013  *    notice, this list of conditions and the following disclaimer in
00014  *    the documentation and/or other materials provided with the
00015  *    distribution.
00016  *  * Neither the name of Sirikata nor the names of its contributors may
00017  *    be used to endorse or promote products derived from this software
00018  *    without specific prior written permission.
00019  *
00020  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
00021  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
00022  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
00023  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
00024  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00025  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00026  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00027  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00028  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00029  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00030  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00031  */
00032 
00033 #ifndef _SIRIKATA_GRAPHICS_VIEWPORT_OVERLAY_HPP_
00034 #define _SIRIKATA_GRAPHICS_VIEWPORT_OVERLAY_HPP_
00035 
00036 #include <sirikata/ogre/OgreHeaders.hpp>
00037 #include "Ogre.h"
00038 #include "OgrePanelOverlayElement.h"
00039 #include <sirikata/ogre/OverlayPosition.hpp>
00040 
00041 namespace Sirikata {
00042 namespace Graphics {
00043 
00047 enum Tier
00048 {
00049     TIER_BACK = 0,
00050     TIER_MIDDLE,
00051     TIER_FRONT
00052 };
00053 
00054 class SIRIKATA_OGRE_EXPORT ViewportOverlay : public Ogre::RenderTargetListener
00055 {
00056 public:
00057     Ogre::Viewport* viewport;
00058     Ogre::Overlay* overlay;
00059     Ogre::PanelOverlayElement* panel;
00060     OverlayPosition position;
00061     bool isVisible;
00062     int width, height;
00063     Tier tier;
00064     Ogre::uchar zOrder;
00065 
00066     ViewportOverlay(const Ogre::String& name, Ogre::Viewport* viewport, int width, int height, const OverlayPosition& pos,
00067         const Ogre::String& matName, Ogre::uchar zOrder, Tier tier);
00068     ~ViewportOverlay();
00069 
00070     void setViewport(Ogre::Viewport* newViewport);
00071 
00072     void move(int deltaX, int deltaY);
00073     void setPosition(const OverlayPosition& position);
00074     void resetPosition();
00075 
00076     void resize(int width, int height);
00077 
00078     void hide();
00079     void show();
00080 
00081     void setTier(Tier tier);
00082     void setZOrder(Ogre::uchar zOrder);
00083 
00084     Tier getTier();
00085     Ogre::uchar getZOrder();
00086 
00087     int getX();
00088     int getY();
00089 
00090     int getRelativeX(int absX);
00091     int getRelativeY(int absY);
00092 
00093     bool isWithinBounds(int absX, int absY);
00094 
00095     bool operator>(const ViewportOverlay& rhs) const;
00096     bool operator<(const ViewportOverlay& rhs) const;
00097 
00098     void preRenderTargetUpdate(const Ogre::RenderTargetEvent& evt);
00099     void postRenderTargetUpdate(const Ogre::RenderTargetEvent& evt);
00100     void preViewportUpdate(const Ogre::RenderTargetViewportEvent& evt);
00101     void postViewportUpdate(const Ogre::RenderTargetViewportEvent& evt);
00102     void viewportAdded(const Ogre::RenderTargetViewportEvent& evt);
00103     void viewportRemoved(const Ogre::RenderTargetViewportEvent& evt);
00104 };
00105 
00106 }
00107 }
00108 
00109 #endif