[Python-ogre-commit] SF.net SVN: python-ogre: [404] trunk/python-ogre
Brought to you by:
andy_miller,
roman_yakovenko
|
From: <and...@us...> - 2007-10-01 15:10:34
|
Revision: 404
http://python-ogre.svn.sourceforge.net/python-ogre/?rev=404&view=rev
Author: andy_miller
Date: 2007-10-01 08:10:25 -0700 (Mon, 01 Oct 2007)
Log Message:
-----------
Updated Quickgui and Demo/Media files/layout
Extra media directory for demos needing video and sound..
Modified Paths:
--------------
trunk/python-ogre/ThirdParty/quickgui/QuickGUIComboBox.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUIHorizontalScrollBar.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUILabel.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUILabel.h
trunk/python-ogre/ThirdParty/quickgui/QuickGUIList.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUIList.h
trunk/python-ogre/ThirdParty/quickgui/QuickGUIListItem.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUIListItem.h
trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.h
trunk/python-ogre/ThirdParty/quickgui/QuickGUIMenuList.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUIMouseCursor.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUIPoint.h
trunk/python-ogre/ThirdParty/quickgui/QuickGUIProgressBar.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUIProgressBar.h
trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuad.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuad.h
trunk/python-ogre/ThirdParty/quickgui/QuickGUIRect.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUIScrollPane.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUIScrollPane.h
trunk/python-ogre/ThirdParty/quickgui/QuickGUIText.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUIText.h
trunk/python-ogre/ThirdParty/quickgui/QuickGUITextBox.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUITitleBar.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUIVerticalScrollBar.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUIWidget.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUIWidget.h
trunk/python-ogre/demos/dshow/resources.cfg
trunk/python-ogre/demos/ffmpeg/resources.cfg
trunk/python-ogre/demos/theora/resources.cfg
Added Paths:
-----------
trunk/python-ogre/ThirdParty/quickgui/QuickGUIBorder.cpp
trunk/python-ogre/ThirdParty/quickgui/QuickGUIBorder.h
trunk/python-ogre/demos/media_extra/
trunk/python-ogre/demos/media_extra/clock.ogg
trunk/python-ogre/demos/media_extra/fish.avi
trunk/python-ogre/demos/media_extra/liberty.mid
trunk/python-ogre/demos/qgui/
trunk/python-ogre/demos/qgui/Demo_QuickGUI01.py
trunk/python-ogre/demos/qgui/SampleFramework.py
trunk/python-ogre/demos/qgui/media/
trunk/python-ogre/demos/qgui/media/fonts/
trunk/python-ogre/demos/qgui/media/fonts/ACMESA.TTF
trunk/python-ogre/demos/qgui/media/fonts/acmesa.fontdef
trunk/python-ogre/demos/qgui/media/materials/
trunk/python-ogre/demos/qgui/media/materials/scripts/
trunk/python-ogre/demos/qgui/media/materials/scripts/Example.material
trunk/python-ogre/demos/qgui/media/materials/textures/
trunk/python-ogre/demos/qgui/media/materials/textures/evening_BK.jpg
trunk/python-ogre/demos/qgui/media/materials/textures/evening_DN.jpg
trunk/python-ogre/demos/qgui/media/materials/textures/evening_FR.jpg
trunk/python-ogre/demos/qgui/media/materials/textures/evening_LF.jpg
trunk/python-ogre/demos/qgui/media/materials/textures/evening_RT.jpg
trunk/python-ogre/demos/qgui/media/materials/textures/evening_UP.jpg
trunk/python-ogre/demos/qgui/media/materials/textures/ogrelogo.png
trunk/python-ogre/demos/qgui/media/materials/textures/r2skin.jpg
trunk/python-ogre/demos/qgui/media/materials/textures/rockwall.tga
trunk/python-ogre/demos/qgui/media/materials/textures/temp.png
trunk/python-ogre/demos/qgui/media/models/
trunk/python-ogre/demos/qgui/media/models/robot.mesh
trunk/python-ogre/demos/qgui/media/models/robot.skeleton
trunk/python-ogre/demos/qgui/media/packs/
trunk/python-ogre/demos/qgui/media/packs/OgreCore.zip
trunk/python-ogre/demos/qgui/media/packs/cubemapsJS.zip
trunk/python-ogre/demos/qgui/media/skins/
trunk/python-ogre/demos/qgui/media/skins/qgui/
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.button.disabled.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.button.down.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.button.over.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.button.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.checked.down.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.checked.over.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.checked.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.combobox.button.down.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.combobox.button.over.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.combobox.button.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.combobox.down.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.combobox.list.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.combobox.over.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.combobox.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.image.border.bottom.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.image.border.right.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.image.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.label.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.list.highlight.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.list.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.menu.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.menulist.button.down.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.menulist.button.over.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.menulist.list.border.bottom.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.menulist.list.border.left.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.menulist.list.border.right.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.menulist.list.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.panel.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.pointer.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.progressbar.bar.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.progressbar.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.scrollbar.horizontal.left.down.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.scrollbar.horizontal.left.over.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.scrollbar.horizontal.left.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.scrollbar.horizontal.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.scrollbar.horizontal.right.down.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.scrollbar.horizontal.right.over.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.scrollbar.horizontal.right.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.scrollbar.horizontal.slider.down.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.scrollbar.horizontal.slider.over.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.scrollbar.horizontal.slider.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.scrollbar.vertical.down.down.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.scrollbar.vertical.down.over.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.scrollbar.vertical.down.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.scrollbar.vertical.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.scrollbar.vertical.slider.down.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.scrollbar.vertical.slider.over.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.scrollbar.vertical.slider.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.scrollbar.vertical.up.down.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.scrollbar.vertical.up.over.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.scrollbar.vertical.up.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.textbox.border.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.textbox.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.textbox.textcursor.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.textcursor.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.trackbar.horizontal.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.trackbar.horizontal.slider.down.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.trackbar.horizontal.slider.over.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.trackbar.horizontal.slider.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.trackbar.vertical.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.trackbar.vertical.slider.down.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.trackbar.vertical.slider.over.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.trackbar.vertical.slider.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.unchecked.down.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.unchecked.over.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.unchecked.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.window.border.bottom.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.window.border.bottomleft.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.window.border.bottomright.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.window.border.left.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.window.border.right.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.window.border.top.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.window.border.topleft.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.window.border.topright.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.window.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.window.titlebar.button.down.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.window.titlebar.button.over.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.window.titlebar.button.png
trunk/python-ogre/demos/qgui/media/skins/qgui/qgui.window.titlebar.png
trunk/python-ogre/demos/qgui/media/skins/qgui_demo/
trunk/python-ogre/demos/qgui/media/skins/qgui_demo/listitem.blue.png
trunk/python-ogre/demos/qgui/media/skins/qgui_demo/listitem.green.png
trunk/python-ogre/demos/qgui/media/skins/qgui_demo/listitem.red.png
trunk/python-ogre/demos/qgui/media/skins/qgui_demo/pointmode.png
trunk/python-ogre/demos/qgui/media/skins/qgui_demo/progressbar.blue.bar.png
trunk/python-ogre/demos/qgui/media/skins/qgui_demo/progressbar.blue.png
trunk/python-ogre/demos/qgui/media/skins/qgui_demo/progressbar.green.bar.png
trunk/python-ogre/demos/qgui/media/skins/qgui_demo/progressbar.green.png
trunk/python-ogre/demos/qgui/media/skins/qgui_demo/progressbar.red.bar.png
trunk/python-ogre/demos/qgui/media/skins/qgui_demo/progressbar.red.png
trunk/python-ogre/demos/qgui/media/skins/qgui_demo/properties.down.png
trunk/python-ogre/demos/qgui/media/skins/qgui_demo/properties.over.png
trunk/python-ogre/demos/qgui/media/skins/qgui_demo/properties.png
trunk/python-ogre/demos/qgui/media/skins/qgui_demo/solidmode.png
trunk/python-ogre/demos/qgui/media/skins/qgui_demo/wireframemode.png
trunk/python-ogre/demos/qgui/plugins.cfg
trunk/python-ogre/demos/qgui/resources.cfg
trunk/python-ogre/demos/theora/ogre.cfg
Removed Paths:
-------------
trunk/python-ogre/demos/gui/
Added: trunk/python-ogre/ThirdParty/quickgui/QuickGUIBorder.cpp
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIBorder.cpp (rev 0)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIBorder.cpp 2007-10-01 15:10:25 UTC (rev 404)
@@ -0,0 +1,93 @@
+#include "QuickGUIBorder.h"
+#include "QuickGUIManager.h"
+
+namespace QuickGUI
+{
+ Border::Border(const Ogre::String& name, Type type, BorderType bType, const Rect& pixelDimensions, Ogre::String texture, QuadContainer* container, Widget* ParentWidget, GUIManager* gm) :
+ Image(name,type,pixelDimensions,texture,container,ParentWidget,gm),
+ mBorderType(bType)
+ {
+ mDraggingEnabled = true;
+ mWidgetToDrag = NULL;
+
+ switch(bType)
+ {
+ case BORDER_TYPE_TOP_LEFT:
+ mHorizontalAnchor = ANCHOR_HORIZONTAL_LEFT;
+ mVerticalAnchor = ANCHOR_VERTICAL_TOP;
+ break;
+ case BORDER_TYPE_TOP_RIGHT:
+ mHorizontalAnchor = ANCHOR_HORIZONTAL_RIGHT;
+ mVerticalAnchor = ANCHOR_VERTICAL_TOP;
+ break;
+ case BORDER_TYPE_BOTTOM_LEFT:
+ mHorizontalAnchor = ANCHOR_HORIZONTAL_LEFT;
+ mVerticalAnchor = ANCHOR_VERTICAL_BOTTOM;
+ break;
+ case BORDER_TYPE_BOTTOM_RIGHT:
+ mHorizontalAnchor = ANCHOR_HORIZONTAL_RIGHT;
+ mVerticalAnchor = ANCHOR_VERTICAL_BOTTOM;
+ break;
+ case BORDER_TYPE_LEFT:
+ mHorizontalAnchor = ANCHOR_HORIZONTAL_LEFT;
+ mVerticalAnchor = ANCHOR_VERTICAL_TOP_BOTTOM;
+ break;
+ case BORDER_TYPE_TOP:
+ mHorizontalAnchor = ANCHOR_HORIZONTAL_LEFT_RIGHT;
+ mVerticalAnchor = ANCHOR_VERTICAL_TOP;
+ break;
+ case BORDER_TYPE_RIGHT:
+ mHorizontalAnchor = ANCHOR_HORIZONTAL_RIGHT;
+ mVerticalAnchor = ANCHOR_VERTICAL_TOP_BOTTOM;
+ break;
+ case BORDER_TYPE_BOTTOM:
+ mHorizontalAnchor = ANCHOR_HORIZONTAL_LEFT_RIGHT;
+ mVerticalAnchor = ANCHOR_VERTICAL_BOTTOM;
+ break;
+ }
+
+ addEventHandler(EVENT_DRAGGED,&Border::onDragged,this);
+ }
+
+ Border::~Border()
+ {
+ }
+
+ void Border::onDragged(const EventArgs& args)
+ {
+ const MouseEventArgs mea = dynamic_cast<const MouseEventArgs&>(args);
+
+ switch(mBorderType)
+ {
+ case BORDER_TYPE_TOP_LEFT:
+ mParentWidget->setScreenPosition(mea.position.x,mea.position.y);
+ mParentWidget->setSize(mParentWidget->getWidth() - mea.moveDelta.x,mParentWidget->getHeight() - mea.moveDelta.y);
+ break;
+ case BORDER_TYPE_TOP_RIGHT:
+ mParentWidget->setScreenYPosition(mea.position.y);
+ mParentWidget->setSize(mParentWidget->getWidth() + mea.moveDelta.x,mParentWidget->getHeight() - mea.moveDelta.y);
+ break;
+ case BORDER_TYPE_BOTTOM_LEFT:
+ mParentWidget->setScreenXPosition(mea.position.x);
+ mParentWidget->setSize(mParentWidget->getWidth() - mea.moveDelta.x,mParentWidget->getHeight() + mea.moveDelta.y);
+ break;
+ case BORDER_TYPE_BOTTOM_RIGHT:
+ mParentWidget->setSize(mParentWidget->getWidth() + mea.moveDelta.x,mParentWidget->getHeight() + mea.moveDelta.y);
+ break;
+ case BORDER_TYPE_LEFT:
+ mParentWidget->setScreenXPosition(mea.position.x);
+ mParentWidget->setWidth(mParentWidget->getWidth() - mea.moveDelta.x);
+ break;
+ case BORDER_TYPE_TOP:
+ mParentWidget->setScreenYPosition(mea.position.y);
+ mParentWidget->setHeight(mParentWidget->getHeight() - mea.moveDelta.y);
+ break;
+ case BORDER_TYPE_RIGHT:
+ mParentWidget->setWidth(mParentWidget->getWidth() + mea.moveDelta.x);
+ break;
+ case BORDER_TYPE_BOTTOM:
+ mParentWidget->setHeight(mParentWidget->getHeight() + mea.moveDelta.y);
+ break;
+ }
+ }
+}
Added: trunk/python-ogre/ThirdParty/quickgui/QuickGUIBorder.h
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIBorder.h (rev 0)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIBorder.h 2007-10-01 15:10:25 UTC (rev 404)
@@ -0,0 +1,57 @@
+#ifndef QUICKGUIBORDER_H
+#define QUICKGUIBORDER_H
+
+#include "QuickGUIImage.h"
+
+namespace QuickGUI
+{
+ /** Represents a simple Imagel.
+ @remarks
+ Pretty much a Label, but without text.
+ @note
+ Images also support Render To Texture.
+ */
+ class _QuickGUIExport Border :
+ public Image
+ {
+ public:
+ enum BorderType
+ {
+ BORDER_TYPE_TOP_LEFT = 0,
+ BORDER_TYPE_TOP_RIGHT ,
+ BORDER_TYPE_BOTTOM_LEFT ,
+ BORDER_TYPE_BOTTOM_RIGHT ,
+ BORDER_TYPE_LEFT ,
+ BORDER_TYPE_TOP ,
+ BORDER_TYPE_RIGHT ,
+ BORDER_TYPE_BOTTOM
+ };
+ public:
+ /** Constructor
+ @param
+ name The name to be given to the widget (must be unique).
+ @param
+ dimensions The x Position, y Position, width and height of the widget.
+ @param
+ positionMode The GuiMetricsMode for the values given for the position. (absolute/relative/pixel)
+ @param
+ sizeMode The GuiMetricsMode for the values given for the size. (absolute/relative/pixel)
+ @param
+ material Ogre material defining the widget image.
+ @param
+ group QuadContainer containing this widget.
+ @param
+ ParentWidget parent widget which created this widget.
+ */
+ Border(const Ogre::String& name, Type type, BorderType bType, const Rect& pixelDimensions, Ogre::String texture, QuadContainer* container, Widget* ParentWidget, GUIManager* gm);
+
+ protected:
+ virtual ~Border();
+
+ BorderType mBorderType;
+
+ void onDragged(const EventArgs& args);
+ };
+}
+
+#endif
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIComboBox.cpp
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIComboBox.cpp 2007-09-30 06:39:33 UTC (rev 403)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIComboBox.cpp 2007-10-01 15:10:25 UTC (rev 404)
@@ -29,6 +29,7 @@
mTextBoundsPixelSize = Size(mSize.width - ButtonSize - 2,mSize.height);
mList = new List(mInstanceName+".List",TYPE_LIST,Rect(0,mSize.height,mSize.width,0),mTextureName + ".list" + mTextureExtension,mQuadContainer,this,mGUIManager);
+ mList->_setClippingWidget(mParentSheet);
mList->setShowWithParent(false);
mList->setOffset(mOffset + 2);
mList->hide();
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIHorizontalScrollBar.cpp
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIHorizontalScrollBar.cpp 2007-09-30 06:39:33 UTC (rev 403)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIHorizontalScrollBar.cpp 2007-10-01 15:10:25 UTC (rev 404)
@@ -6,7 +6,7 @@
HorizontalScrollBar::HorizontalScrollBar(const Ogre::String& name, Type type, const Rect& pixelDimensions, const Ogre::String& texture, QuadContainer* container, Widget* ParentWidget, GUIManager* gm) :
Image(name,type,pixelDimensions,texture,container,ParentWidget,gm),
mMinSliderPosition(0),
- mMaxSliderPosition(1),
+ mMaxSliderPosition(mSize.width),
mMouseDownOnTrack(false),
mSmallChange(0.1),
mLargeChange(0.4),
@@ -54,6 +54,8 @@
mScrollRight2->addEventHandler(EVENT_MOUSE_BUTTON_DOWN,&HorizontalScrollBar::onScrollRightDown,this);
_positionScrollButtons();
+ setButtonLayout(BUTTON_LAYOUT_OPPOSITE);
+ _constrainSlider();
}
HorizontalScrollBar::~HorizontalScrollBar()
@@ -410,22 +412,21 @@
void HorizontalScrollBar::setValue(Ogre::Real value)
{
- value = (value * mSize.width) + mMinSliderPosition;
-
- if( value < 0.0 )
- value = 0.0;
- if( value > (mMaxSliderPosition - mSlider->getWidth()) )
- value = (mMaxSliderPosition - mSlider->getWidth());
-
- mSlider->setXPosition(value);
-
ScrollEventArgs scrollArgs(this);
- Ogre::Real currentValue = getValue();
- if( value < currentValue )
+ if(value < getValue())
scrollArgs.sliderIncreasedPosition = false;
else
scrollArgs.sliderIncreasedPosition = true;
+ Ogre::Real pixelX = (value * (mMaxSliderPosition - mMinSliderPosition)) + mMinSliderPosition;
+
+ if( pixelX < 0.0 )
+ pixelX = 0.0;
+ if( pixelX > (mMaxSliderPosition - mSlider->getWidth()) )
+ pixelX = (mMaxSliderPosition - mSlider->getWidth());
+
+ mSlider->setXPosition(pixelX);
+
_scroll(0,scrollArgs);
}
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUILabel.cpp
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUILabel.cpp 2007-09-30 06:39:33 UTC (rev 403)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUILabel.cpp 2007-10-01 15:10:25 UTC (rev 404)
@@ -6,8 +6,8 @@
Label::Label(const Ogre::String& name, Type type, const Rect& pixelDimensions, Ogre::String texture, QuadContainer* container, Widget* ParentWidget, GUIManager* gm) :
Image(name,type,pixelDimensions,texture,container,ParentWidget,gm),
mDefaultTexture(mTextureName),
- mVerticalAlignment(QGUI_VA_MID),
- mHorizontalAlignment(QGUI_HA_MID),
+ mVerticalAlignment(VA_MID),
+ mHorizontalAlignment(HA_MID),
mTextBoundsPixelOffset(Point::ZERO),
mTextBoundsPixelSize(Size(pixelDimensions.width,pixelDimensions.height)),
mTextColor(Ogre::ColourValue::White),
@@ -30,7 +30,6 @@
void Label::alignText()
{
- //return;
Rect textDimensions = mText->getDimensions();
// 1 pixel buffer used
Ogre::Real horizontalBuffer = 1.0 / mGUIManager->getViewportWidth();
@@ -39,21 +38,21 @@
Rect textBounds = getTextBounds();
// Horizontal alignment
- if( mHorizontalAlignment == QGUI_HA_LEFT )
+ if( mHorizontalAlignment == HA_LEFT )
mText->setPosition(Point(textBounds.x + horizontalBuffer,textDimensions.y));
- else if( mHorizontalAlignment == QGUI_HA_MID )
+ else if( mHorizontalAlignment == HA_MID )
mText->setPosition(Point(textBounds.x + ((textBounds.width / 2.0) - (textDimensions.width / 2.0)),textDimensions.y));
- else if( mHorizontalAlignment == QGUI_HA_RIGHT )
+ else if( mHorizontalAlignment == HA_RIGHT )
mText->setPosition(Point(textBounds.x + textBounds.width - (horizontalBuffer + textDimensions.width),textDimensions.y));
textDimensions = mText->getDimensions();
// Vertical alignment
- if( mVerticalAlignment == QGUI_VA_TOP )
+ if( mVerticalAlignment == VA_TOP )
mText->setPosition(Point(textDimensions.x,textBounds.y + verticalBuffer));
- else if( mVerticalAlignment == QGUI_VA_MID )
+ else if( mVerticalAlignment == VA_MID )
mText->setPosition(Point(textDimensions.x,textBounds.y + ((textBounds.height / 2.0) - (textDimensions.height / 2.0))));
- else if( mVerticalAlignment == QGUI_VA_BOTTOM )
+ else if( mVerticalAlignment == VA_BOTTOM )
mText->setPosition(Point(textDimensions.x,textBounds.y + textBounds.height - (verticalBuffer + textDimensions.height)));
}
@@ -84,7 +83,7 @@
Rect Label::getTextBounds()
{
- return Rect(getScreenPosition() + mTextBoundsPixelOffset,mTextBoundsPixelSize);
+ return Rect(getScreenPosition() + getScrollOffset() + mTextBoundsPixelOffset,mTextBoundsPixelSize);
}
void Label::hide()
@@ -97,13 +96,14 @@
{
Image::onPositionChanged(args);
- mText->refresh();
+ mText->redraw();
alignText();
}
void Label::onSizeChanged(const EventArgs& args)
{
- mText->refresh();
+ Image::onSizeChanged(args);
+ mText->redraw();
alignText();
}
@@ -133,7 +133,7 @@
{
Image::setPosition(pixelX,pixelY);
- mText->refresh();
+ mText->redraw();
alignText();
}
@@ -146,7 +146,7 @@
{
Image::setSize(pixelWidth,pixelHeight);
- mText->refresh();
+ mText->redraw();
alignText();
}
@@ -155,15 +155,15 @@
Label::setSize(pixelSize.width,pixelSize.height);
}
- void Label::setCaption(const Ogre::UTFString& caption)
+ void Label::redraw()
{
- mText->setCaption(caption);
+ Image::redraw();
+ alignText();
}
- void Label::setClippingRect(const Rect& pixelDimensions)
+ void Label::setCaption(const Ogre::UTFString& caption)
{
- Image::setClippingRect(pixelDimensions);
- mText->setClippingRect(pixelDimensions);
+ mText->setCaption(caption);
}
void Label::setDisabledTextColor(const Ogre::ColourValue& c)
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUILabel.h
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUILabel.h 2007-09-30 06:39:33 UTC (rev 403)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUILabel.h 2007-10-01 15:10:25 UTC (rev 404)
@@ -17,6 +17,27 @@
public Image
{
public:
+ /**
+ * Useful for widgets horizontally aligning child widgets, for example a
+ * TitleBar aligning its label widget
+ */
+ enum HorizontalAlignment
+ {
+ HA_LEFT = 0,
+ HA_MID ,
+ HA_RIGHT
+ };
+ /**
+ * Useful for widgets vertically aligning child widgets, for example a
+ * TitleBar aligning its label widget
+ */
+ enum VerticalAlignment
+ {
+ VA_TOP = 0,
+ VA_MID ,
+ VA_BOTTOM
+ };
+ public:
/** Constructor
@param
name The name to be given to the widget (must be unique).
@@ -34,7 +55,7 @@
ParentWidget parent widget which created this widget.
*/
Label(const Ogre::String& name, Type type, const Rect& pixelDimensions, Ogre::String texture, QuadContainer* container, Widget* ParentWidget, GUIManager* gm);
-
+
/**
* Aligns the child Label widget horizontally and vertically
*/
@@ -66,11 +87,14 @@
void onPositionChanged(const EventArgs& args);
void onSizeChanged(const EventArgs& args);
/**
+ * Force updating of the Widget's Quad position on screen.
+ */
+ void redraw();
+ /**
* Convenience method. For advance text use, use getText function to
* get a reference to the Text object.
*/
virtual void setCaption(const Ogre::UTFString& caption);
- virtual void setClippingRect(const Rect& pixelDimensions);
/**
* Sets the color of the text when the widget is disabled.
*/
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIList.cpp
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIList.cpp 2007-09-30 06:39:33 UTC (rev 403)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIList.cpp 2007-10-01 15:10:25 UTC (rev 404)
@@ -9,30 +9,28 @@
mAutoNameListItemCount(0),
mAutoSizeHeight(false),
mNumberOfVisibleItems(5),
- mItemPixelHeight(20)
+ mItemPixelHeight(20),
+ mScrollPane(NULL)
{
// Other widgets call this constructor, and they handle quad/quadcontainer their own way.
if(mWidgetType == TYPE_LIST)
{
mQuad->setLayer(mParentWidget->getQuad()->getLayer());
-
- mScrollPane = new ScrollPane(mInstanceName+".ScrollPane",TYPE_SCROLL_PANE,mQuadContainer,this,mGUIManager);
- mScrollPane->disable();
}
- mInheritClippingRect = false;
-
if(mSize.height <= 0)
mAutoSizeHeight = true;
else
{
mNumberOfVisibleItems = ((mSize.width / mItemPixelHeight) + 1.0);
+ setHeight(mNumberOfVisibleItems * mItemPixelHeight);
+ mScrollPane = new ScrollPane(mInstanceName+".ScrollPane",TYPE_SCROLL_PANE,mQuadContainer,this,mGUIManager);
}
mHighlightTexture = mParentSheet->getDefaultSkin() + ".list.highlight" + mTextureExtension;
// create highlight container for the list
- mHighlightPanel = new Quad(mInstanceName+".HighlightPanel",mGUIManager);
+ mHighlightPanel = new Quad(mInstanceName+".HighlightPanel",this);
mHighlightPanel->setLayer(mQuad->getLayer());
mHighlightPanel->setTexture(mHighlightTexture);
// offset + 3, to be able to show over ListItems with Images and Buttons and Text
@@ -52,6 +50,12 @@
delete mHighlightPanel;
}
+ void List::_setClippingWidget(Widget* w)
+ {
+ mQuad->setClippingWidget(w);
+ mHighlightPanel->setClippingWidget(w);
+ }
+
ListItem* List::addListItem(const Ogre::UTFString& text)
{
Ogre::String name = mInstanceName + ".ListItem" + Ogre::StringConverter::toString(mAutoNameListItemCount);
@@ -114,9 +118,8 @@
void List::hide()
{
+ Image::hide();
mHighlightPanel->setVisible(false);
-
- Image::hide();
}
void List::hideHighlight()
@@ -126,7 +129,7 @@
void List::highlightListItem(ListItem* i)
{
- mHighlightPanel->setPosition(i->getScreenPosition());
+ mHighlightPanel->setPosition(i->getScreenPosition() + i->getScrollOffset());
mHighlightPanel->setSize(i->getSize());
mHighlightPanel->setVisible(true);
}
@@ -174,8 +177,12 @@
void List::setAutoSizeHeight()
{
- mScrollPane->setSize(1,1);
- mScrollPane->disable();
+ if(mScrollPane != NULL)
+ {
+ mScrollPane->setSize(mSize);
+ mScrollPane->disable();
+ }
+
mAutoSizeHeight = true;
setHeight(static_cast<int>(mItems.size()) * mItemPixelHeight);
}
@@ -204,9 +211,28 @@
void List::setNumberOfVisibleItems(unsigned int number)
{
+ mAutoSizeHeight = false;
+
mNumberOfVisibleItems = number;
setHeight(mItemPixelHeight * mNumberOfVisibleItems);
+
+ if(mScrollPane == NULL)
+ {
+ mScrollPane = new ScrollPane(mInstanceName+".ScrollPane",TYPE_SCROLL_PANE,mQuadContainer,this,mGUIManager);
+
+ // Add any already existing children to ScrollPane's list of managed widgets.
+ std::vector<Widget*>::iterator it;
+ for( it = mChildWidgets.begin(); it != mChildWidgets.end(); ++it )
+ {
+ mScrollPane->manageWidget((*it));
+ }
+ }
+ else
+ {
+ mScrollPane->enable();
+ mScrollPane->_determinePaneBounds();
+ }
}
void List::setSize(const Ogre::Real& pixelWidth, const Ogre::Real& pixelHeight)
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIList.h
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIList.h 2007-09-30 06:39:33 UTC (rev 403)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIList.h 2007-10-01 15:10:25 UTC (rev 404)
@@ -40,6 +40,7 @@
*/
List(const Ogre::String& name, Type type, const Rect& pixelDimensions, Ogre::String texture, QuadContainer* container, Widget* ParentWidget, GUIManager* gm);
+ void _setClippingWidget(Widget* w);
/**
* Adds (and creates) a ListItem and adds it to the List.
* Note that a pointer to the created List Item is returned.
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIListItem.cpp
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIListItem.cpp 2007-09-30 06:39:33 UTC (rev 403)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIListItem.cpp 2007-10-01 15:10:25 UTC (rev 404)
@@ -10,14 +10,17 @@
mImage(0),
mButton(0),
mPropogateImageMouseEvents(true),
- mPropogateButtonMouseEvents(true)
+ mPropogateButtonMouseEvents(true),
+ mClippingWidget(ParentWidget)
{
// Other widgets call this constructor, and they handle quad/quadcontainer their own way.
if(mWidgetType == TYPE_LISTITEM)
{
mQuad->setLayer(mParentWidget->getQuad()->getLayer());
+ mQuad->setClippingWidget(mClippingWidget);
mText->setLayer(mQuad->getLayer());
mText->setOffset(mOffset+2);
+ mText->_clipToWidgetDimensions(mClippingWidget);
}
addEventHandler(EVENT_MOUSE_ENTER,&ListItem::onMouseEnters,this);
@@ -39,6 +42,7 @@
mButton = new NStateButton(mInstanceName+".NStateButton",TYPE_BUTTON,pixelDimensions,mQuadContainer,this,mGUIManager);
mButton->getQuad()->setLayer(mQuad->getLayer());
+ mButton->getQuad()->setClippingWidget(mClippingWidget);
if(mPropogateButtonMouseEvents)
{
@@ -61,6 +65,7 @@
mImage = new Image(mInstanceName+".Image",TYPE_IMAGE,pixelDimensions,texture,mQuadContainer,this,mGUIManager);
mImage->getQuad()->setLayer(mQuad->getLayer());
+ mImage->getQuad()->setClippingWidget(mClippingWidget);
if(mPropogateImageMouseEvents)
{
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIListItem.h
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIListItem.h 2007-09-30 06:39:33 UTC (rev 403)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIListItem.h 2007-10-01 15:10:25 UTC (rev 404)
@@ -97,6 +97,8 @@
protected:
virtual ~ListItem();
+ Widget* mClippingWidget;
+
Image* mImage;
NStateButton* mButton;
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.cpp
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.cpp 2007-09-30 06:39:33 UTC (rev 403)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.cpp 2007-10-01 15:10:25 UTC (rev 404)
@@ -12,7 +12,8 @@
mQueueID(Ogre::RENDER_QUEUE_OVERLAY),
mMouseCursor(0),
mSceneManager(0),
- mDraggingWidget(false)
+ mDraggingWidget(false),
+ mDebugString("")
{
mWidgetNames.clear();
@@ -217,6 +218,11 @@
return mActiveSheet;
}
+ Ogre::String GUIManager::getDebugString()
+ {
+ return mDebugString;
+ }
+
Sheet* GUIManager::getDefaultSheet()
{
return mDefaultSheet;
@@ -590,6 +596,11 @@
mActiveWidget->fireEvent(Widget::EVENT_GAIN_FOCUS,args);
}
+ void GUIManager::setDebugString(const Ogre::String s)
+ {
+ mDebugString = s;
+ }
+
void GUIManager::setRenderQueueID(Ogre::uint8 id)
{
mQueueID = id;
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.h
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.h 2007-09-30 06:39:33 UTC (rev 403)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.h 2007-10-01 15:10:25 UTC (rev 404)
@@ -85,6 +85,7 @@
* Returns the sheet currently being used, whether shown or hidden.
*/
Sheet* getActiveSheet();
+ Ogre::String getDebugString();
/**
* Returns the default sheet, automatically created with the GUI manager.
*/
@@ -163,6 +164,7 @@
* Activates the widget w, and deactivates the previously active widget. (if exists)
*/
void setActiveWidget(Widget* w);
+ void setDebugString(const Ogre::String s);
/*
* Sets the Render Queue Group to render on. By default, this is RENDER_QUEUE_OVERLAY.
*/
@@ -226,6 +228,8 @@
std::list<Sheet*> mSheets;
int mAutoNameSheetCounter;
+ Ogre::String mDebugString;
+
// list of widgets to delete on next frame.
std::vector<Widget*> mFreeList;
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIMenuList.cpp
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIMenuList.cpp 2007-09-30 06:39:33 UTC (rev 403)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIMenuList.cpp 2007-10-01 15:10:25 UTC (rev 404)
@@ -23,6 +23,7 @@
// create list
mList = new List(mInstanceName+".List",TYPE_LIST,Rect(0,mSize.height,mSize.width,0),mTextureName + ".list" + mTextureExtension,mQuadContainer,this,mGUIManager);
+ mList->_setClippingWidget(mParentSheet);
mList->setShowWithParent(false);
mList->hide();
mList->addEventHandler(EVENT_CHILD_ADDED,&MenuList::addDefaultListItemHandler,this);
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIMouseCursor.cpp
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIMouseCursor.cpp 2007-09-30 06:39:33 UTC (rev 403)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIMouseCursor.cpp 2007-10-01 15:10:25 UTC (rev 404)
@@ -73,8 +73,10 @@
// even if its within bounds.
else
{
- if(mVisible) show();
- else hide();
+ if(mVisible)
+ show();
+ else
+ hide();
}
// Perform the actual moving of the mouse quad
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIPoint.h
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIPoint.h 2007-09-30 06:39:33 UTC (rev 403)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIPoint.h 2007-10-01 15:10:25 UTC (rev 404)
@@ -53,6 +53,16 @@
return Point(x + p.x,y + p.y);
}
+ inline Point operator + ( const Size& s ) const
+ {
+ return Point(x + s.width,y + s.height);
+ }
+
+ inline Point operator += ( const Size& s ) const
+ {
+ return Point(x + s.width,y + s.height);
+ }
+
inline Point operator - ( const Point& p ) const
{
return Point(x - p.x,y - p.y);
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIProgressBar.cpp
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIProgressBar.cpp 2007-09-30 06:39:33 UTC (rev 403)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIProgressBar.cpp 2007-10-01 15:10:25 UTC (rev 404)
@@ -40,7 +40,7 @@
Ogre::TU_STATIC);
}
- mBarPanel = new Quad(mInstanceName+".BarPanel",mGUIManager);
+ mBarPanel = new Quad(mInstanceName+".BarPanel",this);
mBarPanel->setPosition(getScreenPosition());
mBarPanel->setSize(mSize);
mBarPanel->setOffset(mOffset+1);
@@ -238,10 +238,16 @@
mBarPanel->setSize(mSize);
}
+ void ProgressBar::redraw()
+ {
+ Image::redraw();
+ mBarPanel->setPosition(mQuad->getPosition());
+ }
+
void ProgressBar::setClippingRect(const Rect& r)
{
- Image::setClippingRect(r);
- mBarPanel->setClippingRect(r);
+// Image::setClippingRect(r);
+// mBarPanel->setClippingRect(r);
}
void ProgressBar::setFillDirection(FillDirection d)
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIProgressBar.h
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIProgressBar.h 2007-09-30 06:39:33 UTC (rev 403)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIProgressBar.h 2007-10-01 15:10:25 UTC (rev 404)
@@ -77,6 +77,10 @@
void onProgressChanged(const WidgetEventArgs& e);
void onPositionChanged(const EventArgs& args);
void onSizeChanged(const EventArgs& args);
+ /**
+ * Force updating of the Widget's Quad position on screen.
+ */
+ void redraw();
void setClippingRect(const Rect& r);
void setFillDirection(FillDirection d);
/**
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuad.cpp
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuad.cpp 2007-09-30 06:39:33 UTC (rev 403)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuad.cpp 2007-10-01 15:10:25 UTC (rev 404)
@@ -6,8 +6,43 @@
namespace QuickGUI
{
+ Quad::Quad(const Ogre::String& id, Widget* owner) :
+ mID(id),
+ mOwner(owner),
+ mGUIManager(owner->getGUIManager()),
+ mQuadContainer(NULL),
+ mLayer(LAYER_CHILD),
+ mColorChanged(false),
+ mDimensionsChanged(false),
+ mTextureChanged(false),
+ mTextureCoordsChanged(false),
+ mOffsetChanged(false),
+ mAddedToRenderGroup(false),
+ mTextureName(""),
+ mOffset(0),
+ mPixelDimensions(Rect::ZERO),
+ mTextureCoordinates(Ogre::Vector4(0,0,1,1)),
+ mVisible(true),
+ mTopColor(Ogre::ColourValue::White),
+ mBottomColor(Ogre::ColourValue::White)
+ {
+ mRenderSystem = Ogre::Root::getSingleton().getRenderSystem();
+ mVertices.resize(6);
+ _updateVertexColor();
+
+ if(mOwner->getParentPanel() != NULL)
+ mClippingWidget = mOwner->getParentPanel();
+ else if(mOwner->getParentWindow() != NULL)
+ mClippingWidget = mOwner->getParentWindow();
+ else if(mOwner->getParentSheet() != NULL)
+ mClippingWidget = mOwner->getParentSheet();
+ else
+ mClippingWidget = mOwner;
+ }
+
Quad::Quad(const Ogre::String& id, GUIManager* gm) :
mID(id),
+ mOwner(NULL),
mGUIManager(gm),
mQuadContainer(NULL),
mLayer(LAYER_CHILD),
@@ -24,8 +59,9 @@
mVisible(true),
mTopColor(Ogre::ColourValue::White),
mBottomColor(Ogre::ColourValue::White),
- mHiddenViaClipping(false),
- mClippingRect(Rect(0,0,gm->getViewportWidth(),gm->getViewportHeight()))
+ mClippingWidget(NULL),
+ mDimensionsViaClipping(mPixelDimensions),
+ mTextureCoordinatesViaClipping(mTextureCoordinates)
{
mRenderSystem = Ogre::Root::getSingleton().getRenderSystem();
mVertices.resize(6);
@@ -40,23 +76,36 @@
void Quad::_clip()
{
- if(insideRect(mClippingRect))
+ if(mClippingWidget == NULL)
{
mDimensionsViaClipping = mPixelDimensions;
_computeVertices();
+ mTextureCoordinatesViaClipping = mTextureCoordinates;
+ _updateTextureCoords();
+ _notifyQuadContainerNeedsUpdate();
+ return;
+ }
+ Rect clippingRect = getClippingRect();
+
+ if(mPixelDimensions.inside(clippingRect))
+ {
+ mDimensionsViaClipping = mPixelDimensions;
+ _computeVertices();
+
mTextureCoordinatesViaClipping = mTextureCoordinates;
_updateTextureCoords();
- if(mHiddenViaClipping)
- {
- setVisible(true);
- mHiddenViaClipping = false;
- }
+ if(mOwner->isVisible())
+ mVisible = true;
+ else
+ mVisible = false;
+
+ _notifyQuadContainerNeedsUpdate();
}
- else if(intersectsRect(mClippingRect))
+ else if(mPixelDimensions.intersectsRect(clippingRect))
{
- mDimensionsViaClipping = getRectIntersection(mClippingRect);
+ mDimensionsViaClipping = mPixelDimensions.getIntersection(clippingRect);
_computeVertices();
// calculate distance between top/bottom and left/right of the UV coords.
@@ -70,11 +119,12 @@
_updateTextureCoords();
- if(mHiddenViaClipping)
- {
- setVisible(true);
- mHiddenViaClipping = false;
- }
+ if(mOwner->isVisible())
+ mVisible = true;
+ else
+ mVisible = false;
+
+ _notifyQuadContainerNeedsUpdate();
}
else // Quad is outside clipping region.
{
@@ -84,11 +134,8 @@
mTextureCoordinatesViaClipping = mTextureCoordinates;
_updateTextureCoords();
- if(mVisible)
- {
- mHiddenViaClipping = true;
- setVisible(false);
- }
+ mVisible = false;
+ _notifyQuadContainerNeedsUpdate();
}
}
@@ -137,6 +184,7 @@
mColorChanged = false;
mDimensionsChanged = false;
mTextureChanged = false;
+ mTextureCoordsChanged = false;
mOffsetChanged = false;
}
@@ -228,64 +276,39 @@
mAddedToRenderGroup = true;
}
- bool Quad::dimensionsChanged()
+ void Quad::setClippingWidget(Widget* w)
{
- return mDimensionsChanged;
+ mClippingWidget = w;
}
- Rect Quad::getDimensions()
+ bool Quad::dimensionsChanged()
{
- return mPixelDimensions;
+ return mDimensionsChanged;
}
- Ogre::String Quad::getID()
+ Rect Quad::getClippingRect()
{
- return mID;
+ return Rect(mClippingWidget->getScreenPosition() + mClippingWidget->getScrollOffset(), mClippingWidget->getSize());
}
- Quad::Layer Quad::getLayer()
+ Widget* Quad::getClippingWidget()
{
- return mLayer;
+ return mClippingWidget;
}
- Rect Quad::getRectIntersection(const Rect& r)
+ Rect Quad::getDimensions()
{
- Rect retVal = Rect::ZERO;
-
- if(intersectsRect(r))
- {
- retVal.x = std::max(mPixelDimensions.x,r.x);
- retVal.y = std::max(mPixelDimensions.y,r.y);
- retVal.width = std::min(mPixelDimensions.x + mPixelDimensions.width, r.x + r.width) - retVal.x;
- retVal.height = std::min(mPixelDimensions.y + mPixelDimensions.height, r.y + r.height) - retVal.y;
- }
-
- return retVal;
+ return mPixelDimensions;
}
- bool Quad::insideRect(const Rect& r)
+ Ogre::String Quad::getID()
{
- if( (mPixelDimensions.x >= r.x) &&
- (mPixelDimensions.y >= r.y) &&
- ((mPixelDimensions.x + mPixelDimensions.width) <= (r.x + r.width)) &&
- ((mPixelDimensions.y + mPixelDimensions.height) <= (r.y + r.height)) )
- return true;
-
- return false;
+ return mID;
}
- bool Quad::intersectsRect(const Rect& r)
+ Quad::Layer Quad::getLayer()
{
- // if our left side is greater than r's right side, or our right side is less than r's left side, intersection is not possible.
- if( (mPixelDimensions.x > (r.x + r.width)) || ((mPixelDimensions.x + mPixelDimensions.width) < r.x) )
- return false;
-
- // if our top is greater than r's bottom, or our bottom is less than r's top, intersection is not possible.
- if( (mPixelDimensions.y > (r.y + r.height)) || ((mPixelDimensions.y + mPixelDimensions.height) < r.y) )
- return false;
-
- // If the above conditions are not met, than there must be overlap between our dimensions and r's dimensions.
- return true;
+ return mLayer;
}
bool Quad::isPointWithinBounds(const Point& pixelPosition)
@@ -349,12 +372,6 @@
mAddedToRenderGroup = false;
}
- void Quad::setClippingRect(const Rect& r)
- {
- mClippingRect = r;
- _clip();
- }
-
void Quad::setColor(const Ogre::ColourValue& color)
{
setColor(color,color);
@@ -378,8 +395,6 @@
mDimensionsChanged = true;
_clip();
-
- _notifyQuadContainerNeedsUpdate();
}
void Quad::setHeight(Ogre::Real pixelHeight)
@@ -389,8 +404,6 @@
mDimensionsChanged = true;
_clip();
-
- _notifyQuadContainerNeedsUpdate();
}
void Quad::setLayer(Layer l)
@@ -419,8 +432,6 @@
mDimensionsChanged = true;
_clip();
-
- _notifyQuadContainerNeedsUpdate();
}
void Quad::setSize(const Size& pixelSize)
@@ -431,8 +442,6 @@
mDimensionsChanged = true;
_clip();
-
- _notifyQuadContainerNeedsUpdate();
}
void Quad::setTexture(const Ogre::String& textureName)
@@ -478,8 +487,6 @@
mTextureCoordsChanged = true;
_clip();
-
- _notifyQuadContainerNeedsUpdate();
}
void Quad::setTextureCoordinates(const Ogre::FloatRect& textureCoordinates)
@@ -491,7 +498,11 @@
{
mVisible = visible;
- _notifyQuadContainerNeedsUpdate();
+ // Only clip when becoming visible
+ if(mVisible)
+ _clip();
+ else
+ _notifyQuadContainerNeedsUpdate();
}
void Quad::setWidth(Ogre::Real pixelWidth)
@@ -501,8 +512,6 @@
mDimensionsChanged = true;
_clip();
-
- _notifyQuadContainerNeedsUpdate();
}
void Quad::setXPosition(Ogre::Real pixelX)
@@ -512,8 +521,6 @@
mDimensionsChanged = true;
_clip();
-
- _notifyQuadContainerNeedsUpdate();
}
void Quad::setYPosition(Ogre::Real pixelY)
@@ -523,8 +530,6 @@
mDimensionsChanged = true;
_clip();
-
- _notifyQuadContainerNeedsUpdate();
}
bool Quad::textureChanged()
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuad.h
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuad.h 2007-09-30 06:39:33 UTC (rev 403)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuad.h 2007-10-01 15:10:25 UTC (rev 404)
@@ -16,6 +16,7 @@
// forward declaration
class QuadContainer;
class GUIManager;
+ class Widget;
class _QuickGUIExport Quad
{
@@ -29,6 +30,7 @@
LAYER_MENU
};
public:
+ Quad(const Ogre::String& id, Widget* owner);
Quad(const Ogre::String& id, GUIManager* gm);
~Quad();
@@ -43,10 +45,11 @@
bool dimensionsChanged();
+ Rect getClippingRect();
+ Widget* getClippingWidget();
Rect getDimensions();
Ogre::String getID();
Layer getLayer();
- Rect getRectIntersection(const Rect& r);
Ogre::String getTextureName();
std::vector<Vertex>* getVertices();
int getNumberOfVertices();
@@ -54,15 +57,13 @@
Point getPosition();
Size getSize();
- bool insideRect(const Rect& r);
- bool intersectsRect(const Rect& r);
bool isPointWithinBounds(const Point& pixelPosition);
void removeFromRenderObjectGroup();
+ void setClippingWidget(Widget* w);
void setColor(const Ogre::ColourValue& color);
void setColor(const Ogre::ColourValue& topColor, const Ogre::ColourValue& botColor);
- void setClippingRect(const Rect& r);
void setDimensions(const Rect& pixelDimensions);
void setHeight(Ogre::Real pixelHeight);
void setLayer(Layer l);
@@ -84,6 +85,7 @@
bool offsetChanged();
protected:
+ Widget* mOwner;
GUIManager* mGUIManager;
QuadContainer* mQuadContainer;
Ogre::RenderSystem* mRenderSystem;
@@ -102,9 +104,8 @@
Ogre::ColourValue mTopColor;
Ogre::ColourValue mBottomColor;
- Rect mClippingRect;
+ Widget* mClippingWidget;
// Store changes made via Clipping.
- bool mHiddenViaClipping;
Rect mDimensionsViaClipping;
Ogre::Vector4 mTextureCoordinatesViaClipping;
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIRect.cpp
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIRect.cpp 2007-09-30 06:39:33 UTC (rev 403)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIRect.cpp 2007-10-01 15:10:25 UTC (rev 404)
@@ -55,11 +55,11 @@
bool Rect::intersectsRect(const Rect& r)
{
// if our left side is greater than r's right side, or our right side is less than r's left side, intersection is not possible.
- if( (x > (r.x + r.width)) || ((x + width) < r.x) )
+ if( (x >= (r.x + r.width)) || ((x + width) <= r.x) )
return false;
// if our top is greater than r's bottom, or our bottom is less than r's top, intersection is not possible.
- if( (y > (r.y + r.height)) || ((y + height) < r.y) )
+ if( (y >= (r.y + r.height)) || ((y + height) <= r.y) )
return false;
// If the above conditions are not met, than there must be overlap between our dimensions and r's dimensions.
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIScrollPane.cpp
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIScrollPane.cpp 2007-09-30 06:39:33 UTC (rev 403)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIScrollPane.cpp 2007-10-01 15:10:25 UTC (rev 404)
@@ -4,7 +4,7 @@
namespace QuickGUI
{
ScrollPane::ScrollPane(const Ogre::String& instanceName, Type type, QuadContainer* container, Widget* ParentWidget, GUIManager* gm) :
- Widget(instanceName,type,Rect(0,0,1,1),"",container,ParentWidget,gm),
+ Widget(instanceName,type,Rect(Point(0,0),ParentWidget->getSize()),"",container,ParentWidget,gm),
mScrollBarWidth(20),
mHorizontalButtonLayout(HorizontalScrollBar::BUTTON_LAYOUT_OPPOSITE),
mVerticalButtonLayout(VerticalScrollBar::BUTTON_LAYOUT_OPPOSITE),
@@ -32,21 +32,27 @@
Rect parentPixelSize = mParentWidget->getDimensions();
mTopBar = new HorizontalScrollBar(parentName+".TopScrollBar",TYPE_SCROLLBAR_HORIZONTAL,Rect(mScrollBarWidth,0,parentPixelSize.width - (mScrollBarWidth*2.0),mScrollBarWidth),skinSet+".scrollbar.horizontal.png",container,mParentWidget,gm);
+ mTopBar->setHorizontalAnchor(ANCHOR_HORIZONTAL_LEFT_RIGHT);
mTopBar->setShowWithParent(false);
mTopBar->hide();
mTopBar->addOnScrollEventHandler(&ScrollPane::onHorizontalScroll,this);
mBottomBar = new HorizontalScrollBar(parentName+".BottomScrollBar",TYPE_SCROLLBAR_HORIZONTAL,Rect(mScrollBarWidth,parentPixelSize.height - mScrollBarWidth,parentPixelSize.width - (mScrollBarWidth*2.0),mScrollBarWidth),skinSet+".scrollbar.horizontal.png",container,mParentWidget,gm);
+ mBottomBar->setHorizontalAnchor(ANCHOR_HORIZONTAL_LEFT_RIGHT);
+ mBottomBar->setVerticalAnchor(ANCHOR_VERTICAL_BOTTOM);
mBottomBar->setShowWithParent(false);
mBottomBar->hide();
mBottomBar->addOnScrollEventHandler(&ScrollPane::onHorizontalScroll,this);
mLeftBar = new VerticalScrollBar(parentName+".LeftScrollBar",TYPE_SCROLLBAR_VERTICAL,Rect(0,mScrollBarWidth,mScrollBarWidth,parentPixelSize.height - (mScrollBarWidth*2.0)),skinSet+".scrollbar.vertical.png",container,mParentWidget,gm);
+ mLeftBar->setVerticalAnchor(ANCHOR_VERTICAL_TOP_BOTTOM);
mLeftBar->setShowWithParent(false);
mLeftBar->hide();
mLeftBar->addOnScrollEventHandler(&ScrollPane::onVerticalScroll,this);
mRightBar = new VerticalScrollBar(parentName+".RightScrollBar",TYPE_SCROLLBAR_VERTICAL,Rect(parentPixelSize.width - mScrollBarWidth,mScrollBarWidth,mScrollBarWidth,parentPixelSize.height - (mScrollBarWidth*2.0)),skinSet+".scrollbar.vertical.png",container,mParentWidget,gm);
+ mRightBar->setHorizontalAnchor(ANCHOR_HORIZONTAL_RIGHT);
+ mRightBar->setVerticalAnchor(ANCHOR_VERTICAL_TOP_BOTTOM);
mRightBar->setShowWithParent(false);
mRightBar->hide();
mRightBar->addOnScrollEventHandler(&ScrollPane::onVerticalScroll,this);
@@ -186,20 +192,22 @@
void ScrollPane::_showHScrollBars()
{
+ bool parentVisible = mParentWidget->isVisible();
+
switch(mHorizontalBarLayout)
{
case HORIZONTAL_BAR_LAYOUT_TOP:
- if(!mTopBar->isVisible())
+ if(!mTopBar->isVisible() && parentVisible)
mTopBar->show();
break;
case HORIZONTAL_BAR_LAYOUT_BOTTOM:
- if(!mBottomBar->isVisible())
+ if(!mBottomBar->isVisible() && parentVisible)
mBottomBar->show();
break;
case HORIZONTAL_BAR_LAYOUT_BOTH:
- if(!mTopBar->isVisible())
+ if(!mTopBar->isVisible() && parentVisible)
mTopBar->show();
- if(!mBottomBar->isVisible())
+ if(!mBottomBar->isVisible() && parentVisible)
mBottomBar->show();
break;
case HORIZONTAL_BAR_LAYOUT_NONE:
@@ -210,20 +218,22 @@
void ScrollPane::_showVScrollBars()
{
+ bool parentVisible = mParentWidget->isVisible();
+
switch(mVerticalBarLayout)
{
case VERTICAL_BAR_LAYOUT_LEFT:
- if(!mLeftBar->isVisible())
+ if(!mLeftBar->isVisible() && parentVisible)
mLeftBar->show();
break;
case VERTICAL_BAR_LAYOUT_RIGHT:
- if(!mRightBar->isVisible())
+ if(!mRightBar->isVisible() && parentVisible)
mRightBar->show();
break;
case VERTICAL_BAR_LAYOUT_BOTH:
- if(!mLeftBar->isVisible())
+ if(!mLeftBar->isVisible() && parentVisible)
mLeftBar->show();
- if(!mRightBar->isVisible())
+ if(!mRightBar->isVisible() && parentVisible)
mRightBar->show();
break;
case VERTICAL_BAR_LAYOUT_NONE:
@@ -319,23 +329,23 @@
return mVerticalButtonLayout;
}
- void ScrollPane::onChildAddedToParent(const EventArgs& args)
+ void ScrollPane::manageWidget(Widget* w)
{
- Widget* w = dynamic_cast<const WidgetEventArgs&>(args).widget;
-
if((w->getWidgetType() == TYPE_TITLEBAR) || (w->getWidgetType() == TYPE_MENU))
return;
- w->setClippingRect(mParentWidget->getDimensions());
+ w->addEventHandler(EVENT_MOUSE_BUTTON_DOWN,&ScrollPane::onChildClicked,this);
- if(w->getWidgetType() == TYPE_TEXTBOX)
- w->addEventHandler(EVENT_GAIN_FOCUS,&ScrollPane::onChildTextBoxGainedFocus,this);
-
mManagedWidgets.push_back(w);
_determinePaneBounds();
}
+ void ScrollPane::onChildAddedToParent(const EventArgs& args)
+ {
+ manageWidget(dynamic_cast<const WidgetEventArgs&>(args).widget);
+ }
+
void ScrollPane::onChildRemovedFromParent(const EventArgs& args)
{
Widget* w = dynamic_cast<const WidgetEventArgs&>(args).widget;
@@ -354,18 +364,13 @@
_determinePaneBounds();
}
- void ScrollPane::onChildTextBoxGainedFocus(const EventArgs& args)
+ void ScrollPane::onChildClicked(const EventArgs& args)
{
+ scrollIntoView(dynamic_cast<const WidgetEventArgs&>(args).widget);
}
void ScrollPane::onParentPositionChanged(const EventArgs& args)
{
- if(!mEnabled)
- return;
-
- std::vector<Widget*>::iterator it;
- for( it = mManagedWidgets.begin(); it != mManagedWidgets.end(); ++it )
- (*it)->setClippingRect(mParentWidget->getDimensions());
}
void ScrollPane::onParentSizeChanged(const EventArgs& args)
@@ -389,16 +394,14 @@
mTopBar->_setValue(mBottomBar->getValue());
// Move Scroll Pane
- Ogre::Real topValue = mTopBar->getValue();
- Ogre::Real botValue = mBottomBar->getValue();
- setXPosition(-(topValue) * mSize.width);
+ setXPosition(-(mTopBar->getValue()) * mSize.width);
+ // Get parent's on-screen dimensions.
+ Rect parentDimensions(mParentWidget->getScreenPosition() + mParentWidget->getScrollOffset(),mParentWidget->getSize());
+
std::vector<Widget*>::iterator it;
for( it = mManagedWidgets.begin(); it != mManagedWidgets.end(); ++it )
{
- // In the event of scroll panes inside scroll panes, moving a scroll pane will move the inner scroll panes.
- // In this case, we need to update the clipping rect.
- (*it)->setClippingRect(mParentWidget->getDimensions());
(*it)->_setScrollXOffset(mPosition.x);
}
}
@@ -426,12 +429,12 @@
// Move Scroll Pane
setYPosition(-(mLeftBar->getValue()) * mSize.height);
+ // Get parent's on-screen dimensions.
+ Rect parentDimensions(mParentWidget->getScreenPosition() + mParentWidget->getScrollOffset(),mParentWidget->getSize());
+
std::vector<Widget*>::iterator it;
for( it = mManagedWidgets.begin(); it != mManagedWidgets.end(); ++it )
{
- // In the event of scroll panes inside scroll panes, moving a scroll pane will move the inner scroll panes.
- // In this case, we need to update the clipping rect.
- (*it)->setClippingRect(mParentWidget->getDimensions());
(*it)->_setScrollYOffset(mPosition.y);
}
}
@@ -452,43 +455,36 @@
void ScrollPane::scrollIntoView(Widget* w)
{
- if((mParentWidget->getWidgetType() == TYPE_LIST) && dynamic_cast<List*>(mParentWidget)->getAutoSizeHeight())
- return;
-
Rect wDimensions(w->getScreenPosition(),w->getSize());
if(!wDimensions.inside(Rect(getScreenPosition(),mSize)))
return;
- Point screenPos = getScreenPosition();
- Ogre::Real leftX = ((wDimensions.x - screenPos.x) / mSize.width);
- Ogre::Real rightX = (((wDimensions.x + wDimensions.width) - screenPos.x) / mSize.width);
+ Point parentPosition = mParentWidget->getPosition();
+ Size parentSize = mParentWidget->getSize();
+ Point parentScreenPos = mParentWidget->getScreenPosition() + mParentWidget->getScrollOffset();
+ Point widgetPosition = w->getPosition();
+ Size widgetSize = w->getSize();
+ Point widgetScreenPos = w->getScreenPosition() + w->getScrollOffset();
+
// see if we will be scrolling left, right, or not at all
- Ogre::Real hSliderValue = mTopBar->getValue();
- if( leftX < hSliderValue )
+ if( widgetScreenPos.x < parentScreenPos.x )
{
- // Only need to set value of one, callbacks will sync the other scrollbar.
- mTopBar->setValue(leftX);
+ mTopBar->setValue(widgetPosition.x / mSize.width);
}
- else if( rightX > (hSliderValue + mTopBar->getSliderWidth()) )
+ else if( (widgetScreenPos.x + wDimensions.width) > (parentScreenPos.x + parentSize.width) )
{
- // Only need to set value of one, callbacks will sync the other scrollbar.
- mTopBar->setValue(rightX * (1 - mTopBar->getSliderWidth()));
+ mTopBar->setValue((widgetPosition.x + wDimensions.width) / mSize.width);
}
- Ogre::Real topY = ((wDimensions.y - screenPos.y) / mSize.height);
- Ogre::Real botY = (((wDimensions.y + wDimensions.height) - screenPos.y) / mSize.height);
// see if we will be scrolling up, down, or not at all
- Ogre::Real vSliderValue = mLeftBar->getValue();
- if( topY < vSliderValue )
+ if( widgetScreenPos.y < parentScreenPos.y )
{
- // Only need to set value of one, callbacks will sync the other scrollbar.
- mLeftBar->setValue(topY);
+ mLeftBar->setValue((parentPosition.y - widgetPosition.y) / mSize.height);
}
- else if( botY > (vSliderValue + mLeftBar->getSliderHeight()) )
+ else if( (widgetScreenPos.y + wDimensions.height) > (parentScreenPos.y + parentSize.height) )
{
- // Only need to set value of one, callbacks will sync the other scrollbar.
- mLeftBar->setValue(botY - mLeftBar->getSliderHeight());
+ mLeftBar->setValue((widgetPosition.y + wDimensions.height) / mSize.height);
}
}
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIScrollPane.h
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIScrollPane.h 2007-09-30 06:39:33 UTC (rev 403)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIScrollPane.h 2007-10-01 15:10:25 UTC (rev 404)
@@ -54,6 +54,8 @@
ScrollPane(const Ogre::String& instanceName, Type type, QuadContainer* container, Widget* ParentWidget, GUIManager* gm);
~ScrollPane();
+ // When widgets become managed/unmanaged, the pane may grow or shrink.
+ void _determinePaneBounds();
/**
* Disable Widget, making it unresponsive to events.
* NOTE: Sheets cannot be disabled.
@@ -72,6 +74,8 @@
HorizontalScrollBar* getTopScrollBar();
VerticalScrollBar::ButtonLayout getVerticalButtonLayout();
+ void manageWidget(Widget* w);
+
/**
* Scrolls the Pane so that the given widget is in view.
*/
@@ -98,7 +102,7 @@
void onChildAddedToParent(const EventArgs& args);
void onChildRemovedFromParent(const EventArgs& args);
- void onChildTextBoxGainedFocus(const EventArgs& args);
+ void onChildClicked(const EventArgs& args);
void onParentSizeChanged(const EventArgs& args);
void onParentPositionChanged(const EventArgs& args);
void onHorizontalScroll(const EventArgs& args);
@@ -110,8 +114,6 @@
void _syncBarWithParentDimensions();
std::vector<Widget*> mManagedWidgets;
- // When widgets become managed/unmanaged, the pane may grow or shrink.
- void _determinePaneBounds();
// Inherited functions that need to have their access level changed from public.
protected:
Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIText.cpp
===================================================================
--- trunk/python-ogre/ThirdParty/quickgui/QuickGUIText.cpp 2007-09-30 06:39:33 UTC (rev 403)
+++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIText.cpp 2007-10-01 15:10:25 UTC (rev 404)
@@ -19,15 +19,23 @@
mSelectEnd(-1),
mLineSpacing(1.0)
{
- mClippingRect = mOwner->getClippingRect();
mOffset = owner->getOffset() + 1;
mGUIManager = owner->getGUIManag...
[truncated message content] |