00001 /* 00002 ----------------------------------------------------------------------------- 00003 This source file is part of OGRE 00004 (Object-oriented Graphics Rendering Engine) 00005 For the latest info, see http://www.ogre3d.org/ 00006 00007 Copyright (c) 2000-2006 Torus Knot Software Ltd 00008 Also see acknowledgements in Readme.html 00009 00010 This program is free software; you can redistribute it and/or modify it under 00011 the terms of the GNU Lesser General Public License as published by the Free Software 00012 Foundation; either version 2 of the License, or (at your option) any later 00013 version. 00014 00015 This program is distributed in the hope that it will be useful, but WITHOUT 00016 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 00017 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. 00018 00019 You should have received a copy of the GNU Lesser General Public License along with 00020 this program; if not, write to the Free Software Foundation, Inc., 59 Temple 00021 Place - Suite 330, Boston, MA 02111-1307, USA, or go to 00022 http://www.gnu.org/copyleft/lesser.txt. 00023 00024 You may alternatively use this source under the terms of a specific version of 00025 the OGRE Unrestricted License provided you have obtained such a license from 00026 Torus Knot Software Ltd. 00027 ----------------------------------------------------------------------------- 00028 */ 00029 00030 #ifndef __BorderPanelOverlayElement_H__ 00031 #define __BorderPanelOverlayElement_H__ 00032 00033 #include "OgrePanelOverlayElement.h" 00034 00035 namespace Ogre { 00036 00037 class BorderRenderable; 00038 00052 class _OgreExport BorderPanelOverlayElement : public PanelOverlayElement 00053 { 00054 friend class BorderRenderable; 00055 public: 00057 BorderPanelOverlayElement(const String& name); 00058 virtual ~BorderPanelOverlayElement(); 00059 00060 virtual void initialise(void); 00061 00062 const String& getTypeName(void) const; 00074 void setBorderSize(Real size); 00075 00087 void setBorderSize(Real sides, Real topAndBottom); 00088 00102 void setBorderSize(Real left, Real right, Real top, Real bottom); 00103 00105 Real getLeftBorderSize(void) const; 00107 Real getRightBorderSize(void) const; 00109 Real getTopBorderSize(void) const; 00111 Real getBottomBorderSize(void) const; 00112 00123 void setLeftBorderUV(Real u1, Real v1, Real u2, Real v2); 00127 void setRightBorderUV(Real u1, Real v1, Real u2, Real v2); 00131 void setTopBorderUV(Real u1, Real v1, Real u2, Real v2); 00135 void setBottomBorderUV(Real u1, Real v1, Real u2, Real v2); 00139 void setTopLeftBorderUV(Real u1, Real v1, Real u2, Real v2); 00143 void setTopRightBorderUV(Real u1, Real v1, Real u2, Real v2); 00147 void setBottomLeftBorderUV(Real u1, Real v1, Real u2, Real v2); 00151 void setBottomRightBorderUV(Real u1, Real v1, Real u2, Real v2); 00152 00153 String getLeftBorderUVString() const; 00154 String getRightBorderUVString() const; 00155 String getTopBorderUVString() const; 00156 String getBottomBorderUVString() const; 00157 String getTopLeftBorderUVString() const; 00158 String getTopRightBorderUVString() const; 00159 String getBottomLeftBorderUVString() const; 00160 String getBottomRightBorderUVString() const; 00161 00162 00163 00164 00166 void setBorderMaterialName(const String& name); 00168 const String& getBorderMaterialName(void) const; 00169 00171 void _updateRenderQueue(RenderQueue* queue); 00172 00174 void setMetricsMode(GuiMetricsMode gmm); 00175 00177 void _update(void); 00178 00179 00181 class _OgrePrivate CmdBorderSize : public ParamCommand 00182 { 00183 public: 00184 String doGet(const void* target) const; 00185 void doSet(void* target, const String& val); 00186 }; 00188 class _OgrePrivate CmdBorderMaterial : public ParamCommand 00189 { 00190 public: 00191 String doGet(const void* target) const; 00192 void doSet(void* target, const String& val); 00193 }; 00195 class _OgrePrivate CmdBorderLeftUV : public ParamCommand 00196 { 00197 public: 00198 String doGet(const void* target) const; 00199 void doSet(void* target, const String& val); 00200 }; 00202 class _OgrePrivate CmdBorderTopUV : public ParamCommand 00203 { 00204 public: 00205 String doGet(const void* target) const; 00206 void doSet(void* target, const String& val); 00207 }; 00209 class _OgrePrivate CmdBorderRightUV : public ParamCommand 00210 { 00211 public: 00212 String doGet(const void* target) const; 00213 void doSet(void* target, const String& val); 00214 }; 00216 class _OgrePrivate CmdBorderBottomUV : public ParamCommand 00217 { 00218 public: 00219 String doGet(const void* target) const; 00220 void doSet(void* target, const String& val); 00221 }; 00223 class _OgrePrivate CmdBorderTopLeftUV : public ParamCommand 00224 { 00225 public: 00226 String doGet(const void* target) const; 00227 void doSet(void* target, const String& val); 00228 }; 00230 class _OgrePrivate CmdBorderBottomLeftUV : public ParamCommand 00231 { 00232 public: 00233 String doGet(const void* target) const; 00234 void doSet(void* target, const String& val); 00235 }; 00237 class _OgrePrivate CmdBorderBottomRightUV : public ParamCommand 00238 { 00239 public: 00240 String doGet(const void* target) const; 00241 void doSet(void* target, const String& val); 00242 }; 00244 class _OgrePrivate CmdBorderTopRightUV : public ParamCommand 00245 { 00246 public: 00247 String doGet(const void* target) const; 00248 void doSet(void* target, const String& val); 00249 }; 00250 protected: 00251 Real mLeftBorderSize; 00252 Real mRightBorderSize; 00253 Real mTopBorderSize; 00254 Real mBottomBorderSize; 00255 struct CellUV { 00256 Real u1, v1, u2, v2; 00257 }; 00258 CellUV mBorderUV[8]; 00259 00260 ushort mPixelLeftBorderSize; 00261 ushort mPixelRightBorderSize; 00262 ushort mPixelTopBorderSize; 00263 ushort mPixelBottomBorderSize; 00264 00265 String mBorderMaterialName; 00266 MaterialPtr mpBorderMaterial; 00267 00268 // Render operation for the border area 00269 RenderOperation mRenderOp2; 00270 00271 static String msTypeName; 00272 00274 void updatePositionGeometry(void); 00276 void updateTextureGeometry(void); 00278 void addBaseParameters(void); 00279 00280 enum BorderCellIndex { 00281 BCELL_TOP_LEFT = 0, 00282 BCELL_TOP = 1, 00283 BCELL_TOP_RIGHT = 2, 00284 BCELL_LEFT = 3, 00285 BCELL_RIGHT = 4, 00286 BCELL_BOTTOM_LEFT = 5, 00287 BCELL_BOTTOM = 6, 00288 BCELL_BOTTOM_RIGHT = 7 00289 }; 00290 String getCellUVString(BorderCellIndex idx) const; 00291 00292 // Command objects 00293 static CmdBorderSize msCmdBorderSize; 00294 static CmdBorderMaterial msCmdBorderMaterial; 00295 static CmdBorderLeftUV msCmdBorderLeftUV; 00296 static CmdBorderTopUV msCmdBorderTopUV; 00297 static CmdBorderBottomUV msCmdBorderBottomUV; 00298 static CmdBorderRightUV msCmdBorderRightUV; 00299 static CmdBorderTopLeftUV msCmdBorderTopLeftUV; 00300 static CmdBorderBottomLeftUV msCmdBorderBottomLeftUV; 00301 static CmdBorderTopRightUV msCmdBorderTopRightUV; 00302 static CmdBorderBottomRightUV msCmdBorderBottomRightUV; 00303 00304 BorderRenderable* mBorderRenderable; 00305 }; 00306 00312 class _OgreExport BorderRenderable : public Renderable 00313 { 00314 protected: 00315 BorderPanelOverlayElement* mParent; 00316 public: 00318 BorderRenderable(BorderPanelOverlayElement* parent) : mParent(parent) 00319 { 00320 mUseIdentityProjection = true; 00321 mUseIdentityView = true; 00322 } 00323 const MaterialPtr& getMaterial(void) const { return mParent->mpBorderMaterial; } 00324 void getRenderOperation(RenderOperation& op) { op = mParent->mRenderOp2; } 00325 void getWorldTransforms(Matrix4* xform) const { mParent->getWorldTransforms(xform); } 00326 const Quaternion& getWorldOrientation(void) const { return Quaternion::IDENTITY; } 00327 const Vector3& getWorldPosition(void) const { return Vector3::ZERO; } 00328 unsigned short getNumWorldTransforms(void) const { return 1; } 00329 Real getSquaredViewDepth(const Camera* cam) const { return mParent->getSquaredViewDepth(cam); } 00330 const LightList& getLights(void) const 00331 { 00332 // N/A, panels are not lit 00333 static LightList ll; 00334 return ll; 00335 } 00336 bool getPolygonModeOverrideable(void) const 00337 { 00338 return mParent->getPolygonModeOverrideable(); 00339 } 00340 }; 00341 00342 } 00343 00344 #endif
Copyright © 2000-2005 by The OGRE Team
This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.
Last modified Sun Mar 25 13:03:13 2007