diff --git a/include/eepp/ui.hpp b/include/eepp/ui.hpp index 100e77c29..993e84f5b 100644 --- a/include/eepp/ui.hpp +++ b/include/eepp/ui.hpp @@ -47,6 +47,7 @@ #include #include #include +#include #include #include diff --git a/include/eepp/ui/uirelativelayout.hpp b/include/eepp/ui/uirelativelayout.hpp index b483ae8dc..eba93a461 100644 --- a/include/eepp/ui/uirelativelayout.hpp +++ b/include/eepp/ui/uirelativelayout.hpp @@ -11,12 +11,14 @@ class UIRelativeLayout : public UIWidget { UIRelativeLayout(); - + UIRelativeLayout * add( UIWidget * widget ); protected: virtual void onSizeChange(); virtual void onChildCountChange(); + virtual void onParentSizeChange( const Vector2i& SizeChange ); + void fixChilds(); void fixChildPos( UIWidget * widget ); diff --git a/projects/linux/ee.files b/projects/linux/ee.files index 0414d45ac..0f817505a 100644 --- a/projects/linux/ee.files +++ b/projects/linux/ee.files @@ -3,6 +3,7 @@ ../../include/eepp/ui/uiimage.hpp ../../include/eepp/ui/uilinearlayout.hpp ../../include/eepp/ui/uimenuseparator.hpp +../../include/eepp/ui/uirelativelayout.hpp ../../include/eepp/ui/uitable.hpp ../../include/eepp/ui/uitablecell.hpp ../../include/eepp/ui/uitextview.hpp @@ -17,6 +18,7 @@ ../../src/eepp/ui/uiimage.cpp ../../src/eepp/ui/uilinearlayout.cpp ../../src/eepp/ui/uimenuseparator.cpp +../../src/eepp/ui/uirelativelayout.cpp ../../src/eepp/ui/uitable.cpp ../../src/eepp/ui/uitablecell.cpp ../../src/eepp/ui/uitextview.cpp diff --git a/src/eepp/ui/uilinearlayout.cpp b/src/eepp/ui/uilinearlayout.cpp index 6d49f03e8..48a8f3d51 100644 --- a/src/eepp/ui/uilinearlayout.cpp +++ b/src/eepp/ui/uilinearlayout.cpp @@ -56,6 +56,9 @@ void UILinearLayout::onChildCountChange() { } void UILinearLayout::pack() { + setInternalPosition( Vector2i( mLayoutMargin.Left, mPos.y ) ); + setInternalPosition( Vector2i( mPos.x, mLayoutMargin.Top ) ); + if ( mOrientation == UI_VERTICAL ) packVertical(); else diff --git a/src/eepp/ui/uirelativelayout.cpp b/src/eepp/ui/uirelativelayout.cpp index 62b65c791..bcce8549f 100644 --- a/src/eepp/ui/uirelativelayout.cpp +++ b/src/eepp/ui/uirelativelayout.cpp @@ -11,6 +11,11 @@ UIRelativeLayout::UIRelativeLayout() : { } +UIRelativeLayout * UIRelativeLayout::add(UIWidget * widget) { + widget->setParent( this ); + return this; +} + void UIRelativeLayout::onSizeChange() { fixChilds(); } @@ -19,7 +24,22 @@ void UIRelativeLayout::onChildCountChange() { fixChilds(); } +void UIRelativeLayout::onParentSizeChange( const Vector2i& SizeChange ) { + fixChilds(); +} + void UIRelativeLayout::fixChilds() { + setInternalPosition( Vector2i( mLayoutMargin.Left, mPos.y ) ); + setInternalPosition( Vector2i( mPos.x, mLayoutMargin.Top ) ); + + if ( getLayoutWidthRules() == MATCH_PARENT ) { + setInternalWidth( getParent()->getSize().getWidth() - mLayoutMargin.Left - mLayoutMargin.Right ); + } + + if ( getLayoutHeightRules() == MATCH_PARENT ) { + setInternalHeight( getParent()->getSize().getHeight() - mLayoutMargin.Top - mLayoutMargin.Bottom ); + } + UIControl * child = mChild; while ( NULL != child ) { diff --git a/src/eepp/ui/uitextedit.cpp b/src/eepp/ui/uitextedit.cpp index 2ede8f133..5ae4da19c 100644 --- a/src/eepp/ui/uitextedit.cpp +++ b/src/eepp/ui/uitextedit.cpp @@ -203,11 +203,6 @@ void UITextEdit::scrollbarsSet() { } } - if ( mFlags & UI_WORD_WRAP ) { - mVScrollBar->setVisible( true ); - mVScrollBar->setEnabled( true ); - } - mSkipValueChange = true; if ( mVScrollBar->isVisible() ) { int extraH = 0; diff --git a/src/eepp/ui/uitextview.cpp b/src/eepp/ui/uitextview.cpp index b809f7a64..58da793ab 100644 --- a/src/eepp/ui/uitextview.cpp +++ b/src/eepp/ui/uitextview.cpp @@ -281,7 +281,7 @@ Uint32 UITextView::onMouseClick( const Vector2i& Pos, const Uint32 Flags ) { } Uint32 UITextView::onMouseDown( const Vector2i& Pos, const Uint32 Flags ) { - if ( isTextSelectionEnabled() && ( Flags & EE_BUTTON_LMASK ) ) { + if ( isTextSelectionEnabled() && ( Flags & EE_BUTTON_LMASK ) && UIManager::instance()->getDownControl() == this ) { Vector2i controlPos( Pos ); worldToControl( controlPos ); controlPos = PixelDensity::dpToPxI( controlPos ) - Vector2i( (Int32)mRealAlignOffset.x, (Int32)mRealAlignOffset.y ); diff --git a/src/test/eetest.cpp b/src/test/eetest.cpp index 4b85f3a52..afd9a8381 100644 --- a/src/test/eetest.cpp +++ b/src/test/eetest.cpp @@ -642,7 +642,7 @@ void EETest::createNewUI() { /**/ UIWindow * win = UIWindow::New(); win->setSize( 500, 500 ); - win->setWinFlags( UI_WIN_DEFAULT_FLAGS | UI_WIN_RESIZEABLE | UI_WIN_MAXIMIZE_BUTTON | UI_WIN_MINIMIZE_BUTTON ); + win->setWinFlags( UI_WIN_DEFAULT_FLAGS | UI_WIN_RESIZEABLE | UI_WIN_MAXIMIZE_BUTTON ); UILinearLayout * layWin = UILinearLayout::NewVertical(); layWin->setLayoutSizeRules( MATCH_PARENT, MATCH_PARENT ); @@ -687,6 +687,23 @@ void EETest::createNewUI() { drop->getListBox()->setSelected(0); win->show(); /**/ + + /**/ + UIWindow * win2 = UIWindow::New(); + win2->setSize( 500, 500 ); + win2->setWinFlags( UI_WIN_DEFAULT_FLAGS | UI_WIN_RESIZEABLE | UI_WIN_MAXIMIZE_BUTTON ); + + UIRelativeLayout * rlay = UIRelativeLayout::New(); + rlay->setParent( win2->getContainer() ); + rlay->setLayoutSizeRules( MATCH_PARENT, MATCH_PARENT ); + rlay->setLayoutMargin( Recti( 16, 16, 16, 16 ) ); + rlay->setBackgroundFillEnabled( true )->setColor( 0x333333CC ); + + UIPushButton::New()->setText( "OK" )->setLayoutGravity( UI_VALIGN_BOTTOM | UI_HALIGN_RIGHT )->setLayoutMargin( Recti( 0, 0, 16, 16 ) )->setParent( rlay ); + UIPushButton::New()->setText( "Cancel" )->setLayoutGravity( UI_VALIGN_BOTTOM | UI_HALIGN_RIGHT )->setLayoutMargin( Recti( 0, 0, 16 + 32, 16 ) )->setParent( rlay ); + + win2->show(); + /**/ } void EETest::createMapEditor() {