diff --git a/bin/assets/layouts/test.xml b/bin/assets/layouts/test.xml
index 57641f5a0..e8781567f 100644
--- a/bin/assets/layouts/test.xml
+++ b/bin/assets/layouts/test.xml
@@ -70,11 +70,10 @@
-
-
-
-
-
+
+
+
+
diff --git a/include/eepp/ui/uislider.hpp b/include/eepp/ui/uislider.hpp
index 492ea8bc1..d07fcca1e 100644
--- a/include/eepp/ui/uislider.hpp
+++ b/include/eepp/ui/uislider.hpp
@@ -6,14 +6,6 @@
namespace EE { namespace UI {
-class EE_API UISliderStyleConfig {
- public:
- UISliderStyleConfig() {}
-
- bool AllowHalfSliderOut = false;
- bool ExpandBackground = false;
-};
-
class EE_API UISlider : public UIWidget {
public:
static UISlider * New();
@@ -81,7 +73,8 @@ class EE_API UISlider : public UIWidget {
friend class Private::UISliderButton;
UI_ORIENTATION mOrientation;
- UISliderStyleConfig mStyleConfig;
+ bool mAllowHalfSliderOut;
+ bool mExpandBackground;
UINode * mBackSlider;
Private::UISliderButton * mSlider;
Float mMinValue;
diff --git a/src/eepp/ui/uiscrollbar.cpp b/src/eepp/ui/uiscrollbar.cpp
index f8f866e94..42168a6b7 100644
--- a/src/eepp/ui/uiscrollbar.cpp
+++ b/src/eepp/ui/uiscrollbar.cpp
@@ -35,14 +35,13 @@ UIScrollBar::UIScrollBar( const UI_ORIENTATION& orientation ) :
mBtnDown->setSize( 16, 16 );
mSlider = UISlider::New();
+ mSlider->addEventListener( Event::OnValueChange, cb::Make1( this, &UIScrollBar::onValueChangeCb ) );
mSlider->setElementTag( "scrollbarslider" );
mSlider->setOrientation( orientation );
mSlider->setParent( this );
mSlider->setAllowHalfSliderOut( false );
mSlider->setExpandBackground( false );
- mSlider->addEventListener( Event::OnValueChange, cb::Make1( this, &UIScrollBar::onValueChangeCb ) );
-
adjustChilds();
applyDefaultTheme();
@@ -294,7 +293,9 @@ bool UIScrollBar::getExpandBackground() const {
}
void UIScrollBar::setExpandBackground( bool expandBackground ) {
- mSlider->setExpandBackground( expandBackground );
+ if ( mSlider->getExpandBackground() != expandBackground ) {
+ mSlider->setExpandBackground( expandBackground );
+ }
adjustChilds();
}
diff --git a/src/eepp/ui/uiscrollview.cpp b/src/eepp/ui/uiscrollview.cpp
index 15598d19d..d6b7a5d4b 100644
--- a/src/eepp/ui/uiscrollview.cpp
+++ b/src/eepp/ui/uiscrollview.cpp
@@ -42,8 +42,8 @@ bool UIScrollView::isType( const Uint32& type ) const {
}
void UIScrollView::onSizeChange() {
- UIWidget::onSizeChange();
containerUpdate();
+ UIWidget::onSizeChange();
}
void UIScrollView::onAlphaChange() {
@@ -77,8 +77,8 @@ void UIScrollView::onChildCountChange() {
mScrollView->close();
}
- child->setParent( mContainer );
mScrollView = child;
+ mScrollView->setParent( mContainer );
mSizeChangeCb = mScrollView->addEventListener( Event::OnSizeChange, cb::Make1( this, &UIScrollView::onScrollViewSizeChange ) );
containerUpdate();
@@ -139,19 +139,6 @@ void UIScrollView::containerUpdate() {
if ( NULL == mScrollView )
return;
- Sizef size = mDpSize - mPadding;
-
- if ( Exclusive == mViewType ) {
- if ( mVScroll->isVisible() )
- size.x -= mVScroll->getSize().getWidth();
-
- if ( mHScroll->isVisible() )
- size.y -= mHScroll->getSize().getHeight();
- }
-
- mContainer->setPosition( mPadding.Left, mPadding.Top );
- mContainer->setSize( size );
-
if ( UI_SCROLLBAR_ALWAYS_ON == mHScrollMode ) {
mHScroll->setVisible( true );
mHScroll->setEnabled( true );
@@ -159,7 +146,7 @@ void UIScrollView::containerUpdate() {
mHScroll->setVisible( false );
mHScroll->setEnabled( false );
} else {
- bool visible = mScrollView->getSize().getWidth() > mContainer->getSize().getWidth();
+ bool visible = mScrollView->getSize().getWidth() > getSize().getWidth() - getPadding().Left - getPadding().Right;
mHScroll->setVisible( visible );
mHScroll->setEnabled( visible );
@@ -172,12 +159,25 @@ void UIScrollView::containerUpdate() {
mVScroll->setVisible( false );
mVScroll->setEnabled( false );
} else {
- bool visible = mScrollView->getSize().getHeight() > mContainer->getSize().getHeight();
+ bool visible = mScrollView->getSize().getHeight() > getSize().getHeight() - getPadding().Top - getPadding().Bottom;
mVScroll->setVisible( visible );
mVScroll->setEnabled( visible );
}
+ Sizef size = mDpSize - mPadding;
+
+ if ( Exclusive == mViewType ) {
+ if ( mVScroll->isVisible() )
+ size.x -= mVScroll->getSize().getWidth();
+
+ if ( mHScroll->isVisible() )
+ size.y -= mHScroll->getSize().getHeight();
+ }
+
+ mContainer->setPosition( mPadding.Left, mPadding.Top );
+ mContainer->setSize( size );
+
mVScroll->setPosition( mDpSize.getWidth() - mVScroll->getSize().getWidth() - mPadding.Right, mPadding.Top );
mHScroll->setPosition( mPadding.Left, mDpSize.getHeight() - mHScroll->getSize().getHeight() - mPadding.Bottom );
diff --git a/src/eepp/ui/uislider.cpp b/src/eepp/ui/uislider.cpp
index 90f0965e0..19de0e8c5 100644
--- a/src/eepp/ui/uislider.cpp
+++ b/src/eepp/ui/uislider.cpp
@@ -20,6 +20,8 @@ UISlider * UISlider::NewHorizontal() {
UISlider::UISlider( const UI_ORIENTATION& orientation ) :
UIWidget( "slider" ),
mOrientation( orientation ),
+ mAllowHalfSliderOut( false ),
+ mExpandBackground( false ),
mBackSlider( NULL ),
mSlider( NULL ),
mMinValue( 0.f ),
@@ -137,24 +139,24 @@ void UISlider::adjustChilds() {
if ( UI_HORIZONTAL == mOrientation ) {
Float Height;
- if ( mStyleConfig.ExpandBackground )
+ if ( mExpandBackground )
Height = mDpSize.getHeight() - mPadding.Top - mPadding.Bottom;
else
Height = tSkin->getSize().getHeight();
- if ( mStyleConfig.AllowHalfSliderOut )
+ if ( mAllowHalfSliderOut )
mBackSlider->setSize( Sizef( mDpSize.getWidth() - mSlider->getSize().getWidth() - mPadding.Left - mPadding.Right, Height ) );
else
mBackSlider->setSize( Sizef( mDpSize.getWidth() - mPadding.Left - mPadding.Right, Height ) );
} else {
Float Width;
- if ( mStyleConfig.ExpandBackground )
+ if ( mExpandBackground )
Width = mDpSize.getWidth() - mPadding.Left - mPadding.Right;
else
Width = tSkin->getSize().getWidth();
- if ( mStyleConfig.AllowHalfSliderOut )
+ if ( mAllowHalfSliderOut )
mBackSlider->setSize( Sizef( Width, mDpSize.getHeight() - mSlider->getSize().getHeight() - mPadding.Top - mPadding.Bottom ) );
else
mBackSlider->setSize( Sizef( Width, mDpSize.getHeight() ) );
@@ -176,7 +178,7 @@ void UISlider::fixSliderPos() {
if ( mSlider->getPosition().x < mPadding.Left )
mSlider->setPosition( mPadding.Left, 0 );
- if ( mStyleConfig.AllowHalfSliderOut ) {
+ if ( mAllowHalfSliderOut ) {
if ( mSlider->getPosition().x > mBackSlider->getSize().getWidth() + mPadding.Left )
mSlider->setPosition( mBackSlider->getSize().getWidth() + mPadding.Left, 0 );
} else {
@@ -186,7 +188,7 @@ void UISlider::fixSliderPos() {
mSlider->centerVertical();
- if ( mStyleConfig.AllowHalfSliderOut )
+ if ( mAllowHalfSliderOut )
setValue( mMinValue + ( mSlider->getPosition().x - mPadding.Left ) * ( mMaxValue - mMinValue ) / (Float)mBackSlider->getSize().getWidth() );
else
setValue( mMinValue + ( mSlider->getPosition().x - mPadding.Left ) * ( mMaxValue - mMinValue ) / ( (Float)mDpSize.getWidth() - mSlider->getSize().getWidth() ) );
@@ -196,7 +198,7 @@ void UISlider::fixSliderPos() {
if ( mSlider->getPosition().y < mPadding.Top )
mSlider->setPosition( 0, mPadding.Top );
- if ( mStyleConfig.AllowHalfSliderOut ) {
+ if ( mAllowHalfSliderOut ) {
if ( mSlider->getPosition().y > mBackSlider->getSize().getHeight() + mPadding.Top )
mSlider->setPosition( 0, mBackSlider->getSize().getHeight() + mPadding.Top );
} else {
@@ -207,7 +209,7 @@ void UISlider::fixSliderPos() {
mSlider->centerHorizontal();
- if ( mStyleConfig.AllowHalfSliderOut )
+ if ( mAllowHalfSliderOut )
setValue( mMinValue + ( mSlider->getPosition().y - mPadding.Top ) * ( mMaxValue - mMinValue ) / (Float)mBackSlider->getSize().getHeight() );
else
setValue( mMinValue + ( mSlider->getPosition().y - mPadding.Top ) * ( mMaxValue - mMinValue ) / ( (Float)mDpSize.getHeight() - mSlider->getSize().getHeight() ) );
@@ -218,6 +220,9 @@ void UISlider::fixSliderPos() {
}
void UISlider::setValue( Float Val ) {
+ if ( mValue == Val )
+ return;
+
if ( Val < mMinValue ) Val = mMinValue;
if ( Val > mMaxValue ) Val = mMaxValue;
@@ -230,12 +235,12 @@ void UISlider::setValue( Float Val ) {
mOnPosChange = true;
if ( UI_HORIZONTAL == mOrientation ) {
- if ( mStyleConfig.AllowHalfSliderOut )
+ if ( mAllowHalfSliderOut )
mSlider->setPosition( mPadding.Left + (Int32)( (Float)mBackSlider->getSize().getWidth() * Percent ), mSlider->getPosition().y );
else
mSlider->setPosition( mPadding.Left + (Int32)( ( (Float)mDpSize.getWidth() - mPadding.Left - mPadding.Top - mSlider->getSize().getWidth() ) * Percent ), mSlider->getPosition().y );
} else {
- if ( mStyleConfig.AllowHalfSliderOut )
+ if ( mAllowHalfSliderOut )
mSlider->setPosition( mSlider->getPosition().x, mPadding.Top + (Int32)( (Float)mBackSlider->getSize().getHeight() * Percent ) );
else
mSlider->setPosition( mSlider->getPosition().x, mPadding.Top + (Int32)( ( (Float)mDpSize.getHeight() - mPadding.Top - mPadding.Bottom - mSlider->getSize().getHeight() ) * Percent ) );
@@ -355,12 +360,12 @@ UISlider * UISlider::setOrientation( const UI_ORIENTATION & orientation ) {
}
bool UISlider::getAllowHalfSliderOut() const {
- return mStyleConfig.AllowHalfSliderOut;
+ return mAllowHalfSliderOut;
}
void UISlider::setAllowHalfSliderOut( bool allowHalfSliderOut ) {
- if ( mStyleConfig.AllowHalfSliderOut != allowHalfSliderOut ) {
- mStyleConfig.AllowHalfSliderOut = allowHalfSliderOut;
+ if ( mAllowHalfSliderOut != allowHalfSliderOut ) {
+ mAllowHalfSliderOut = allowHalfSliderOut;
adjustChilds();
@@ -369,12 +374,12 @@ void UISlider::setAllowHalfSliderOut( bool allowHalfSliderOut ) {
}
bool UISlider::getExpandBackground() const {
- return mStyleConfig.ExpandBackground;
+ return mExpandBackground;
}
void UISlider::setExpandBackground( bool expandBackground ) {
- if ( mStyleConfig.ExpandBackground != expandBackground ) {
- mStyleConfig.ExpandBackground = expandBackground;
+ if ( mExpandBackground != expandBackground ) {
+ mExpandBackground = expandBackground;
adjustChilds();
@@ -456,7 +461,7 @@ bool UISlider::setAttribute( const NodeAttribute& attribute, const Uint32& state
Sizef UISlider::getMinimumSize() {
Float w = eemax( mBackSlider->getSkinSize().getWidth(), mSlider->getSkinSize().getWidth() );
Float h = eemax( mBackSlider->getSkinSize().getHeight(), mSlider->getSkinSize().getHeight() );
- return Sizef( w + ( mStyleConfig.AllowHalfSliderOut ? w : 0 ) + mPadding.Left + mPadding.Right, h + mPadding.Top + mPadding.Bottom );
+ return Sizef( w + ( mAllowHalfSliderOut ? w : 0 ) + mPadding.Left + mPadding.Right, h + mPadding.Top + mPadding.Bottom );
}
void UISlider::onAutoSize() {