Revision: 542
http://python-ogre.svn.sourceforge.net/python-ogre/?rev=542&view=rev
Author: andy_miller
Date: 2008-01-14 22:47:21 -0800 (Mon, 14 Jan 2008)
Log Message:
-----------
Updated QuickGUI source to rev 313 - fixes display issues on ATI cards
Revision Links:
--------------
http://python-ogre.svn.sourceforge.net/python-ogre/?rev=313&view=rev
Modified Paths:
--------------
trunk/python-ogre/ThirdParty/quickgui/QuickGUIConfigScriptParser.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUIConfigScriptParser.h
trunk/python-ogre/ThirdParty/quickgui/QuickGUIList.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUIPrerequisites.h
trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuad.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuad.h
trunk/python-ogre/ThirdParty/quickgui/QuickGUISkinSet.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUISkinSet.h
trunk/python-ogre/ThirdParty/quickgui/QuickGUIText.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUIVertexBuffer.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUIVertexBuffer.h
trunk/python-ogre/ThirdParty/quickgui/QuickGUIWidget.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUIWidget.h
Added Paths:
-----------
trunk/python-ogre/ThirdParty/quickgui/QuickGUIRoot.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUIRoot.h
trunk/python-ogre/ThirdParty/quickgui/QuickGUITree.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUITree.h
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIConfigScriptParser.cpp
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIConfigScriptParser.cpp 2008-01-13 04:20:34 UTC (rev 541)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIConfigScriptParser.cpp 2008-01-15 06:47:21 UTC (rev 542)
@@ -2,16 +2,15 @@
//Original author: John Judnich
#include "QuickGUIPrecompiledHeaders.h"
-#include "OgreScriptLoader.h"
-
-#include "OgreResourceGroupManager.h"
#include "OgreException.h"
#include "OgreLogManager.h"
+#include "OgrePrerequisites.h"
+#include "OgreResourceGroupManager.h"
+#include "OgreScriptLoader.h"
+#include "QuickGUIConfigScriptParser.h"
#include "QuickGUISkinSetManager.h"
-#include "QuickGUIConfigScriptParser.h"
-
using namespace Ogre;
namespace QuickGUI
{
@@ -267,6 +266,7 @@
+
ConfigNode::ConfigNode(ConfigNode *parent, const String &name)
{
ConfigNode::name = name;
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIConfigScriptParser.h
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIConfigScriptParser.h 2008-01-13 04:20:34 UTC (rev 541)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIConfigScriptParser.h 2008-01-15 06:47:21 UTC (rev 542)
@@ -4,9 +4,6 @@
#ifndef __QuickGuiSkinSetParser_h_
#define __QuickGuiSkinSetParser_h_
-#include "OgreScriptLoader.h"
-#include "OgrePrerequisites.h"
-
#include "QuickGUIPrerequisites.h"
#include "QuickGUIExportDLL.h"
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIList.cpp
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIList.cpp 2008-01-13 04:20:34 UTC (rev 541)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIList.cpp 2008-01-15 06:47:21 UTC (rev 542)
@@ -111,9 +111,10 @@
delete mScrollPane;
mScrollPane = NULL;
- mGUIManager->destroyWidget(mRightScrollBar);
+ removeAndDestroyChild(mRightScrollBar);
mRightScrollBar = NULL;
- mGUIManager->destroyWidget(mBottomScrollBar);
+
+ removeAndDestroyChild(mBottomScrollBar);
mBottomScrollBar = NULL;
}
}
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.cpp
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.cpp 2008-01-13 04:20:34 UTC (rev 541)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.cpp 2008-01-15 06:47:21 UTC (rev 542)
@@ -67,6 +67,10 @@
if( w == NULL )
return;
+ // If widget already queued for destruction, return.
+ if(std::find(mFreeList.begin(),mFreeList.end(),w) != mFreeList.end())
+ return;
+
mFreeList.push_back(w);
}
@@ -186,6 +190,10 @@
return;
}
+ // If widget already queued for destruction, return.
+ if(std::find(mFreeList.begin(),mFreeList.end(),w) != mFreeList.end())
+ return;
+
if(w->getParentWidget() != NULL)
w->getParentWidget()->removeAndDestroyChild(w);
else
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIPrerequisites.h
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIPrerequisites.h 2008-01-13 04:20:34 UTC (rev 541)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIPrerequisites.h 2008-01-15 06:47:21 UTC (rev 542)
@@ -7,7 +7,7 @@
namespace QuickGUI
{
////////////DRAWING/////////////
- #define VERTICES_PER_QUAD 4
+ #define VERTICES_PER_QUAD 6
class Rect;
class Point;
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuad.cpp
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuad.cpp 2008-01-13 04:20:34 UTC (rev 541)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuad.cpp 2008-01-15 06:47:21 UTC (rev 542)
@@ -32,15 +32,10 @@
mClippingWidget(NULL),
mInheritClippingWidget(true),
mInheritQuadLayer(true),
- mShowWithOwner(true),
- mDirectXUsed(false)
+ mShowWithOwner(true)
{
mRenderSystem = Ogre::Root::getSingleton().getRenderSystem();
- // Determine if dirext X renderer used.
- if(mRenderSystem->getName().find("Direct") != Ogre::String::npos)
- mDirectXUsed = true;
-
_updateVertexColor();
}
@@ -168,6 +163,8 @@
Ogre::Real top = -((absDimensions.y * 2) - 1);
Ogre::Real bottom = top - (absDimensions.height * 2);
+ /* Reference code, back when the index buffer was used, and there were 4 vertices per quad.
+
// TRIANGLE 1
mVertices[0].pos = Ogre::Vector3(left, bottom, 0.f); // left-bottom
mVertices[1].pos = Ogre::Vector3(right, bottom, 0.f); // right-bottom
@@ -176,9 +173,8 @@
mVertices[2].pos = Ogre::Vector3(right, top, 0.f); // right-top
mVertices[3].pos = Ogre::Vector3(left, top, 0.f); // left-top
+ */
- /* Reference code, back when the index buffer was not used, and there were 6 vertices per quad.
-
// TRIANGLE 1
mVertices[0].pos = Ogre::Vector3(left,bottom,0); // left-bottom
mVertices[1].pos = Ogre::Vector3(right,bottom,0); // right-bottom
@@ -188,8 +184,6 @@
mVertices[3].pos = Ogre::Vector3(right,bottom,0); // right-bottom
mVertices[4].pos = Ogre::Vector3(right,top,0); // right-top
mVertices[5].pos = Ogre::Vector3(left,top,0); // left-top
-
- */
}
void Quad::_notifyAddedToRenderObjectGroup()
@@ -243,6 +237,8 @@
{
const Ogre::Vector4 actualTextureCoords(mTextureCoordinatesViaClipping);
+ /* Reference code, back when the index buffer was used, and there were 4 vertices per quad.
+
// TRIANGLE 1 : bot-left, bot-right, top-left vertices
mVertices[0].uv = Ogre::Vector2(actualTextureCoords.x,actualTextureCoords.w);
mVertices[1].uv = Ogre::Vector2(actualTextureCoords.z,actualTextureCoords.w);
@@ -250,7 +246,7 @@
mVertices[2].uv = Ogre::Vector2(actualTextureCoords.z,actualTextureCoords.y);
mVertices[3].uv = Ogre::Vector2(actualTextureCoords.x,actualTextureCoords.y);
- /* Reference code, back when the index buffer was not used, and there were 6 vertices per quad.
+ */
// TRIANGLE 1 : bot-left, bot-right, top-left vertices
mVertices[0].uv = Ogre::Vector2(actualTextureCoords.x,actualTextureCoords.w);
@@ -260,12 +256,12 @@
mVertices[3].uv = Ogre::Vector2(actualTextureCoords.z,actualTextureCoords.w);
mVertices[4].uv = Ogre::Vector2(actualTextureCoords.z,actualTextureCoords.y);
mVertices[5].uv = Ogre::Vector2(actualTextureCoords.x,actualTextureCoords.y);
-
- */
}
void Quad::_updateVertexColor()
{
+ /* Reference code, back when the index buffer was used, and there were 4 vertices per quad.
+
// TRIANGLE 1
mRenderSystem->convertColourValue(mBottomColor,&( mVertices[0].color ));
mRenderSystem->convertColourValue(mBottomColor,&( mVertices[1].color ));
@@ -273,7 +269,7 @@
mRenderSystem->convertColourValue(mTopColor,&( mVertices[2].color ));
mRenderSystem->convertColourValue(mTopColor,&( mVertices[3].color ));
- /* Reference code, back when the index buffer was not used, and there were 6 vertices per quad.
+ */
// TRIANGLE 1
mRenderSystem->convertColourValue(mBottomColor,&( mVertices[0].color ));
@@ -283,8 +279,6 @@
mRenderSystem->convertColourValue(mBottomColor,&( mVertices[3].color ));
mRenderSystem->convertColourValue(mTopColor,&( mVertices[4].color ));
mRenderSystem->convertColourValue(mTopColor,&( mVertices[5].color ));
-
- */
}
void Quad::addToRenderObjectGroup()
@@ -525,22 +519,8 @@
void Quad::setTextureCoordinates(const Ogre::Vector4& textureCoordinates)
{
- // DirectX interprets UV coords from a different location than OpenGL, so
- // we have to modify the coordinates to get the same results.
-/* if(mDirectXUsed)
- {
- Ogre::Real xVal = 0.5 / mPixelDimensions.width;
- Ogre::Real yVal = 0.5 / mPixelDimensions.height;
+ mTextureCoordinates = textureCoordinates;
- mTextureCoordinates = Ogre::Vector4(
- textureCoordinates.x + xVal,
- textureCoordinates.y + yVal,
- textureCoordinates.z + xVal,
- textureCoordinates.w + yVal);
- }
- else */
- mTextureCoordinates = textureCoordinates;
-
mTextureCoordsChanged = true;
_clip();
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuad.h
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuad.h 2008-01-13 04:20:34 UTC (rev 541)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuad.h 2008-01-15 06:47:21 UTC (rev 542)
@@ -104,7 +104,6 @@
GUIManager* mGUIManager;
QuadContainer* mQuadContainer;
Ogre::RenderSystem* mRenderSystem;
- bool mDirectXUsed;
Layer mLayer;
bool mInheritQuadLayer;
Added: trunk/python-ogre/ThirdParty/quickgui/QuickGUIRoot.cpp
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIRoot.cpp (rev 0)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIRoot.cpp 2008-01-15 06:47:21 UTC (rev 542)
@@ -0,0 +1,77 @@
+#include "QuickGUIPrecompiledHeaders.h"
+
+#include "QuickGUIRoot.h"
+
+template<> QuickGUI::Root* Ogre::Singleton<QuickGUI::Root>::ms_Singleton = 0;
+
+namespace QuickGUI
+{
+ Root::Root() :
+ mGUIManagerCounter(-1)
+ {
+ // Create SkinSetManager
+ new SkinSetManager();
+ }
+
+ Root::~Root()
+ {
+ for(std::map<Ogre::String,GUIManager*>::iterator it = mGUIManagers.begin(); it != mGUIManagers.end(); ++it)
+ delete (*it).second;
+ mGUIManagers.clear();
+
+ // Destroy SkinSetManager
+ delete SkinSetManager::getSingletonPtr();
+ }
+
+ Root* Root::getSingletonPtr(void)
+ {
+ return ms_Singleton;
+ }
+
+ Root& Root::getSingleton(void)
+ {
+ assert( ms_Singleton );
+ return ( *ms_Singleton );
+ }
+
+ GUIManager* Root::createGUIManager(const Ogre::String& name, Ogre::Viewport* v)
+ {
+ // make sure name does not already exist.
+ if(mGUIManagers.find(name) != mGUIManagers.end())
+ throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A GUIManager with name \"" + name + "\" already exists!","Root::createGUIManager");
+
+ GUIManager* newGUIManager = new GUIManager(name,v);
+ mGUIManagers[name] = newGUIManager;
+
+ return newGUIManager;
+ }
+
+ GUIManager* Root::createGUIManager(Ogre::Viewport* v)
+ {
+ ++mGUIManagerCounter;
+ return createGUIManager("GUIManager" + Ogre::StringConverter::toString(mGUIManagerCounter),v);
+ }
+
+ void Root::destroyGUIManager(GUIManager* gm)
+ {
+ if(gm == NULL)
+ return;
+
+ destroyGUIManager(gm->getName());
+ }
+
+ void Root::destroyGUIManager(const Ogre::String& name)
+ {
+ GUIManager* gm = mGUIManagers[name];
+ mGUIManagers.erase(mGUIManagers.find(name));
+ delete gm;
+ }
+
+ GUIManager* Root::getGUIManager(const Ogre::String& name)
+ {
+ if(mGUIManagers.find(name) == mGUIManagers.end())
+ return NULL;
+
+ return mGUIManagers[name];
+ }
+}
Added: trunk/python-ogre/ThirdParty/quickgui/QuickGUIRoot.h
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIRoot.h (rev 0)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIRoot.h 2008-01-15 06:47:21 UTC (rev 542)
@@ -0,0 +1,42 @@
+#ifndef QUICKGUIROOT_H
+#define QUICKGUIROOT_H
+
+#include "QuickGUIExportDLL.h"
+#include "QuickGUIManager.h"
+#include "QuickGUISkinSetManager.h"
+
+#include "OgreException.h"
+#include "OgrePrerequisites.h"
+#include "OgreSingleton.h"
+#include "OgreViewport.h"
+
+#include <map>
+
+namespace QuickGUI
+{
+ class _QuickGUIExport Root :
+ public Ogre::Singleton<Root>
+ {
+ public:
+ Root();
+ ~Root();
+
+ static Root& getSingleton(void);
+ static Root* getSingletonPtr(void);
+
+ GUIManager* createGUIManager(const Ogre::String& name, Ogre::Viewport* v);
+ GUIManager* createGUIManager(Ogre::Viewport* v);
+
+ void destroyGUIManager(GUIManager* gm);
+ void destroyGUIManager(const Ogre::String& name);
+
+ GUIManager* getGUIManager(const Ogre::String& name);
+
+ protected:
+ int mGUIManagerCounter;
+
+ std::map<Ogre::String,GUIManager*> mGUIManagers;
+ };
+}
+
+#endif
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUISkinSet.cpp
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUISkinSet.cpp 2008-01-13 04:20:34 UTC (rev 541)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUISkinSet.cpp 2008-01-15 06:47:21 UTC (rev 542)
@@ -21,6 +21,9 @@
{
_determineExtension(t);
+ mHorizontalTexelOffset = Ogre::Root::getSingleton().getRenderSystem()->getHorizontalTexelOffset();
+ mVerticalTexelOffset = Ogre::Root::getSingleton().getRenderSystem()->getVerticalTexelOffset();
+
// if skinset doesn't exists
if (loadSkin() == false)
{
@@ -81,10 +84,10 @@
Ogre::Vector4 texCoord;
if (dimension)
{
- texCoord.x = Ogre::StringConverter::parseReal(dimension->getValues()[0]);
- texCoord.y = Ogre::StringConverter::parseReal(dimension->getValues()[1]);
- texCoord.z = Ogre::StringConverter::parseReal(dimension->getValues()[2]);
- texCoord.w = Ogre::StringConverter::parseReal(dimension->getValues()[3]);
+ texCoord.x = Ogre::StringConverter::parseReal(dimension->getValues()[0]) + (mHorizontalTexelOffset / mTextureWidth);
+ texCoord.y = Ogre::StringConverter::parseReal(dimension->getValues()[1]) + (mVerticalTexelOffset / mTextureHeight);
+ texCoord.z = Ogre::StringConverter::parseReal(dimension->getValues()[2]) + (mHorizontalTexelOffset / mTextureWidth);
+ texCoord.w = Ogre::StringConverter::parseReal(dimension->getValues()[3]) + (mVerticalTexelOffset / mTextureHeight);
}
//ConfigNode *rotation = skinRootNode->findChild("rotation");
@@ -109,6 +112,11 @@
return false;
}
+ bool SkinSet::overTransparentPixel(const Ogre::String& skinComponent, int xPos, int yPos)
+ {
+ return false;
+ }
+
void SkinSet::saveSkin()
{
ConfigScriptSerializer serializer;
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUISkinSet.h
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUISkinSet.h 2008-01-13 04:20:34 UTC (rev 541)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUISkinSet.h 2008-01-15 06:47:21 UTC (rev 542)
@@ -68,6 +68,10 @@
bool containsImage(Ogre::String textureName);
Ogre::String getImageExtension() const;
+ /*
+ * Retrieve material used for this Skinset.
+ */
+ Ogre::String getMaterialName() { return mMaterialName; }
Ogre::String getSkinName() const;
// Return the name of the skin for this SkinSet
Ogre::String getTextureName() const;
@@ -94,11 +98,17 @@
*/
bool loadSkin();
+ /** Returns true if the relative coordinates are over a transparent pixel, false otherwise.
+ @param
+ skinComponent The name to be embedded Image to query.
+ @param
+ xPos The relative position of the horizontal pixel in the image.
+ @param
+ yPos The relative position of the vertical pixel in the image.
+ */
+ bool overTransparentPixel(const Ogre::String& skinComponent, int xPos, int yPos);
+
/*
- * Retrieve material used for this Skinset.
- */
- Ogre::String getMaterialName() { return mMaterialName; }
- /*
* set material used for this Skinset.
*/
void setMaterialName(const Ogre::String& materialName){ mMaterialName = materialName; }
@@ -121,6 +131,9 @@
Ogre::uint mTextureWidth;
Ogre::uint mTextureHeight;
+ Ogre::Real mHorizontalTexelOffset;
+ Ogre::Real mVerticalTexelOffset;
+
// This map connects individual textures to its UV coordinates, within
// the SkinSet Texture.
std::map<Ogre::String,Ogre::Vector4> mTextureMap;
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIText.cpp
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIText.cpp 2008-01-13 04:20:34 UTC (rev 541)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIText.cpp 2008-01-15 06:47:21 UTC (rev 542)
@@ -549,7 +549,7 @@
void Text::selectCharacters(unsigned int startIndex, unsigned int endIndex)
{
- if( (mCaption.length() == 0) || (startIndex >= mCaption.length()) )
+ if( (mCaption.length() == 0) || (startIndex >= static_cast<unsigned int>(mCharacters.size())) )
return;
mSelectStart = startIndex;
Added: trunk/python-ogre/ThirdParty/quickgui/QuickGUITree.cpp
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUITree.cpp (rev 0)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUITree.cpp 2008-01-15 06:47:21 UTC (rev 542)
@@ -0,0 +1,549 @@
+#include "QuickGUIPrecompiledHeaders.h"
+#include "QuickGUIManager.h"
+#include "QuickGUITree.h"
+
+namespace QuickGUI
+{
+ /** TreeItem Constructor
+ */
+ TreeItem::TreeItem(const std::string &name, const std::string &id, const std::string &skinName, Tree *tree, double iconsize, GUIManager *mGUIManager):
+ _item(NULL), _parent(NULL), _minus(NULL) , _place(true), mSkinName(skinName),
+ _name(name), _id(id), _tree(tree), _next(NULL), _previous(NULL), _visible(true), _thumbtails(NULL), _down(false),
+ _IconSize(iconsize), _guiManager(mGUIManager)
+ {
+ _child.clear();
+ }
+
+ void TreeItem::setItem(MenuLabel *item)
+ {
+ _item = item;
+ //effects
+ _item->addEventHandler(Widget::EVENT_MOUSE_ENTER,&TreeItem::onMouseEntersItem,this);
+ _item->addEventHandler(Widget::EVENT_MOUSE_LEAVE,&TreeItem::onMouseLeavesItem,this);
+ _item->addEventHandler(Widget::EVENT_MOUSE_BUTTON_DOWN,&TreeItem::onMouseButtonDownItem,this);
+ _item->addEventHandler(Widget::EVENT_MOUSE_CLICK_DOUBLE, &TreeItem::onMouseClickDouble, this);
+ }
+ void TreeItem::onMouseEntersItem(const EventArgs& args)
+ {
+ if (_down)
+ return;
+ this->getItem()->setSkinComponent(".tree.button.over");
+ this->getItem()->setSkin(_item->getSkin());
+ }
+ void TreeItem::onMouseLeavesItem(const EventArgs& args)
+ {
+ if (_down)
+ return;
+ this->getItem()->setSkinComponent(".tree.button");
+ this->getItem()->setSkin(_item->getSkin());
+ }
+ void TreeItem::onMouseButtonDownItem(const EventArgs& args)
+ {
+ _down = true;
+ this->getItem()->setSkinComponent(".tree.button.down");
+ this->getItem()->setSkin(_item->getSkin());
+ _tree->onItemPushDown(_id);
+ }
+
+ void TreeItem::onMouseButtonDownItemLeave()
+ {
+ _down = false;
+ this->getItem()->setSkinComponent(".tree.button");
+ this->getItem()->setSkin(_item->getSkin());
+ }
+
+ void TreeItem::onMouseClickDouble(const EventArgs& args)
+ {
+ _place = !_place;
+ if(_place)
+ _tree->open(_id);
+ else
+ _tree->close(_id);
+ }
+
+ void TreeItem::onMouseButtonDown(const EventArgs& args)
+ {
+ _place = !_place;
+
+ if(_place)
+ _tree->open(_id);
+ else
+ _tree->close(_id);
+ }
+
+ TreeItem::~TreeItem()
+ {
+ //delete from parent child's list
+ if (_parent)
+ _parent->removeChild(_id);
+
+ setVisible(false);
+ _tree->removeAndDestroyChild(_thumbtails);
+ _tree->removeAndDestroyChild(_minus);
+ }
+
+ std::vector<TreeItem *> &TreeItem::getChilds()
+ {
+ return _child;
+ }
+
+ void TreeItem::removeChild(const std::string &id)
+ {
+ std::vector<TreeItem *>::iterator itb = _child.begin();
+ for(; itb != _child.end(); ++itb)
+ if ((*itb)->getId() == id)
+ {
+ _child.erase(itb);
+ break;
+ }
+ }
+ QuickGUI::Image *TreeItem::addChild(TreeItem *Item)
+ {
+ _child.push_back(Item);
+ if (!_minus) // set image + -
+ {
+ Sheet *mSheet = _guiManager->getDefaultSheet();
+ _minus = mSheet->createImage();
+ _minus->setSkinComponent(".tree.minus");
+ _minus->setSize(_IconSize, _IconSize);
+ _minus->setInheritClippingWidget(true);
+ _minus->setInheritOpacity(true);
+ _minus->setInheritQuadLayer(true);
+ _minus->addEventHandler(Widget::EVENT_MOUSE_BUTTON_DOWN, &TreeItem::onMouseButtonDown, this);
+ return _minus;
+ }
+ return NULL;
+ }
+
+ void TreeItem::setThumbtails(const std::string &pic)
+ {
+ if (!_thumbtails)
+ {
+ Sheet *mSheet = _guiManager->getDefaultSheet();
+ _thumbtails = mSheet->createImage();
+ }
+ _thumbtails->setMaterial(pic);
+ _thumbtails->setSize(_IconSize, _IconSize);
+ if (_thumbtails->getParentSheet())
+ _thumbtails->getParentSheet()->removeChild(_thumbtails);
+ _tree->addChild(_thumbtails);
+ _thumbtails->setPosition(_item->getXPosition() + (1.5 * _IconSize) / 2, _item->getYPosition() + (_item->getHeight() - _IconSize) / 2);
+ }
+ void TreeItem::setYPosition(double y)
+ {
+ _item->setYPosition(y);
+ if (_minus)
+ _minus->setYPosition(y);
+ if (_thumbtails)
+ _thumbtails->setYPosition(y);
+ }
+
+ void TreeItem::setVisible(bool vis)
+ {
+ _visible = vis;
+ if (_visible)
+ {
+ _item->show();
+ if (_minus)
+ _minus->show();
+ if (_thumbtails)
+ _thumbtails->show();
+ }
+ else
+ {
+ _item->hide();
+ if (_minus)
+ _minus->hide();
+ if (_thumbtails)
+ _thumbtails->hide();
+ }
+ }
+ /** Tree Constructor
+ */
+ Tree::Tree(const std::string &name, QuickGUI::GUIManager *mGUIManager, double padding)
+ : List(name,mGUIManager), _guiManager(mGUIManager), _lastChild(NULL), _iconSize(15), _name(name), _selected(NULL), _padding(padding)
+ {
+ // create the root Item
+ TreeItem *root = new TreeItem("root", "root", "qgui", this, 0, mGUIManager);
+ _lists["root"] = root;
+
+ MenuLabel *item = addMenuLabel();
+ root->setItem(item);
+ item->setXPosition(0);
+ item->setYPosition(- item->getHeight());
+ root->setLag(-_padding / 2);
+ }
+
+ Tree::~Tree()
+ {
+ std::map<std::string, TreeItem *>::iterator itb = _lists.begin();
+ std::map<std::string, TreeItem *>::iterator ite = _lists.end();
+
+ for (; itb != ite; ++itb)
+ delete itb->second;
+ }
+
+ void Tree::deleteChild(TreeItem *me)
+ {
+ // delete from List and destroy all childs
+ std::vector<TreeItem *>::iterator childItr;
+ for (childItr = me->getChilds().begin(); childItr != me->getChilds().end(); ++childItr)
+ {
+ if (!(*childItr)->getChilds().empty())
+ {
+ deleteChild(*childItr);
+ continue;
+ }
+
+ WidgetArray::iterator it = mItems.begin();
+ while(it != mItems.end())
+ {
+ bool deleted = false;
+ if ((*childItr) && (*it) == (*childItr)->getItem())
+ {
+ _lists[(*childItr)->getId()] = NULL;
+ (*childItr)->setParent(NULL);
+ delete (*childItr);
+ //mGUIManager->destroyWidget((*it));
+ it = mItems.erase(it);
+ deleted = true;
+ }
+ if (!deleted && (*it)== me->getItem())
+ {
+ //mGUIManager->destroyWidget((*it));
+ it = mItems.erase(it);
+ deleted = true;
+ }
+ if (!deleted)
+ ++it;
+ }
+ }
+ _lists[me->getId()] = NULL;
+ me->setParent(NULL);
+ delete me;
+ }
+
+ void Tree::deleteItem(const std::string &id)
+ {
+ TreeItem *me = _lists[id];
+ TreeItem *prev;
+ TreeItem *next;
+
+ if (!me || me == _lists["root"])
+ return;
+
+ next = _lists[GetLastChild(id)]->getNext();
+ prev = me->getPrevious();
+
+ if (_lastChild == me)
+ _lastChild = prev;
+
+ if (next)
+ next->setPrevious(prev);
+ if (prev)
+ prev->setNext(next);
+
+ me->getParent()->removeChild(id);
+ deleteChild(me);
+
+ slideDown(prev);
+
+ resize();
+ }
+
+ const std::string Tree::addInList(const std::string &name, const std::string &text, const std::string &parent, const std::string &LoadAfter)
+ {
+ TreeItem *par = _lists[parent];
+
+ if (!par)
+ return "";
+
+ // check for unique id; and create Item menulabel
+ std::string id = createId(name);
+ TreeItem *child = new TreeItem(name, id, mSkinName, this, _iconSize, _guiManager);
+ _lists[id] = child;
+ child->setLag(par->getLag() + 20);
+ child->setParent(par);
+ MenuLabel *item = this->addMenuLabel();
+ item->setText(text);
+ item->setHorizontalAlignment(QuickGUI::Label::HA_LEFT);
+ child->setItem(item);
+
+ // setImage + -
+ Image *img = par->addChild(child);
+ if (img)
+ {
+ if (img->getParentWidget())
+ img->getParentWidget()->removeChild(img);
+ addChild(img);
+ img->setPosition(par->getItem()->getPosition().x, par->getItem()->getPosition().y);
+ img->setSkin(mSkinName, true);
+ img->appearOverWidget(this);
+ img->setPosition(par->getItem()->getXPosition() - (_iconSize / 2), par->getItem()->getYPosition() + (par->getItem()->getHeight() - _iconSize) / 2);
+ }
+
+
+ if ((parent == "root" || _lists["root"]->getId() == parent) && LoadAfter.empty()) // if we to add this item under all other
+ {
+ item->setXPosition(item->getPosition().x + child->getLag());
+ child->setPrevious(_lastChild);
+ if (_lastChild)
+ _lastChild->setNext(child);
+ _lastChild = child;
+ }
+ else if (!LoadAfter.empty())// If we add this item after an other
+ addAfterTreeItem(LoadAfter, child);
+ else // else we add this item at the bootom of parent
+ addAfterTreeItem(GetLastChild(parent), child);
+ if (item->getWidth() == getWidth())
+ item->setWidth(getWidth() - (item->getXPosition() + child->getLag()));
+
+
+ //look if parent is visible
+
+ if (child->getVisible() && !par->getVisible())
+ {
+ child->setVisible(false);
+ return id;
+ }
+
+ //Now we will check if Item is in good place on Y
+ if (!child->getPrevious())
+ return id;
+
+ // try to find the last previous visible item;
+ TreeItem *previousVisible;
+ for (previousVisible = child->getPrevious(); previousVisible && !previousVisible->getVisible(); previousVisible = previousVisible->getPrevious())
+ ;
+ if (previousVisible && previousVisible->getVisible())
+ child->setYPosition(previousVisible->getItem()->getYPosition() + child->getItem()->getHeight());
+ return id;
+ }
+
+ std::string Tree::createId(const std::string& name)
+ {
+ if (_lists.find(name) == _lists.end())
+ return name;
+ std::string id = name + "_0";
+ for (unsigned int i = 1; _lists.find(id) != _lists.end(); ++i)
+ {
+ id = name + "_";
+ std::ostringstream os;
+ os << i;
+ id += os.str();
+ }
+ return id;
+ }
+
+ void Tree::hideTreeItems(const std::string &id)
+ {
+ TreeItem *child = _lists[id];
+
+ if (!child)
+ return;
+
+ std::vector<TreeItem *>::iterator itb = child->getChilds().begin();
+ std::vector<TreeItem *>::iterator ite = child->getChilds().end();
+
+ for (; itb != ite; ++itb)
+ if ((*itb))
+ {
+ if ((*itb)->getNext())
+ {
+ (*itb)->getNext()->setYPosition((*itb)->getItem()->getYPosition());
+ hideTreeItems((*itb)->getId());
+ }
+ (*itb)->setVisible(false);
+
+ if ((*itb)->getName() == "load_intro")
+ std::cout << "fait ?\n";
+
+ if ((itb+1) == ite)
+ slideUp((*itb));
+ }
+ }
+
+ void Tree::showTreeItems(const std::string &id)
+ {
+ TreeItem *child = _lists[id];
+
+ if (!child)
+ return;
+
+ std::vector<TreeItem *>::iterator itb = child->getChilds().begin();
+ std::vector<TreeItem *>::iterator ite = child->getChilds().end();
+
+ for (; itb != ite; ++itb)
+ if ((*itb))
+ {
+ if ((*itb)->getPrevious() && (*itb)->getParent() && !parentIsPlace((*itb)))
+ (*itb)->setYPosition((*itb)->getPrevious()->getItem()->getYPosition());
+ else
+ {
+ if ((*itb)->getPrevious())
+ (*itb)->setYPosition((*itb)->getPrevious()->getItem()->getYPosition() + (*itb)->getPrevious()->getItem()->getHeight());
+
+ (*itb)->setVisible(true);
+ }
+ showTreeItems((*itb)->getId());
+
+ if ((itb+1) == ite)
+ slideDown((*itb));
+ }
+ }
+
+
+ void Tree::slideUp(TreeItem *child)
+ {
+ if (child && child->getNext())
+ {
+ double y = child->getItem()->getYPosition();
+ if (child->getVisible())
+ y += child->getItem()->getHeight();
+ child->getNext()->setYPosition(y);
+ slideUp(child->getNext());
+ }
+ }
+
+ void Tree::slideDown(TreeItem *child)
+ {
+ // try to find the last previous visible item;
+ TreeItem *previousVisible;
+ TreeItem *children;
+ for (previousVisible = child->getPrevious(); previousVisible && !previousVisible->getVisible(); previousVisible = previousVisible->getPrevious())
+ ;
+ if (!previousVisible)
+ previousVisible = _lists["root"];
+
+ for (children = child; children; children = children->getNext())
+ {
+ double y = previousVisible->getItem()->getYPosition();
+ if (children->getVisible())
+ {
+ y += previousVisible->getItem()->getHeight();
+ children->setYPosition(y);
+ previousVisible = children;
+ }
+ }
+ }
+
+ void Tree::addAfterTreeItem(const std::string &id, TreeItem *item)
+ {
+ TreeItem *before = _lists[id];
+
+ if (!before)
+ return;
+
+ if (before->getNext())
+ before->getNext()->setPrevious(item);
+ else
+ _lastChild = item;
+ item->setPrevious(before);
+ item->setNext(before->getNext());
+ before->setNext(item);
+
+ item->getItem()->setXPosition(item->getItem()->getXPosition() + item->getLag());
+ slideDown(item);
+ }
+
+ std::string Tree::GetLastChild(const std::string &id, const std::string &parentId)
+ {
+ TreeItem *child = _lists[id];
+ if (!child)
+ return std::string(id);
+ std::string parent = parentId;
+
+ if (parentId.empty())
+ parent = id;
+
+ while (child->getNext() && hasParent(child->getNext(), parent))
+ child = child->getNext();
+ return child->getId();
+ }
+ bool Tree::hasParent(TreeItem *child, const std::string &id)
+ {
+ TreeItem *par = child->getParent();
+ while (par)
+ {
+ if (par->getId() == id)
+ return true;
+ par = par->getParent();
+ }
+ return false;
+ }
+ bool Tree::parentIsPlace(TreeItem *child)
+ {
+ for (TreeItem *parent = child->getParent(); parent; parent = parent->getParent())
+ if (!parent->getPlace())
+ return false;
+ return true;
+ }
+ void Tree::setThumbtails(const std::string &id, const std::string &pic)
+ {
+ TreeItem *it = _lists[id];
+
+ if (!it)
+ return;
+
+ it->setThumbtails(pic);
+ }
+
+ void Tree::onItemPushDown(const std::string &id)
+ {
+ if (_selected && _selected != _lists[id])
+ _selected->onMouseButtonDownItemLeave();
+ _selected = _lists[id];
+ }
+
+ const std::string Tree::GetSelectedName()
+ {
+ if (_selected)
+ return _selected->getName();
+ return "";
+ }
+ const std::string Tree::GetSelectedID()
+ {
+ if (_selected)
+ return _selected->getId();
+ return "";
+ }
+ void Tree::close(const std::string &id)
+ {
+ TreeItem *item = _lists[id];
+ if (!item || id == "root")
+ return;
+ if (item->getChilds().empty())
+ return;
+
+ item->setPlace(false);
+ hideTreeItems(id);
+ QuickGUI::Image * img = item->getImage();
+ img->setSkinComponent(".tree.plus");
+ img->setSkin(mSkinName, true);
+
+ resize();
+ }
+
+ void Tree::open(const std::string &id)
+ {
+ TreeItem *item = _lists[id];
+ if (!item || id == "root")
+ return;
+ if (item->getChilds().empty())
+ return;
+
+ item->setPlace(true);
+ showTreeItems(id);
+ QuickGUI::Image * img = item->getImage();
+ img->setSkinComponent(".tree.minus");
+ img->setSkin(mSkinName, true);
+ resize();
+ }
+
+ void Tree::resize()
+ {
+ // for resize scrollbar CHANGE IT !!!!!
+ //getScrollPane()->manageWidgets();
+ setSize(getSize());
+ }
+} // namespace
Added: trunk/python-ogre/ThirdParty/quickgui/QuickGUITree.h
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUITree.h (rev 0)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUITree.h 2008-01-15 06:47:21 UTC (rev 542)
@@ -0,0 +1,165 @@
+#ifndef QUICKGUITREE_H
+#define QUICKGUITREE_H
+
+#include "OgreStringConverter.h"
+
+#include "QuickGUIPrerequisites.h"
+#include "QuickGUIBorder.h"
+#include "QuickGUIButton.h"
+#include "QuickGUICheckBox.h"
+#include "QuickGUIComboBox.h"
+#include "QuickGUIConsole.h"
+#include "QuickGUIImage.h"
+#include "QuickGUIPanel.h"
+#include "QuickGUILabelArea.h"
+#include "QuickGUINStateButton.h"
+#include "QuickGUIProgressBar.h"
+#include "QuickGUIScrollPane.h"
+#include "QuickGUIText.h"
+#include "QuickGUITextBox.h"
+#include "QuickGUIHorizontalTrackBar.h"
+#include "QuickGUIVerticalTrackBar.h"
+#include "QuickGUIWidget.h"
+
+#include <iostream>
+#include <vector>
+
+using std::vector;
+using std::string;
+using std::map;
+
+namespace QuickGUI
+{
+ class Tree;
+ class TreeItem;
+
+ /** Represents an Item in the Tree
+ @remarks
+ A Tree Widget can hold a number of TreeItems.
+ */
+ class TreeItem
+ {
+ public:
+ /** Constructor
+ @param
+ name The name to be given to the TreeItem .
+ @param
+ id The id to be given to the TreeItem (must be unique).
+ @param
+ skinName The name of the skin to get graphics from
+ */
+ TreeItem(const string &name,const string &id, const string &skinName, Tree *tree, double iconsize, GUIManager *mGuiManager);
+ ~TreeItem();
+
+ double getLag(){ return _lag; }
+ bool getVisible(){ return _visible; }
+ bool getPlace(){ return _place; }
+ TreeItem *getParent(){ return _parent; }
+ vector<TreeItem *> &getChilds();
+ string &getName(){ return _name;}
+ string &getId(){ return _id;}
+ MenuLabel * getItem() { return _item; }
+ Image * getImage(){ return _minus; }
+ Image * getThumbtails(){ return _thumbtails; }
+ TreeItem *getPrevious(){ return _previous; }
+ TreeItem *getNext(){ return _next; }
+
+
+ void removeChild(const string &name);
+ void setYPosition(double y);
+ void setVisible(bool vis);
+ void setItem(MenuLabel *item);
+ void setPrevious(TreeItem *pre){ _previous = pre; }
+ void setNext(TreeItem * next){ _next = next; }
+ QuickGUI::Image *addChild(TreeItem *Item);
+ void setParent(TreeItem *Item){ _parent = Item; }
+ void setLag(double lag){ _lag = lag; }
+ void setPlace(bool place){ _place = place; }
+ void setThumbtails(const string &pic);
+ void onMouseButtonDownItemLeave();
+ private: //effects
+
+ void onMouseClickDouble(const EventArgs& args);
+ void onMouseButtonDown(const EventArgs& args);
+ void onMouseEntersItem(const EventArgs& args);
+ void onMouseLeavesItem(const EventArgs& args);
+ void onMouseButtonDownItem(const EventArgs& args);
+
+ private:
+ GUIManager * _guiManager;
+ QuickGUI::Image *_minus; // - + button
+ QuickGUI::Image *_thumbtails;
+ TreeItem *_parent;
+ vector<TreeItem *> _child;
+ double _lag;
+ double _IconSize;
+ bool _place;
+ bool _visible;
+ bool _down;
+
+ /* heritage */
+ TreeItem *_next;
+ TreeItem *_previous;
+ Tree *_tree;
+ string mSkinName;
+ string _id;
+ string _name;
+ MenuLabel *_item;
+ };
+
+
+ /** Represents a Tree View Widget
+ */
+
+ class _QuickGUIExport Tree :
+ public List
+ {
+ public:
+ /** Constructor
+ @param
+ name The name to be given to the Tree Widget.
+ @param
+ mGUIManager
+ @param
+ padding ChildTreeItem's left padding inherited from parent TreeItem. Default value 20
+ */
+ Tree(const string &name, QuickGUI::GUIManager *mGUIManager, double padding = 20);
+
+ const string addInList(const string &name, const string &text, const string &parent = "root", const string &LoadAfter = "");
+ void hideTreeItems(const string &name);
+ void showTreeItems(const string &name);
+
+ void deleteItem(const string &name);
+ void addAfterTreeItem(const string &name, TreeItem *item);
+ string GetLastChild(const string &name, const string &parent = "");
+ void setThumbtails(const string &name, const string &pic);
+ void onItemPushDown(const string &name);
+ const string GetSelectedName();
+ const string GetSelectedID();
+ void close(const string &id);
+ void open(const string &id);
+ ~Tree();
+
+ private:
+ bool hasParent(TreeItem *child, const string &name);
+ bool parentIsPlace(TreeItem *child);
+ void slideUp(TreeItem *child);
+ void slideDown(TreeItem *child);
+ void deleteChild(TreeItem *me);
+ string createId(const string& name);
+ void resize();
+
+ private:
+ double _padding;
+ TreeItem *_selected;
+ string _name;
+ string _id;
+ double _iconSize;
+ TreeItem *_lastChild;
+ map<string, TreeItem *> _lists;
+ QuickGUI::GUIManager *_guiManager;
+ };
+}
+
+#endif
+
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIVertexBuffer.cpp
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIVertexBuffer.cpp 2008-01-13 04:20:34 UTC (rev 541)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIVertexBuffer.cpp 2008-01-15 06:47:21 UTC (rev 542)
@@ -16,7 +16,6 @@
mRenderSystem = Ogre::Root::getSingleton().getRenderSystem();
mTextureManager = Ogre::TextureManager::getSingletonPtr();
_createVertexBuffer();
- _createIndexBuffer();
// Initialise blending modes to be used. We use these every frame, so we'll set them up now to save time later.
mColorBlendMode.blendType = Ogre::LBT_COLOUR;
@@ -37,7 +36,6 @@
VertexBuffer::~VertexBuffer()
{
_destroyVertexBuffer();
- _destroyIndexBuffer();
}
void VertexBuffer::_createVertexBuffer()
@@ -61,23 +59,6 @@
mRenderOperation.useIndexes = false;
}
- void VertexBuffer::_createIndexBuffer()
- {
- mRenderOperation.useIndexes = true;
- mRenderOperation.indexData = new Ogre::IndexData();
- mRenderOperation.indexData->indexStart = 0;
-
- // Create the Index Buffer
- size_t indexCount = (mVertexBufferSize / 4) * 6;
-
- mIndexBuffer = Ogre::HardwareBufferManager::getSingleton( ).createIndexBuffer(
- ((mVertexBufferSize > 655534) ? Ogre::HardwareIndexBuffer::IT_32BIT: Ogre::HardwareIndexBuffer::IT_16BIT),
- indexCount,
- Ogre::HardwareBuffer::HBU_DYNAMIC_WRITE_ONLY_DISCARDABLE,
- false);
- mRenderOperation.indexData->indexBuffer = mIndexBuffer;
- }
-
void VertexBuffer::_declareVertexStructure()
{
Ogre::VertexDeclaration* vd = mRenderOperation.vertexData->vertexDeclaration;
@@ -113,13 +94,6 @@
mVertexBuffer.setNull();
}
- void VertexBuffer::_destroyIndexBuffer()
- {
- delete mRenderOperation.indexData;
- mRenderOperation.indexData = NULL;
- mIndexBuffer.setNull();
- }
-
void VertexBuffer::_initRenderState()
{
// make sure we're rendering to the correct viewport
@@ -145,7 +119,6 @@
// initialise texture settings
mRenderSystem->_setTextureCoordCalculation(0, Ogre::TEXCALC_NONE);
mRenderSystem->_setTextureCoordSet(0, 0);
- //mRenderSystem->_setTextureUnitFiltering(0, Ogre::FO_NONE, Ogre::FO_NONE, Ogre::FO_NONE);
mRenderSystem->_setTextureUnitFiltering(0, Ogre::FO_LINEAR, Ogre::FO_LINEAR, Ogre::FO_POINT);
mRenderSystem->_setTextureAddressingMode(0, mTextureAddressMode);
mRenderSystem->_setTextureMatrix(0, Ogre::Matrix4::IDENTITY);
@@ -173,8 +146,7 @@
*/
unsigned int quadCounter = 0;
- size_t indexOffset = 0;
- mRenderOperation.vertexData->vertexStart = 0;
+ size_t vertexOffset = 0;
for(TextureChangeList::iterator materialChangeIt = mMaterialChangeList.begin(); materialChangeIt != mMaterialChangeList.end(); ++materialChangeIt)
{
@@ -184,9 +156,8 @@
mRenderOperation.vertexData->vertexCount = textureChangeQuadSize * VERTICES_PER_QUAD;
- mRenderOperation.indexData->indexStart = indexOffset;
- mRenderOperation.indexData->indexCount = textureChangeQuadSize * 6;
- indexOffset += mRenderOperation.indexData->indexCount;
+ mRenderOperation.vertexData->vertexStart = vertexOffset;
+ vertexOffset += mRenderOperation.vertexData->vertexCount;
}
// Render
@@ -265,10 +236,8 @@
void VertexBuffer::resizeVertexBuffer( const size_t numberOfVertices )
{
_destroyVertexBuffer();
- _destroyIndexBuffer();
mVertexBufferSize = numberOfVertices;
_createVertexBuffer();
- _createIndexBuffer();
}
void VertexBuffer::setData(QuadList* l)
@@ -356,46 +325,5 @@
}
mVertexBuffer->unlock();
}
-
- // Fill Index Buffer
- {
- // Handles 32bits indexes for really loud UI.
- if (mIndexBuffer->getType() == Ogre::HardwareIndexBuffer::IT_32BIT)
- {
- unsigned int* mIndexBufferPtr = (unsigned int*)mIndexBuffer->lock ( Ogre::HardwareVertexBuffer::HBL_DISCARD );
- unsigned int offset = 0;
- for (size_t k = 0; k < quadCount; k++)
- {
- *mIndexBufferPtr++ = offset + 0;
- *mIndexBufferPtr++ = offset + 1;
- *mIndexBufferPtr++ = offset + 3;
-
- *mIndexBufferPtr++ = offset + 1;
- *mIndexBufferPtr++ = offset + 2;
- *mIndexBufferPtr++ = offset + 3;
-
- offset += 4;
- }
- mIndexBuffer->unlock();
- }
- else
- {
- unsigned short* mIndexBufferPtr = (unsigned short*)mIndexBuffer->lock ( Ogre::HardwareVertexBuffer::HBL_DISCARD );
- unsigned short offset = 0;
- for (size_t k = 0; k < quadCount; k++)
- {
- *mIndexBufferPtr++ = offset + 0;
- *mIndexBufferPtr++ = offset + 1;
- *mIndexBufferPtr++ = offset + 3;
-
- *mIndexBufferPtr++ = offset + 1;
- *mIndexBufferPtr++ = offset + 2;
- *mIndexBufferPtr++ = offset + 3;
-
- offset += 4;
- }
- mIndexBuffer->unlock();
- }
- }
}
}
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIVertexBuffer.h
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIVertexBuffer.h 2008-01-13 04:20:34 UTC (rev 541)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIVertexBuffer.h 2008-01-15 06:47:21 UTC (rev 542)
@@ -63,10 +63,6 @@
Ogre::HardwareVertexBufferSharedPtr mVertexBuffer;
size_t mVertexBufferSize; // the maximum number of vertices the buffer can hold.
size_t mVertexBufferUsage; // the current number of vertices stored in the buffer.
-
-#if VERTICES_PER_QUAD == 4
- Ogre::HardwareIndexBufferSharedPtr mIndexBuffer;
-#endif
// Every RenderSystem::_render(mRenderOperation) constitutes a batch.
Ogre::RenderOperation mRenderOperation;
@@ -83,7 +79,6 @@
// NOTE: we do not need a _clearVertexBuffer function, since we get new, blank memory when locking with HBL_DISCARD.
void _createVertexBuffer();
- void _createIndexBuffer();
/*
* Define the size and data types that form a *Vertex*, to be used in the VertexBuffer.
@@ -92,8 +87,6 @@
void _declareVertexStructure();
void _destroyVertexBuffer();
void _renderVertexBuffer();
-
- void _destroyIndexBuffer();
};
}
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIWidget.cpp
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIWidget.cpp 2008-01-13 04:20:34 UTC (rev 541)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIWidget.cpp 2008-01-15 06:47:21 UTC (rev 542)
@@ -12,6 +12,7 @@
{
Widget::Widget(const Ogre::String& name, GUIManager* gm) :
mCanResize(false),
+ mClippingEnabled(true),
mClippingWidget(0),
mDragXOnly(false),
mDragYOnly(false),
@@ -440,6 +441,11 @@
mGUIManager->setActiveWidget(this);
}
+ Rect Widget::getActualDimensions()
+ {
+ return Rect(getActualPosition(),getActualSize());
+ }
+
Ogre::Real Widget::getActualOpacity()
{
if((mParentWidget == NULL) || (!mInheritOpacity))
@@ -453,6 +459,16 @@
return getScreenPosition() + getScrollOffset();
}
+ Size Widget::getActualSize()
+ {
+ if( (mParentWidget == NULL) || !mClippingEnabled )
+ return mSize;
+
+ Rect r = getDimensions().getIntersection(Rect(mParentWidget->getActualPosition(),mParentWidget->getActualSize()));
+
+ return Size(r.width,r.height);
+ }
+
WidgetArray* Widget::getChildWidgetList()
{
return &mChildWidgets;
@@ -494,6 +510,11 @@
return NULL;
}
+ bool Widget::getClippingEnabled()
+ {
+ return mClippingEnabled;
+ }
+
bool Widget::getGainFocusOnClick()
{
return mGainFocusOnClick;
@@ -1020,12 +1041,15 @@
{
if((*it)->getInstanceName() == widgetName)
{
- WidgetEventArgs args((*it));
- fireEvent(EVENT_CHILD_REMOVED,args);
+ Widget* w = (*it);
(*it)->setQuadContainer(NULL);
(*it)->setParent(NULL);
mChildWidgets.erase(it);
+
+ WidgetEventArgs args(w);
+ fireEvent(EVENT_CHILD_REMOVED,args);
+
return;
}
}
@@ -1048,7 +1072,7 @@
void Widget::removeAndDestroyChild(Widget* w)
{
- if((w == NULL) || (mGUIManager == NULL) || (std::find(mChildWidgets.begin(),mChildWidgets.end(),w) == mChildWidgets.end()))
+ if((w == NULL) || (mGUIManager == NULL) || (w->getParentWidget() != this))
return;
removeChild(w);
@@ -1098,6 +1122,11 @@
}
}
+ void Widget::setClippingEnabled(bool enable)
+ {
+ mClippingEnabled = enable;
+ }
+
void Widget::setDimensions(const Rect& pixelDimensions)
{
setPosition(pixelDimensions.x,pixelDimensions.y);
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIWidget.h
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIWidget.h 2008-01-13 04:20:34 UTC (rev 541)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIWidget.h 2008-01-15 06:47:21 UTC (rev 542)
@@ -165,7 +165,7 @@
}
void addEventHandler(Event EVENT, MemberFunctionSlot* function);
- template<typename T> void addEventListener(Event EVENT, void (T::*function)(const EventArgs&), T* obj)
+ template<typename T> void addEventListener(void (T::*function)(const EventArgs&), T* obj)
{
mEventListeners.push_back(new MemberFunctionPointer<T>(function,obj));
}
@@ -214,6 +214,7 @@
* Sets focus to the widget by firing an activation event.
*/
virtual void focus();
+ Rect getActualDimensions();
Ogre::Real getActualOpacity();
/**
* Returns the position of the widget as it would be drawn on the screen.
@@ -221,9 +222,11 @@
* getScreenPosition() + getScrollOffset().
*/
Point getActualPosition();
+ Size getActualSize();
WidgetArray* getChildWidgetList();
Widget* getChildWidget(const Ogre::String& name);
Widget* getChildWidget(Type t, unsigned int index);
+ bool getClippingEnabled();
Rect getDimensions();
GUIManager* getGUIManager();
int getNumberOfHandlers(Event e);
@@ -362,6 +365,7 @@
void removeAndDestroyChild(Widget* w);
void removeAndDestroyChild(const Ogre::String& widgetName);
bool resizingAllowed();
+ void setClippingEnabled(bool enable);
/**
* Manually set the Dimensions of the widget.
*/
@@ -486,6 +490,7 @@
// PROPERTIES
bool mCanResize;
+ bool mClippingEnabled;
Widget* mClippingWidget;
bool mInheritClippingWidget;
bool mDragXOnly;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|