From 20a07c86f37e0488950fe8cf0f3e5a4e5ebfe3c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Lucas=20Golini?= Date: Sun, 14 Jan 2018 03:51:08 -0300 Subject: [PATCH] Cache UINode polygon and screen position. Renamed all UI_CTRL_FLAG_* to NODE_FLAG_*. Several minor fixes. --HG-- branch : dev-2.1 --- include/eepp/math/transform.hpp | 1 - include/eepp/ui/uihelper.hpp | 51 +++--- include/eepp/ui/uiitemcontainer.hpp | 2 +- include/eepp/ui/uinode.hpp | 10 +- projects/linux/ee.creator.user | 6 +- .../tools/textureatlastextureregioneditor.cpp | 4 +- src/eepp/ui/uiimage.cpp | 6 +- src/eepp/ui/uilistboxitem.cpp | 16 +- src/eepp/ui/uimessagebox.cpp | 5 +- src/eepp/ui/uinode.cpp | 164 +++++++++++------- src/eepp/ui/uipushbutton.cpp | 4 +- src/eepp/ui/uiselectbutton.cpp | 8 +- src/eepp/ui/uisprite.cpp | 6 +- src/eepp/ui/uitablecell.cpp | 12 +- src/eepp/ui/uitextureregion.cpp | 4 +- src/eepp/ui/uitextview.cpp | 8 +- src/eepp/ui/uitouchdragablewidget.cpp | 10 +- src/eepp/ui/uiwidget.cpp | 2 +- src/eepp/ui/uiwindow.cpp | 55 +++--- 19 files changed, 210 insertions(+), 164 deletions(-) diff --git a/include/eepp/math/transform.hpp b/include/eepp/math/transform.hpp index 80c9790ee..6fc664c9f 100644 --- a/include/eepp/math/transform.hpp +++ b/include/eepp/math/transform.hpp @@ -45,7 +45,6 @@ class EE_API Transform { static const Transform Identity; private: - float mMatrix[16]; }; diff --git a/include/eepp/ui/uihelper.hpp b/include/eepp/ui/uihelper.hpp index b6422e055..def646aa3 100644 --- a/include/eepp/ui/uihelper.hpp +++ b/include/eepp/ui/uihelper.hpp @@ -5,30 +5,33 @@ namespace EE { namespace UI { -enum UI_CONTROL_FLAGS_VALUES { - UI_CTRL_FLAG_CLOSE = (1<<0), - UI_CTRL_FLAG_CLOSE_FO = (1<<1), - UI_CTRL_FLAG_MOUSEOVER = (1<<2), - UI_CTRL_FLAG_HAS_FOCUS = (1<<3), - UI_CTRL_FLAG_SELECTED = (1<<4), - UI_CTRL_FLAG_DISABLE_FADE_OUT = (1<<5), - UI_CTRL_FLAG_MOUSEOVER_ME_OR_CHILD = (1<<6), - UI_CTRL_FLAG_DRAGGING = (1<<7), - UI_CTRL_FLAG_WIDGET = (1<<8), - UI_CTRL_FLAG_SKIN_OWNER = (1<<9), - UI_CTRL_FLAG_TOUCH_DRAGGING = (1<<10), - UI_CTRL_FLAG_DISABLED_BY_MODAL_WINDOW = (1<<11), - UI_CTRL_FLAG_SELECTING = (1<<12), - UI_CTRL_FLAG_ROTATED = (1<<13), - UI_CTRL_FLAG_SCALED = (1<<14), - UI_CTRL_FLAG_OWNED_BY_WINDOW = (1<<15), - UI_CTRL_FLAG_DRAWABLE_OWNER = (1<<16), - UI_CTRL_FLAG_REVERSE_DRAW = (1<<17), - UI_CTRL_FLAG_FRAME_BUFFER = (1<<18), - UI_CTRL_FLAG_NEEDS_REDRAW = (1<<19), - UI_CTRL_FLAG_DIRTY_POLY = (1<<20), - UI_CTRL_FLAG_WINDOW = (1<<21), - UI_CTRL_FLAG_FREE_USE = (1<<22) +enum NODE_FLAGS_VALUES { + NODE_FLAG_CLOSE = (1<<0), + NODE_FLAG_CLOSE_DELAYED = (1<<1), + NODE_FLAG_MOUSEOVER = (1<<2), + NODE_FLAG_HAS_FOCUS = (1<<3), + NODE_FLAG_SELECTED = (1<<4), + NODE_FLAG_DISABLE_DELAYED = (1<<5), + NODE_FLAG_MOUSEOVER_ME_OR_CHILD = (1<<6), + NODE_FLAG_DRAGGING = (1<<7), + NODE_FLAG_WIDGET = (1<<8), + NODE_FLAG_SKIN_OWNER = (1<<9), + NODE_FLAG_TOUCH_DRAGGING = (1<<10), + NODE_FLAG_DISABLED_BY_MODAL_WINDOW = (1<<11), + NODE_FLAG_SELECTING = (1<<12), + NODE_FLAG_ROTATED = (1<<13), + NODE_FLAG_SCALED = (1<<14), + NODE_FLAG_OWNED_BY_WINDOW = (1<<15), + NODE_FLAG_DRAWABLE_OWNER = (1<<16), + NODE_FLAG_REVERSE_DRAW = (1<<17), + NODE_FLAG_FRAME_BUFFER = (1<<18), + NODE_FLAG_NEEDS_REDRAW = (1<<19), + NODE_FLAG_DIRTY_POLY = (1<<20), + NODE_FLAG_WINDOW = (1<<21), + NODE_FLAG_POSITION_DIRTY = (1<<22), + NODE_FLAG_TRANFORM_DIRTY = (1<<23), + NODE_FLAG_TRANFORM_INVERT_DIRTY = (1<<24), + NODE_FLAG_FREE_USE = (1<<25) }; #define UI_HALIGN_LEFT TEXT_ALIGN_LEFT diff --git a/include/eepp/ui/uiitemcontainer.hpp b/include/eepp/ui/uiitemcontainer.hpp index 9211c6cd0..0b0935dd5 100644 --- a/include/eepp/ui/uiitemcontainer.hpp +++ b/include/eepp/ui/uiitemcontainer.hpp @@ -63,7 +63,7 @@ UINode * UIItemContainer::overFind( const Vector2f& Point ) { updateQuad(); if ( mPoly.pointInside( Point ) ) { - writeCtrlFlag( UI_CTRL_FLAG_MOUSEOVER_ME_OR_CHILD, 1 ); + writeCtrlFlag( NODE_FLAG_MOUSEOVER_ME_OR_CHILD, 1 ); for ( Uint32 i = tParent->mVisibleFirst; i <= tParent->mVisibleLast; i++ ) { if ( NULL != tParent->mItems[i] ) { diff --git a/include/eepp/ui/uinode.hpp b/include/eepp/ui/uinode.hpp index 131cb2c26..6926c8bc5 100644 --- a/include/eepp/ui/uinode.hpp +++ b/include/eepp/ui/uinode.hpp @@ -207,7 +207,7 @@ class EE_API UINode { Polygon2f& getPolygon(); - const Vector2f& getPolygonCenter() const; + Vector2f getPolygonCenter(); void setSkinState( const Uint32& State ); @@ -383,7 +383,7 @@ class EE_API UINode { BlendMode mBlend; Uint16 mNumCallBacks; - Polygon2f mPoly; + mutable Polygon2f mPoly; Vector2f mCenter; UIEventsMap mEvents; @@ -516,8 +516,6 @@ class EE_API UINode { virtual void updateScreenPos(); - void updateChildsScreenPos(); - void writeCtrlFlag( const Uint32& Flag, const Uint32& Val ); void writeFlag( const Uint32& Flag, const Uint32& Val ); @@ -561,6 +559,10 @@ class EE_API UINode { UIWindow * getParentWindow(); void updateOriginPoint(); + + void setDirty(); + + void setChildsDirty(); }; }} diff --git a/projects/linux/ee.creator.user b/projects/linux/ee.creator.user index d98955601..633e21be2 100644 --- a/projects/linux/ee.creator.user +++ b/projects/linux/ee.creator.user @@ -1,10 +1,10 @@ - + EnvironmentId - {b6114084-39c2-4cd0-b9e2-d8803dc6b446} + {d43f4693-30c1-436c-b1d1-498aab2c2f8c} ProjectExplorer.Project.ActiveTarget @@ -63,7 +63,7 @@ Desktop Desktop - {388e5431-b31b-42b3-b9ad-9002d279d75d} + {6d057187-158a-4883-8d5b-d470a6b6b025} 10 0 0 diff --git a/src/eepp/ui/tools/textureatlastextureregioneditor.cpp b/src/eepp/ui/tools/textureatlastextureregioneditor.cpp index 22cd87ce6..53bd0a8d0 100644 --- a/src/eepp/ui/tools/textureatlastextureregioneditor.cpp +++ b/src/eepp/ui/tools/textureatlastextureregioneditor.cpp @@ -40,6 +40,8 @@ TextureAtlasTextureRegionEditor::~TextureAtlasTextureRegionEditor() { } void TextureAtlasTextureRegionEditor::draw() { + UIWidget::draw(); + Primitives P; P.setColor( Color( 255, 0, 0, mAlpha ) ); P.setLineWidth( PixelDensity::dpToPx( 1.f ) ); @@ -48,8 +50,6 @@ void TextureAtlasTextureRegionEditor::draw() { P.drawLine( Line2f( Vector2f( mScreenPos.x, mScreenPos.y + uiCenterPx.y ), Vector2f( mScreenPos.x + mRealSize.getWidth(), mScreenPos.y + uiCenterPx.y ) ) ); P.drawLine( Line2f( Vector2f( mScreenPos.x + uiCenterPx.x, mScreenPos.y ), Vector2f( mScreenPos.x + uiCenterPx.x, mScreenPos.y + mRealSize.getHeight() ) ) ); - - UIWidget::draw(); } void TextureAtlasTextureRegionEditor::update() { diff --git a/src/eepp/ui/uiimage.cpp b/src/eepp/ui/uiimage.cpp index 31e5d7faa..013232dc8 100644 --- a/src/eepp/ui/uiimage.cpp +++ b/src/eepp/ui/uiimage.cpp @@ -146,13 +146,13 @@ void UIImage::autoAlign() { } void UIImage::safeDeleteDrawable() { - if ( NULL != mDrawable && ( mNodeFlags & UI_CTRL_FLAG_DRAWABLE_OWNER ) ) { + if ( NULL != mDrawable && ( mNodeFlags & NODE_FLAG_DRAWABLE_OWNER ) ) { if ( mDrawable->getDrawableType() == Drawable::SPRITE ) { Sprite * spr = reinterpret_cast( mDrawable ); eeSAFE_DELETE( spr ); } - writeCtrlFlag( UI_CTRL_FLAG_DRAWABLE_OWNER, 0 ); + writeCtrlFlag( NODE_FLAG_DRAWABLE_OWNER, 0 ); } } @@ -186,7 +186,7 @@ void UIImage::loadFromXmlNode(const pugi::xml_node & node) { if ( NULL != ( res = DrawableSearcher::searchByName( ait->as_string() ) ) ) { if ( res->getDrawableType() == Drawable::SPRITE ) - writeCtrlFlag( UI_CTRL_FLAG_DRAWABLE_OWNER, 1 ); + writeCtrlFlag( NODE_FLAG_DRAWABLE_OWNER, 1 ); setDrawable( res ); } diff --git a/src/eepp/ui/uilistboxitem.cpp b/src/eepp/ui/uilistboxitem.cpp index 8ecac108e..1d969a9a1 100644 --- a/src/eepp/ui/uilistboxitem.cpp +++ b/src/eepp/ui/uilistboxitem.cpp @@ -50,26 +50,26 @@ Uint32 UIListBoxItem::onMouseClick( const Vector2i& Pos, const Uint32 Flags ) { void UIListBoxItem::select() { UIListBox * LBParent = reinterpret_cast ( getParent()->getParent() ); - bool wasSelected = 0 != ( mNodeFlags & UI_CTRL_FLAG_SELECTED ); + bool wasSelected = 0 != ( mNodeFlags & NODE_FLAG_SELECTED ); if ( LBParent->isMultiSelect() ) { if ( !wasSelected ) { setSkinState( UISkinState::StateSelected ); - mNodeFlags |= UI_CTRL_FLAG_SELECTED; + mNodeFlags |= NODE_FLAG_SELECTED; LBParent->mSelected.push_back( LBParent->getItemIndex( this ) ); LBParent->onSelected(); } else { - mNodeFlags &= ~UI_CTRL_FLAG_SELECTED; + mNodeFlags &= ~NODE_FLAG_SELECTED; LBParent->mSelected.remove( LBParent->getItemIndex( this ) ); } } else { setSkinState( UISkinState::StateSelected ); - mNodeFlags |= UI_CTRL_FLAG_SELECTED; + mNodeFlags |= NODE_FLAG_SELECTED; LBParent->mSelected.clear(); LBParent->mSelected.push_back( LBParent->getItemIndex( this ) ); @@ -98,21 +98,21 @@ void UIListBoxItem::update() { Uint32 UIListBoxItem::onMouseExit( const Vector2i& Pos, const Uint32 Flags ) { UINode::onMouseExit( Pos, Flags ); - if ( mNodeFlags & UI_CTRL_FLAG_SELECTED ) + if ( mNodeFlags & NODE_FLAG_SELECTED ) setSkinState( UISkinState::StateSelected ); return 1; } void UIListBoxItem::unselect() { - if ( mNodeFlags & UI_CTRL_FLAG_SELECTED ) - mNodeFlags &= ~UI_CTRL_FLAG_SELECTED; + if ( mNodeFlags & NODE_FLAG_SELECTED ) + mNodeFlags &= ~NODE_FLAG_SELECTED; setSkinState( UISkinState::StateNormal ); } bool UIListBoxItem::isSelected() const { - return 0 != ( mNodeFlags & UI_CTRL_FLAG_SELECTED ); + return 0 != ( mNodeFlags & NODE_FLAG_SELECTED ); } void UIListBoxItem::onStateChange() { diff --git a/src/eepp/ui/uimessagebox.cpp b/src/eepp/ui/uimessagebox.cpp index 47f5f120e..0f39a0eaf 100644 --- a/src/eepp/ui/uimessagebox.cpp +++ b/src/eepp/ui/uimessagebox.cpp @@ -99,10 +99,7 @@ Uint32 UIMessageBox::onMessage( const UIMessage * Msg ) { case UIMessage::Click: { if ( Msg->getFlags() & EE_BUTTON_LMASK ) { - Vector2i mousei( UIManager::instance()->getMousePos() ); - Vector2f mouse( mousei.x, mousei.y ); - - if ( Msg->getSender() == mButtonOK && mButtonOK->getPolygon().pointInside( mouse ) ) { + if ( Msg->getSender() == mButtonOK ) { sendCommonEvent( UIEvent::MsgBoxConfirmClick ); closeWindow(); diff --git a/src/eepp/ui/uinode.cpp b/src/eepp/ui/uinode.cpp index 3be2d3656..a6924f22a 100644 --- a/src/eepp/ui/uinode.cpp +++ b/src/eepp/ui/uinode.cpp @@ -39,7 +39,7 @@ UINode::UINode() : mSkinState( NULL ), mBackground( NULL ), mBorder( NULL ), - mNodeFlags( 0 ), + mNodeFlags( NODE_FLAG_POSITION_DIRTY | NODE_FLAG_TRANFORM_DIRTY | NODE_FLAG_TRANFORM_INVERT_DIRTY ), mBlend( BlendAlpha ), mNumCallBacks( 0 ), mVisible( true ), @@ -57,10 +57,6 @@ UINode::UINode() : if ( NULL != mParentCtrl ) mParentCtrl->childAdd( this ); - - updateScreenPos(); - updateQuad(); - updateOriginPoint(); } UINode::~UINode() { @@ -138,8 +134,7 @@ Uint32 UINode::onMessage( const UIMessage * Msg ) { void UINode::setInternalPosition( const Vector2i& Pos ) { mPos = Pos; mRealPos = Vector2i( Pos.x * PixelDensity::getPixelDensity(), Pos.y * PixelDensity::getPixelDensity() ); - updateScreenPos(); - updateChildsScreenPos(); + setDirty(); } UINode * UINode::setPosition( const Vector2f& Pos ) { @@ -163,8 +158,7 @@ void UINode::setPixelsPosition( const Vector2i& Pos ) { if ( mRealPos != Pos ) { mPos = Vector2i( PixelDensity::pxToDpI( Pos.x ), PixelDensity::pxToDpI( Pos.y ) ); mRealPos = Pos; - updateScreenPos(); - updateChildsScreenPos(); + setDirty(); onPositionChange(); } } @@ -312,11 +306,7 @@ UINode * UINode::setParent( UINode * parent ) { if ( NULL != mParentCtrl ) mParentCtrl->childAdd( this ); - updateScreenPos(); - - updateChildsScreenPos(); - - updateQuad(); + setDirty(); onParentChange(); @@ -361,7 +351,7 @@ void UINode::center() { } void UINode::close() { - mNodeFlags |= UI_CTRL_FLAG_CLOSE; + mNodeFlags |= NODE_FLAG_CLOSE; UIManager::instance()->addToCloseQueue( this ); } @@ -492,8 +482,8 @@ void UINode::update() { ChildLoop = ChildLoop->mNext; } - if ( mNodeFlags & UI_CTRL_FLAG_MOUSEOVER_ME_OR_CHILD ) - writeCtrlFlag( UI_CTRL_FLAG_MOUSEOVER_ME_OR_CHILD, 0 ); + if ( mNodeFlags & NODE_FLAG_MOUSEOVER_ME_OR_CHILD ) + writeCtrlFlag( NODE_FLAG_MOUSEOVER_ME_OR_CHILD, 0 ); } void UINode::sendMouseEvent( const Uint32& Event, const Vector2i& Pos, const Uint32& Flags ) { @@ -552,11 +542,11 @@ Uint32 UINode::onMouseClick( const Vector2i& Pos, const Uint32 Flags ) { } bool UINode::isMouseOver() { - return 0 != ( mNodeFlags & UI_CTRL_FLAG_MOUSEOVER ); + return 0 != ( mNodeFlags & NODE_FLAG_MOUSEOVER ); } bool UINode::isMouseOverMeOrChilds() { - return 0 != ( mNodeFlags & UI_CTRL_FLAG_MOUSEOVER_ME_OR_CHILD ); + return 0 != ( mNodeFlags & NODE_FLAG_MOUSEOVER_ME_OR_CHILD ); } Uint32 UINode::onMouseDoubleClick( const Vector2i& Pos, const Uint32 Flags ) { @@ -565,7 +555,7 @@ Uint32 UINode::onMouseDoubleClick( const Vector2i& Pos, const Uint32 Flags ) { } Uint32 UINode::onMouseEnter( const Vector2i& Pos, const Uint32 Flags ) { - writeCtrlFlag( UI_CTRL_FLAG_MOUSEOVER, 1 ); + writeCtrlFlag( NODE_FLAG_MOUSEOVER, 1 ); sendMouseEvent( UIEvent::MouseEnter, Pos, Flags ); @@ -575,7 +565,7 @@ Uint32 UINode::onMouseEnter( const Vector2i& Pos, const Uint32 Flags ) { } Uint32 UINode::onMouseExit( const Vector2i& Pos, const Uint32 Flags ) { - writeCtrlFlag( UI_CTRL_FLAG_MOUSEOVER, 0 ); + writeCtrlFlag( NODE_FLAG_MOUSEOVER, 0 ); sendMouseEvent( UIEvent::MouseExit, Pos, Flags ); @@ -585,7 +575,7 @@ Uint32 UINode::onMouseExit( const Vector2i& Pos, const Uint32 Flags ) { } Uint32 UINode::onFocus() { - mNodeFlags |= UI_CTRL_FLAG_HAS_FOCUS; + mNodeFlags |= NODE_FLAG_HAS_FOCUS; sendCommonEvent( UIEvent::OnFocus ); @@ -595,7 +585,7 @@ Uint32 UINode::onFocus() { } Uint32 UINode::onFocusLoss() { - mNodeFlags &= ~UI_CTRL_FLAG_HAS_FOCUS; + mNodeFlags &= ~NODE_FLAG_HAS_FOCUS; sendCommonEvent( UIEvent::OnFocusLoss ); @@ -610,7 +600,7 @@ void UINode::onWidgetFocusLoss() { } bool UINode::hasFocus() const { - return 0 != ( mNodeFlags & UI_CTRL_FLAG_HAS_FOCUS ); + return 0 != ( mNodeFlags & NODE_FLAG_HAS_FOCUS ); } Uint32 UINode::onValueChange() { @@ -849,6 +839,9 @@ void UINode::drawChilds() { void UINode::internalDraw() { if ( mVisible ) { + if ( mNodeFlags & NODE_FLAG_POSITION_DIRTY ) + updateScreenPos(); + matrixSet(); clipMe(); @@ -1124,10 +1117,11 @@ UINode * UINode::overFind( const Vector2f& Point ) { UINode * pOver = NULL; if ( mEnabled && mVisible ) { - updateQuad(); + if ( mNodeFlags & NODE_FLAG_TRANFORM_DIRTY ) + updateQuad(); if ( mPoly.pointInside( Point ) ) { - writeCtrlFlag( UI_CTRL_FLAG_MOUSEOVER_ME_OR_CHILD, 1 ); + writeCtrlFlag( NODE_FLAG_MOUSEOVER_ME_OR_CHILD, 1 ); UINode * ChildLoop = mChildLast; @@ -1184,11 +1178,11 @@ UINode * UINode::childGetAt( Vector2i CtrlPos, unsigned int RecursiveLevel ) { } Uint32 UINode::isWidget() { - return mNodeFlags & UI_CTRL_FLAG_WIDGET; + return mNodeFlags & NODE_FLAG_WIDGET; } Uint32 UINode::isWindow() { - return mNodeFlags & UI_CTRL_FLAG_WINDOW; + return mNodeFlags & NODE_FLAG_WINDOW; } Uint32 UINode::isClipped() { @@ -1196,15 +1190,15 @@ Uint32 UINode::isClipped() { } Uint32 UINode::isRotated() { - return mNodeFlags & UI_CTRL_FLAG_ROTATED; + return mNodeFlags & NODE_FLAG_ROTATED; } Uint32 UINode::isScaled() { - return mNodeFlags & UI_CTRL_FLAG_SCALED; + return mNodeFlags & NODE_FLAG_SCALED; } Uint32 UINode::isFrameBuffer() { - return mNodeFlags & UI_CTRL_FLAG_FRAME_BUFFER; + return mNodeFlags & NODE_FLAG_FRAME_BUFFER; } bool UINode::isMeOrParentTreeRotated() { @@ -1260,14 +1254,29 @@ bool UINode::isMeOrParentTreeScaledOrRotatedOrFrameBuffer() { } Polygon2f& UINode::getPolygon() { + if ( mNodeFlags & NODE_FLAG_TRANFORM_DIRTY ) + updateQuad(); + return mPoly; } -const Vector2f& UINode::getPolygonCenter() const { - return mCenter; +Vector2f UINode::getPolygonCenter() { + if ( mNodeFlags & NODE_FLAG_TRANFORM_DIRTY ) + updateQuad(); + + return mPoly.getBounds().getCenter(); } void UINode::updateQuad() { + if ( !( mNodeFlags & NODE_FLAG_TRANFORM_DIRTY ) && + !( mNodeFlags & NODE_FLAG_TRANFORM_DIRTY ) ) { + return; + } + + if ( mNodeFlags & NODE_FLAG_POSITION_DIRTY ) { + updateScreenPos(); + } + mPoly = Polygon2f( Rectf( mScreenPosf.x, mScreenPosf.y, mScreenPosf.x + mRealSize.getWidth(), mScreenPosf.y + mRealSize.getHeight() ) ); mPoly.rotate( mAngle, getRotationCenter() ); @@ -1283,6 +1292,8 @@ void UINode::updateQuad() { tParent = tParent->getParent(); }; + + mNodeFlags &= ~NODE_FLAG_TRANFORM_DIRTY | NODE_FLAG_TRANFORM_INVERT_DIRTY; } void UINode::updateCenter() { @@ -1378,7 +1389,7 @@ UINode * UINode::setThemeSkin( UITheme * Theme, const std::string& skinName ) { UINode * UINode::setSkin( const UISkin& Skin ) { removeSkin(); - writeCtrlFlag( UI_CTRL_FLAG_SKIN_OWNER, 1 ); + writeCtrlFlag( NODE_FLAG_SKIN_OWNER, 1 ); UISkin * SkinCopy = const_cast( &Skin )->clone(); @@ -1412,7 +1423,7 @@ UINode * UINode::setSkin( UISkin * skin ) { } void UINode::removeSkin() { - if ( NULL != mSkinState && ( mNodeFlags & UI_CTRL_FLAG_SKIN_OWNER ) ) { + if ( NULL != mSkinState && ( mNodeFlags & NODE_FLAG_SKIN_OWNER ) ) { UISkin * tSkin = mSkinState->getSkin(); eeSAFE_DELETE( tSkin ); @@ -1460,18 +1471,10 @@ void UINode::setThemeToChilds( UITheme * Theme ) { } } -void UINode::updateChildsScreenPos() { - UINode * ChildLoop = mChild; - - while ( NULL != ChildLoop ) { - ChildLoop->updateScreenPos(); - ChildLoop->updateChildsScreenPos(); - - ChildLoop = ChildLoop->mNext; - } -} - void UINode::updateScreenPos() { + if ( !(mNodeFlags & NODE_FLAG_POSITION_DIRTY) ) + return; + Vector2i Pos( mRealPos ); nodeToScreen( Pos ); @@ -1480,6 +1483,8 @@ void UINode::updateScreenPos() { mScreenPosf = Vector2f( Pos.x, Pos.y ); updateCenter(); + + mNodeFlags &= ~NODE_FLAG_POSITION_DIRTY; } UISkin * UINode::getSkin() { @@ -1730,11 +1735,11 @@ UIWindow * UINode::getParentWindow() { } bool UINode::isReverseDraw() const { - return 0 != ( mNodeFlags & UI_CTRL_FLAG_REVERSE_DRAW ); + return 0 != ( mNodeFlags & NODE_FLAG_REVERSE_DRAW ); } void UINode::setReverseDraw( bool reverseDraw ) { - writeCtrlFlag( UI_CTRL_FLAG_REVERSE_DRAW, reverseDraw ? 1 : 0 ); + writeCtrlFlag( NODE_FLAG_REVERSE_DRAW, reverseDraw ? 1 : 0 ); invalidateDraw(); } @@ -1789,11 +1794,11 @@ void UINode::setDragEnabled( const bool& enable ) { } bool UINode::isDragging() const { - return 0 != ( mNodeFlags & UI_CTRL_FLAG_DRAGGING ); + return 0 != ( mNodeFlags & NODE_FLAG_DRAGGING ); } void UINode::setDragging( const bool& dragging ) { - writeCtrlFlag( UI_CTRL_FLAG_DRAGGING, dragging ); + writeCtrlFlag( NODE_FLAG_DRAGGING, dragging ); if ( dragging ) { UIMessage tMsg( this, UIMessage::DragStart, 0 ); @@ -1838,6 +1843,31 @@ void UINode::updateOriginPoint() { break; default: {} } + + setDirty(); +} + +void UINode::setDirty() { + if ( ( mNodeFlags & NODE_FLAG_POSITION_DIRTY ) && + ( mNodeFlags & NODE_FLAG_TRANFORM_DIRTY ) && + ( mNodeFlags & NODE_FLAG_TRANFORM_INVERT_DIRTY ) ) + { + return; + } + + mNodeFlags |= NODE_FLAG_POSITION_DIRTY | NODE_FLAG_TRANFORM_DIRTY | NODE_FLAG_TRANFORM_INVERT_DIRTY; + + setChildsDirty(); +} + +void UINode::setChildsDirty() { + UINode * ChildLoop = mChild; + + while ( NULL != ChildLoop ) { + ChildLoop->setDirty(); + + ChildLoop = ChildLoop->mNext; + } } void UINode::onAngleChange() { @@ -1860,7 +1890,7 @@ Color UINode::getColor( const Color& Col ) { } bool UINode::isFadingOut() { - return 0 != ( mNodeFlags & UI_CTRL_FLAG_DISABLE_FADE_OUT ); + return 0 != ( mNodeFlags & NODE_FLAG_DISABLE_DELAYED ); } bool UINode::isAnimating() { @@ -1871,11 +1901,11 @@ static void UINode_onFadeDone( UIAction * action, const UIAction::ActionType& ac UINode * node = action->getTarget(); if ( NULL != node ) { - if ( ( node->getNodeFlags() & UI_CTRL_FLAG_CLOSE_FO ) ) + if ( ( node->getNodeFlags() & NODE_FLAG_CLOSE_DELAYED ) ) node->close(); - if ( ( node->getNodeFlags() & UI_CTRL_FLAG_DISABLE_FADE_OUT ) ) { - node->setNodeFlags( node->getNodeFlags() & ~UI_CTRL_FLAG_DISABLE_FADE_OUT ); + if ( ( node->getNodeFlags() & NODE_FLAG_DISABLE_DELAYED ) ) { + node->setNodeFlags( node->getNodeFlags() & ~NODE_FLAG_DISABLE_DELAYED ); node->setVisible( false ); } @@ -1957,7 +1987,7 @@ Interpolation1d * UINode::createFadeOut( const Time& time, const bool& AlphaChil } Interpolation1d * UINode::closeFadeOut( const Time& time, const bool& AlphaChilds, const Ease::Interpolation& Type ) { - mNodeFlags |= UI_CTRL_FLAG_CLOSE_FO; + mNodeFlags |= NODE_FLAG_CLOSE_DELAYED; return startAlphaAnim( mAlpha, 0.f, time, AlphaChilds, Type ); } @@ -1965,7 +1995,7 @@ Interpolation1d * UINode::closeFadeOut( const Time& time, const bool& AlphaChild Interpolation1d * UINode::disableFadeOut( const Time& time, const bool& AlphaChilds, const Ease::Interpolation& Type ) { setEnabled( false ); - mNodeFlags |= UI_CTRL_FLAG_DISABLE_FADE_OUT; + mNodeFlags |= NODE_FLAG_DISABLE_DELAYED; return startAlphaAnim( mAlpha, 0.f, time, AlphaChilds, Type ); } @@ -1995,19 +2025,21 @@ void UINode::setRotation( const Float& angle ) { mAngle = angle; if ( mAngle != 0.f ) { - mNodeFlags |= UI_CTRL_FLAG_ROTATED; + mNodeFlags |= NODE_FLAG_ROTATED; } else { - if ( mNodeFlags & UI_CTRL_FLAG_ROTATED ) - mNodeFlags &= ~UI_CTRL_FLAG_ROTATED; + if ( mNodeFlags & NODE_FLAG_ROTATED ) + mNodeFlags &= ~NODE_FLAG_ROTATED; } + setDirty(); + onAngleChange(); } void UINode::setRotation( const Float& angle , const OriginPoint & center ) { mRotationOriginPoint = center; updateOriginPoint(); - this->setRotation( angle ); + setRotation( angle ); } const Vector2f& UINode::getScale() const { @@ -2018,12 +2050,14 @@ void UINode::setScale( const Vector2f & scale ) { mScale = scale; if ( mScale != 1.f ) { - mNodeFlags |= UI_CTRL_FLAG_SCALED; + mNodeFlags |= NODE_FLAG_SCALED; } else { - if ( mNodeFlags & UI_CTRL_FLAG_SCALED ) - mNodeFlags &= ~UI_CTRL_FLAG_SCALED; + if ( mNodeFlags & NODE_FLAG_SCALED ) + mNodeFlags &= ~NODE_FLAG_SCALED; } + setDirty(); + onScaleChange(); } @@ -2047,11 +2081,11 @@ Vector2f UINode::getScaleCenter() { void UINode::setScale( const Vector2f& scale, const OriginPoint& center ) { mScaleOriginPoint = center; updateOriginPoint(); - this->setScale( scale ); + setScale( scale ); } void UINode::setScale( const Float& scale, const OriginPoint& center ) { - this->setScale( Vector2f( scale, scale ), center ); + setScale( Vector2f( scale, scale ), center ); } const Float& UINode::getAlpha() const { diff --git a/src/eepp/ui/uipushbutton.cpp b/src/eepp/ui/uipushbutton.cpp index 22606fd21..e2736bb8c 100644 --- a/src/eepp/ui/uipushbutton.cpp +++ b/src/eepp/ui/uipushbutton.cpp @@ -51,7 +51,7 @@ UIPushButton::UIPushButton() : mTextBox->setFlags( UI_VALIGN_CENTER | UI_HALIGN_CENTER ); if ( mStyleConfig.IconAutoMargin ) - mNodeFlags |= UI_CTRL_FLAG_FREE_USE; + mNodeFlags |= NODE_FLAG_FREE_USE; onSizeChange(); @@ -133,7 +133,7 @@ void UIPushButton::onThemeLoaded() { if ( NULL != mTextBox && NULL == mTextBox->getFont() && NULL != mSkinState && NULL != mSkinState->getSkin() && NULL != mSkinState->getSkin()->getTheme() && NULL != mSkinState->getSkin()->getTheme()->getFontStyleConfig().getFont() ) mTextBox->setFont( mSkinState->getSkin()->getTheme()->getFontStyleConfig().getFont() ); - if ( mNodeFlags & UI_CTRL_FLAG_FREE_USE ) { + if ( mNodeFlags & NODE_FLAG_FREE_USE ) { Rect RMargin = makePadding( true, false, false, false, true ); mStyleConfig.IconHorizontalMargin = RMargin.Left; } diff --git a/src/eepp/ui/uiselectbutton.cpp b/src/eepp/ui/uiselectbutton.cpp index 7b8d2f073..8ff67b4f6 100644 --- a/src/eepp/ui/uiselectbutton.cpp +++ b/src/eepp/ui/uiselectbutton.cpp @@ -29,7 +29,7 @@ void UISelectButton::select() { setSkinState( UISkinState::StateSelected ); - mNodeFlags |= UI_CTRL_FLAG_SELECTED; + mNodeFlags |= NODE_FLAG_SELECTED; if ( !wasSelected ) { UIMessage tMsg( this, UIMessage::Selected, 0 ); @@ -38,14 +38,14 @@ void UISelectButton::select() { } void UISelectButton::unselect() { - if ( mNodeFlags & UI_CTRL_FLAG_SELECTED ) - mNodeFlags &= ~UI_CTRL_FLAG_SELECTED; + if ( mNodeFlags & NODE_FLAG_SELECTED ) + mNodeFlags &= ~NODE_FLAG_SELECTED; setSkinState( UISkinState::StateNormal ); } bool UISelectButton::selected() const { - return 0 != ( mNodeFlags & UI_CTRL_FLAG_SELECTED ); + return 0 != ( mNodeFlags & NODE_FLAG_SELECTED ); } void UISelectButton::onStateChange() { diff --git a/src/eepp/ui/uisprite.cpp b/src/eepp/ui/uisprite.cpp index 73d53c5f6..2f15d4067 100644 --- a/src/eepp/ui/uisprite.cpp +++ b/src/eepp/ui/uisprite.cpp @@ -32,7 +32,7 @@ bool UISprite::isType( const Uint32& type ) const { } Uint32 UISprite::deallocSprite() { - return mNodeFlags & UI_CTRL_FLAG_FREE_USE; + return mNodeFlags & NODE_FLAG_FREE_USE; } void UISprite::setSprite( Graphics::Sprite * sprite ) { @@ -162,11 +162,11 @@ const Vector2i& UISprite::getAlignOffset() const { } void UISprite::setDeallocSprite( const bool& dealloc ) { - writeCtrlFlag( UI_CTRL_FLAG_FREE_USE, dealloc ? 1 : 0 ); + writeCtrlFlag( NODE_FLAG_FREE_USE, dealloc ? 1 : 0 ); } bool UISprite::getDeallocSprite() { - return 0 != ( mNodeFlags & UI_CTRL_FLAG_FREE_USE ); + return 0 != ( mNodeFlags & NODE_FLAG_FREE_USE ); } void UISprite::onSizeChange() { diff --git a/src/eepp/ui/uitablecell.cpp b/src/eepp/ui/uitablecell.cpp index d460e6a2b..28a98e49d 100644 --- a/src/eepp/ui/uitablecell.cpp +++ b/src/eepp/ui/uitablecell.cpp @@ -101,11 +101,11 @@ void UITableCell::select() { if ( NULL != MyParent->getItemSelected() ) MyParent->getItemSelected()->unselect(); - bool wasSelected = 0 != ( mNodeFlags & UI_CTRL_FLAG_SELECTED ); + bool wasSelected = 0 != ( mNodeFlags & NODE_FLAG_SELECTED ); setSkinState( UISkinState::StateSelected ); - mNodeFlags |= UI_CTRL_FLAG_SELECTED; + mNodeFlags |= NODE_FLAG_SELECTED; MyParent->mSelected = MyParent->getItemIndex( this ); @@ -116,20 +116,20 @@ void UITableCell::select() { } void UITableCell::unselect() { - if ( mNodeFlags & UI_CTRL_FLAG_SELECTED ) - mNodeFlags &= ~UI_CTRL_FLAG_SELECTED; + if ( mNodeFlags & NODE_FLAG_SELECTED ) + mNodeFlags &= ~NODE_FLAG_SELECTED; setSkinState( UISkinState::StateNormal ); } bool UITableCell::isSelected() const { - return 0 != ( mNodeFlags & UI_CTRL_FLAG_SELECTED ); + return 0 != ( mNodeFlags & NODE_FLAG_SELECTED ); } Uint32 UITableCell::onMouseExit( const Vector2i& Pos, const Uint32 Flags ) { UINode::onMouseExit( Pos, Flags ); - if ( mNodeFlags & UI_CTRL_FLAG_SELECTED ) + if ( mNodeFlags & NODE_FLAG_SELECTED ) setSkinState( UISkinState::StateSelected ); return 1; diff --git a/src/eepp/ui/uitextureregion.cpp b/src/eepp/ui/uitextureregion.cpp index 348cf3321..f20fd4392 100644 --- a/src/eepp/ui/uitextureregion.cpp +++ b/src/eepp/ui/uitextureregion.cpp @@ -59,9 +59,9 @@ void UITextureRegion::onAutoSize() { } void UITextureRegion::draw() { - UINode::draw(); - if ( mVisible ) { + UINode::draw(); + if ( NULL != mTextureRegion && 0.f != mAlpha ) { Sizef oDestSize = mTextureRegion->getDestSize(); Vector2i oOff = mTextureRegion->getOffset(); diff --git a/src/eepp/ui/uitextview.cpp b/src/eepp/ui/uitextview.cpp index 6dcf44522..cc78e1484 100644 --- a/src/eepp/ui/uitextview.cpp +++ b/src/eepp/ui/uitextview.cpp @@ -351,7 +351,7 @@ Uint32 UITextView::onMouseDoubleClick( const Vector2i& Pos, const Uint32 Flags ) selCurInit( tSelCurInit ); selCurEnd( tSelCurEnd ); - mNodeFlags &= ~UI_CTRL_FLAG_SELECTING; + mNodeFlags &= ~NODE_FLAG_SELECTING; } } @@ -365,7 +365,7 @@ Uint32 UITextView::onMouseClick( const Vector2i& Pos, const Uint32 Flags ) { selCurEnd( -1 ); } - mNodeFlags &= ~UI_CTRL_FLAG_SELECTING; + mNodeFlags &= ~NODE_FLAG_SELECTING; } return UIWidget::onMouseClick( Pos, Flags ); @@ -380,7 +380,7 @@ Uint32 UITextView::onMouseDown( const Vector2i& Pos, const Uint32 Flags ) { Int32 curPos = mTextCache->findCharacterFromPos( controlPos ); if ( -1 != curPos ) { - if ( -1 == selCurInit() || !( mNodeFlags & UI_CTRL_FLAG_SELECTING ) ) { + if ( -1 == selCurInit() || !( mNodeFlags & NODE_FLAG_SELECTING ) ) { selCurInit( curPos ); selCurEnd( curPos ); } else { @@ -388,7 +388,7 @@ Uint32 UITextView::onMouseDown( const Vector2i& Pos, const Uint32 Flags ) { } } - mNodeFlags |= UI_CTRL_FLAG_SELECTING; + mNodeFlags |= NODE_FLAG_SELECTING; } return UIWidget::onMouseDown( Pos, Flags ); diff --git a/src/eepp/ui/uitouchdragablewidget.cpp b/src/eepp/ui/uitouchdragablewidget.cpp index 6375e81af..5ef95c735 100644 --- a/src/eepp/ui/uitouchdragablewidget.cpp +++ b/src/eepp/ui/uitouchdragablewidget.cpp @@ -31,11 +31,11 @@ UITouchDragableWidget * UITouchDragableWidget::setTouchDragEnabled( const bool& } bool UITouchDragableWidget::isTouchDragging() const { - return 0 != ( mNodeFlags & UI_CTRL_FLAG_TOUCH_DRAGGING ); + return 0 != ( mNodeFlags & NODE_FLAG_TOUCH_DRAGGING ); } UITouchDragableWidget * UITouchDragableWidget::setTouchDragging( const bool& dragging ) { - writeCtrlFlag( UI_CTRL_FLAG_TOUCH_DRAGGING, true == dragging ); + writeCtrlFlag( NODE_FLAG_TOUCH_DRAGGING, true == dragging ); return this; } @@ -54,10 +54,10 @@ void UITouchDragableWidget::update() { UIManager * manager = UIManager::instance(); Uint32 Press = manager->getPressTrigger(); - if ( ( mNodeFlags & UI_CTRL_FLAG_TOUCH_DRAGGING ) ) { + if ( ( mNodeFlags & NODE_FLAG_TOUCH_DRAGGING ) ) { // Mouse Not Down if ( !( Press & EE_BUTTON_LMASK ) ) { - writeCtrlFlag( UI_CTRL_FLAG_TOUCH_DRAGGING, 0 ); + writeCtrlFlag( NODE_FLAG_TOUCH_DRAGGING, 0 ); manager->setControlDragging( false ); return; } @@ -83,7 +83,7 @@ void UITouchDragableWidget::update() { // Mouse Down if ( isTouchOverAllowedChilds() && !manager->isControlDragging() ) { if ( Press & EE_BUTTON_LMASK ) { - writeCtrlFlag( UI_CTRL_FLAG_TOUCH_DRAGGING, 1 ); + writeCtrlFlag( NODE_FLAG_TOUCH_DRAGGING, 1 ); mTouchDragPoint = Vector2f( manager->getMousePos().x, manager->getMousePos().y ); mTouchDragAcceleration = Vector2f(0,0); diff --git a/src/eepp/ui/uiwidget.cpp b/src/eepp/ui/uiwidget.cpp index 8309f0f3c..03385e775 100644 --- a/src/eepp/ui/uiwidget.cpp +++ b/src/eepp/ui/uiwidget.cpp @@ -22,7 +22,7 @@ UIWidget::UIWidget() : mLayoutPositionRuleWidget(NULL), mPropertiesTransactionCount(0) { - mNodeFlags |= UI_CTRL_FLAG_WIDGET; + mNodeFlags |= NODE_FLAG_WIDGET; updateAnchorsDistances(); } diff --git a/src/eepp/ui/uiwindow.cpp b/src/eepp/ui/uiwindow.cpp index c302a32b8..4a9fc8928 100644 --- a/src/eepp/ui/uiwindow.cpp +++ b/src/eepp/ui/uiwindow.cpp @@ -43,7 +43,7 @@ UIWindow::UIWindow( UIWindow::WindowBaseContainerType type, const UIWindowStyleC mMinimizeListener(0), mFrameBufferBound( false ) { - mNodeFlags |= UI_CTRL_FLAG_WINDOW; + mNodeFlags |= NODE_FLAG_WINDOW; setHorizontalAlign( UI_HALIGN_CENTER ); @@ -63,7 +63,7 @@ UIWindow::UIWindow( UIWindow::WindowBaseContainerType type, const UIWindowStyleC } mContainer->setLayoutSizeRules( FIXED, FIXED ); - mContainer->writeCtrlFlag( UI_CTRL_FLAG_OWNED_BY_WINDOW, 1 ); + mContainer->writeCtrlFlag( NODE_FLAG_OWNED_BY_WINDOW, 1 ); mContainer->setParent( this ); mContainer->setFlags( UI_REPORT_SIZE_CHANGE_TO_CHILDS | UI_CLIP_ENABLE ); mContainer->setSize( mSize ); @@ -91,10 +91,11 @@ UIWindow::~UIWindow() { void UIWindow::updateWinFlags() { bool needsUpdate = false; - writeCtrlFlag( UI_CTRL_FLAG_FRAME_BUFFER, ( mStyleConfig.WinFlags & UI_WIN_FRAME_BUFFER ) ? 1 : 0 ); + writeCtrlFlag( NODE_FLAG_FRAME_BUFFER, ( mStyleConfig.WinFlags & UI_WIN_FRAME_BUFFER ) ? 1 : 0 ); - if ( ( mStyleConfig.WinFlags & UI_WIN_FRAME_BUFFER ) && NULL == mFrameBuffer ) { - createFrameBuffer(); + if ( ( mStyleConfig.WinFlags & UI_WIN_FRAME_BUFFER ) ) { + if ( NULL == mFrameBuffer ) + createFrameBuffer(); } else { eeSAFE_DELETE( mFrameBuffer ); } @@ -108,7 +109,7 @@ void UIWindow::updateWinFlags() { if ( !( mStyleConfig.WinFlags & UI_WIN_NO_BORDER ) ) { if ( NULL == mWindowDecoration ) { mWindowDecoration = UINode::New(); - mWindowDecoration->writeCtrlFlag( UI_CTRL_FLAG_OWNED_BY_WINDOW, 1 ); + mWindowDecoration->writeCtrlFlag( NODE_FLAG_OWNED_BY_WINDOW, 1 ); } mWindowDecoration->setParent( this ); @@ -117,7 +118,7 @@ void UIWindow::updateWinFlags() { if ( NULL == mBorderLeft ) { mBorderLeft = UINode::New(); - mBorderLeft->writeCtrlFlag( UI_CTRL_FLAG_OWNED_BY_WINDOW, 1 ); + mBorderLeft->writeCtrlFlag( NODE_FLAG_OWNED_BY_WINDOW, 1 ); } mBorderLeft->setParent( this ); @@ -126,7 +127,7 @@ void UIWindow::updateWinFlags() { if ( NULL == mBorderRight ) { mBorderRight = UINode::New(); - mBorderRight->writeCtrlFlag( UI_CTRL_FLAG_OWNED_BY_WINDOW, 1 ); + mBorderRight->writeCtrlFlag( NODE_FLAG_OWNED_BY_WINDOW, 1 ); } mBorderRight->setParent( this ); @@ -135,7 +136,7 @@ void UIWindow::updateWinFlags() { if ( NULL == mBorderBottom ) { mBorderBottom = UINode::New(); - mBorderBottom->writeCtrlFlag( UI_CTRL_FLAG_OWNED_BY_WINDOW, 1 ); + mBorderBottom->writeCtrlFlag( NODE_FLAG_OWNED_BY_WINDOW, 1 ); } mBorderBottom->setParent( this ); @@ -145,7 +146,7 @@ void UIWindow::updateWinFlags() { if ( mStyleConfig.WinFlags & UI_WIN_CLOSE_BUTTON ) { if ( NULL == mButtonClose ) { mButtonClose = UINode::New(); - mButtonClose->writeCtrlFlag( UI_CTRL_FLAG_OWNED_BY_WINDOW, 1 ); + mButtonClose->writeCtrlFlag( NODE_FLAG_OWNED_BY_WINDOW, 1 ); needsUpdate = true; } @@ -164,7 +165,7 @@ void UIWindow::updateWinFlags() { if ( isMaximizable() ) { if ( NULL == mButtonMaximize ) { mButtonMaximize = UINode::New(); - mButtonMaximize->writeCtrlFlag( UI_CTRL_FLAG_OWNED_BY_WINDOW, 1 ); + mButtonMaximize->writeCtrlFlag( NODE_FLAG_OWNED_BY_WINDOW, 1 ); needsUpdate = true; } @@ -183,7 +184,7 @@ void UIWindow::updateWinFlags() { if ( mStyleConfig.WinFlags & UI_WIN_MINIMIZE_BUTTON ) { if ( NULL == mButtonMinimize ) { mButtonMinimize = UINode::New(); - mButtonMinimize->writeCtrlFlag( UI_CTRL_FLAG_OWNED_BY_WINDOW, 1 ); + mButtonMinimize->writeCtrlFlag( NODE_FLAG_OWNED_BY_WINDOW, 1 ); needsUpdate = true; } @@ -199,6 +200,11 @@ void UIWindow::updateWinFlags() { mButtonMinimize = NULL; } + if ( NULL != mTitle ) { + mTitle->setVisible( true ); + mTitle->toFront(); + } + setDragEnabled( true ); } else { if ( NULL != mWindowDecoration ) { @@ -247,6 +253,9 @@ void UIWindow::updateWinFlags() { if ( NULL != mContainer ) mContainer->setPosition( 0, 0 ); + if ( NULL != mTitle ) + mTitle->setVisible( false ); + fixChildsSize(); } @@ -279,7 +288,7 @@ void UIWindow::drawFrameBuffer() { } void UIWindow::drawHighlightInvalidation() { - if ( ( mNodeFlags & UI_CTRL_FLAG_NEEDS_REDRAW ) && UIManager::instance()->getHighlightInvalidation() ) { + if ( ( mNodeFlags & NODE_FLAG_NEEDS_REDRAW ) && UIManager::instance()->getHighlightInvalidation() ) { UIWidget::matrixSet(); Primitives P; @@ -339,7 +348,7 @@ void UIWindow::createModalControl() { if ( NULL == mModalCtrl ) { mModalCtrl = UIWidget::New(); - mModalCtrl->writeCtrlFlag( UI_CTRL_FLAG_OWNED_BY_WINDOW, 1 ); + mModalCtrl->writeCtrlFlag( NODE_FLAG_OWNED_BY_WINDOW, 1 ); mModalCtrl->setParent( Ctrl )->setPosition(0,0)->setSize( Ctrl->getSize() ); mModalCtrl->setAnchors( UI_ANCHOR_LEFT | UI_ANCHOR_TOP | UI_ANCHOR_RIGHT | UI_ANCHOR_BOTTOM ); } else { @@ -362,10 +371,10 @@ void UIWindow::enableByModal() { { if ( CtrlChild != mModalCtrl && CtrlChild != this && - CtrlChild->getNodeFlags() & UI_CTRL_FLAG_DISABLED_BY_MODAL_WINDOW ) + CtrlChild->getNodeFlags() & NODE_FLAG_DISABLED_BY_MODAL_WINDOW ) { CtrlChild->setEnabled( true ); - CtrlChild->writeCtrlFlag( UI_CTRL_FLAG_DISABLED_BY_MODAL_WINDOW, 0 ); + CtrlChild->writeCtrlFlag( NODE_FLAG_DISABLED_BY_MODAL_WINDOW, 0 ); } CtrlChild = CtrlChild->getNextNode(); @@ -384,7 +393,7 @@ void UIWindow::disableByModal() { CtrlChild->isEnabled() ) { CtrlChild->setEnabled( false ); - CtrlChild->writeCtrlFlag( UI_CTRL_FLAG_DISABLED_BY_MODAL_WINDOW, 1 ); + CtrlChild->writeCtrlFlag( NODE_FLAG_DISABLED_BY_MODAL_WINDOW, 1 ); } CtrlChild = CtrlChild->getNextNode(); @@ -1014,7 +1023,7 @@ void UIWindow::onChildCountChange() { bool found = false; while ( NULL != child ) { - if ( !( child->getNodeFlags() & UI_CTRL_FLAG_OWNED_BY_WINDOW ) ) { + if ( !( child->getNodeFlags() & NODE_FLAG_OWNED_BY_WINDOW ) ) { found = true; break; } @@ -1043,7 +1052,7 @@ void UIWindow::setTitle( const String& text ) { if ( NULL == mTitle ) { mTitle = UITextView::New(); mTitle->setLayoutSizeRules( FIXED, FIXED ); - mTitle->writeCtrlFlag( UI_CTRL_FLAG_OWNED_BY_WINDOW, 1 ); + mTitle->writeCtrlFlag( NODE_FLAG_OWNED_BY_WINDOW, 1 ); mTitle->setParent( this ); mTitle->setHorizontalAlign( getHorizontalAlign() ); mTitle->setVerticalAlign( getVerticalAlign() ); @@ -1113,6 +1122,8 @@ Uint32 UIWindow::onKeyDown( const UIEventKey &Event ) { void UIWindow::internalDraw() { if ( mVisible && 0 != mAlpha ) { + updateScreenPos(); + preDraw(); drawShadow(); @@ -1145,13 +1156,13 @@ void UIWindow::internalDraw() { drawHighlightInvalidation(); - writeCtrlFlag( UI_CTRL_FLAG_NEEDS_REDRAW, 0 ); + writeCtrlFlag( NODE_FLAG_NEEDS_REDRAW, 0 ); } } void UIWindow::invalidate() { if ( mVisible && mAlpha != 0.f ) { - writeCtrlFlag( UI_CTRL_FLAG_NEEDS_REDRAW, 1 ); + writeCtrlFlag( NODE_FLAG_NEEDS_REDRAW, 1 ); if ( NULL != mParentWindowCtrl ) mParentWindowCtrl->invalidateDraw(); @@ -1163,7 +1174,7 @@ FrameBuffer * UIWindow::getFrameBuffer() const { } bool UIWindow::invalidated() { - return 0 != ( mNodeFlags & UI_CTRL_FLAG_NEEDS_REDRAW ); + return 0 != ( mNodeFlags & NODE_FLAG_NEEDS_REDRAW ); } void UIWindow::matrixSet() {