[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] |