Skip to content

Commit 25153ba

Browse files
committed
feat(viewbox): .Arrange() on a viewbox will now reuse the Scale transform instead of creating a new one each time.
1 parent fe0931b commit 25153ba

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

src/Uno.UI/UI/Xaml/Controls/ViewBox/Viewbox.cs

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ namespace Windows.UI.Xaml.Controls
1818
public partial class Viewbox : global::Windows.UI.Xaml.FrameworkElement
1919
{
2020
private readonly Border _container;
21+
internal double scaleX { get; private set; }
22+
internal double scaleY { get; private set; }
2123

2224
public Viewbox()
2325
{
@@ -45,7 +47,7 @@ protected override Size MeasureOverride(Size availableSize)
4547
)
4648
);
4749

48-
var (scaleX, scaleY) = GetScale(availableSize, measuredSize);
50+
(scaleX, scaleY) = GetScale(availableSize, measuredSize);
4951

5052
return new Size(
5153
Math.Min(availableSize.Width, measuredSize.Width * scaleX),
@@ -55,13 +57,26 @@ protected override Size MeasureOverride(Size availableSize)
5557

5658
protected override Size ArrangeOverride(Size finalSize)
5759
{
60+
if(finalSize.Width == 0 || finalSize.Height == 0)
61+
{
62+
return default;
63+
}
64+
5865
var (scaleX, scaleY) = GetScale(finalSize, _container.DesiredSize);
5966

60-
_container.RenderTransform = new ScaleTransform()
67+
if (Math.Abs(scaleX - 1d) < 0.001d && Math.Abs(scaleY - 1d) < 0.001d)
6168
{
62-
ScaleX = scaleX,
63-
ScaleY = scaleY
64-
};
69+
_container.RenderTransform = null;
70+
}
71+
else
72+
{
73+
var transform = _container.RenderTransform as ScaleTransform ?? new ScaleTransform();
74+
transform.ScaleX = scaleX;
75+
transform.ScaleY = scaleY;
76+
transform.CenterX = finalSize.Width / 2d;
77+
transform.CenterY = finalSize.Height / 2d;
78+
_container.RenderTransform = transform;
79+
}
6580

6681
base.ArrangeElement(_container, new Rect(new Point(), _container.DesiredSize));
6782

0 commit comments

Comments
 (0)