diff --git a/bin/assets/layouts/test.xml b/bin/assets/layouts/test.xml index bd20663d4..3b486f8b2 100644 --- a/bin/assets/layouts/test.xml +++ b/bin/assets/layouts/test.xml @@ -25,7 +25,7 @@ - + diff --git a/include/eepp/ui/uiloader.hpp b/include/eepp/ui/uiloader.hpp index 3b6208c44..a33760dc7 100644 --- a/include/eepp/ui/uiloader.hpp +++ b/include/eepp/ui/uiloader.hpp @@ -68,7 +68,11 @@ class EE_API UILoader : public UIWidget { IntPtr mOp; bool mIndeterminate; + virtual void onAutoSize(); + virtual void onSizeChange(); + + virtual void onPaddingChange(); }; }} diff --git a/src/eepp/ui/uiloader.cpp b/src/eepp/ui/uiloader.cpp index 77a4ee33d..0b5046c31 100644 --- a/src/eepp/ui/uiloader.cpp +++ b/src/eepp/ui/uiloader.cpp @@ -63,8 +63,10 @@ void UILoader::update( const Time& time ) { if ( mOp == 1 && mArcAngle > 340 ) { mOp = -1; + mArcAngle = 340; } else if ( mOp == -1 && mArcAngle < 20 ) { mOp = 1; + mArcAngle = 20; } mArc.setArcAngle( mArcAngle ); @@ -110,7 +112,33 @@ const Color& UILoader::getFillColor() const { void UILoader::onSizeChange() { if ( mRadius == 0 ) { - setRadius( eemin( mDpSize.x, mDpSize.y ) / 2.f ); + setRadius( eemin( mDpSize.x - mPadding.Left - mPadding.Right, mDpSize.y - mPadding.Top - mPadding.Bottom ) / 2.f ); + } +} + +void UILoader::onPaddingChange() { + mRadius = 0; + + onSizeChange(); + + UIWidget::onPaddingChange(); +} + +void UILoader::onAutoSize() { + if ( mLayoutWidthRules == WRAP_CONTENT || mLayoutHeightRules == WRAP_CONTENT ) { + Sizef minSize( mDpSize ); + + if ( mLayoutWidthRules == WRAP_CONTENT ) { + minSize.x = eemax( minSize.x, 64.f ); + } + + if ( mLayoutHeightRules == WRAP_CONTENT ) { + minSize.y = eemax( minSize.y, 64.f ); + } + + setSize( minSize ); + + onSizeChange(); } }