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();
}
}