diff --git a/src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs b/src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs
index d9f0260e39..c217290226 100644
--- a/src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs
+++ b/src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs
@@ -133,7 +133,7 @@ namespace Avalonia.Controls.Presenters
return false;
}
- var rect = targetRect * transform.Value;
+ var rect = targetRect.TransformToAABB(transform.Value);
var offset = Offset;
var result = false;
diff --git a/src/Avalonia.Visuals/Rect.cs b/src/Avalonia.Visuals/Rect.cs
index 7093250ceb..dec1c79df8 100644
--- a/src/Avalonia.Visuals/Rect.cs
+++ b/src/Avalonia.Visuals/Rect.cs
@@ -183,7 +183,7 @@ namespace Avalonia
}
///
- /// Multiplies a rectangle by a vector.
+ /// Multiplies a rectangle by a scaling vector.
///
/// The rectangle.
/// The vector scale.
@@ -197,17 +197,6 @@ namespace Avalonia
rect.Height * scale.Y);
}
- ///
- /// Transforms a rectangle by a matrix and returns the axis-aligned bounding box.
- ///
- /// The rectangle.
- /// The matrix.
- /// The axis-aligned bounding box.
- public static Rect operator *(Rect rect, Matrix matrix)
- {
- return new Rect(rect.TopLeft * matrix, rect.BottomRight * matrix);
- }
-
///
/// Divides a rectangle by a vector.
///
diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/GeometryNode.cs b/src/Avalonia.Visuals/Rendering/SceneGraph/GeometryNode.cs
index 987cbf3d27..14a1162fd4 100644
--- a/src/Avalonia.Visuals/Rendering/SceneGraph/GeometryNode.cs
+++ b/src/Avalonia.Visuals/Rendering/SceneGraph/GeometryNode.cs
@@ -11,7 +11,7 @@ namespace Avalonia.Rendering.SceneGraph
{
public GeometryNode(Matrix transform, IBrush brush, Pen pen, IGeometryImpl geometry)
{
- Bounds = geometry.Bounds * transform;
+ Bounds = geometry.Bounds.TransformToAABB(transform);
Transform = transform;
Brush = brush;
Pen = pen;
diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/ImageNode.cs b/src/Avalonia.Visuals/Rendering/SceneGraph/ImageNode.cs
index a11aa6f330..77cbba4181 100644
--- a/src/Avalonia.Visuals/Rendering/SceneGraph/ImageNode.cs
+++ b/src/Avalonia.Visuals/Rendering/SceneGraph/ImageNode.cs
@@ -11,7 +11,7 @@ namespace Avalonia.Rendering.SceneGraph
{
public ImageNode(Matrix transform, IBitmapImpl source, double opacity, Rect sourceRect, Rect destRect)
{
- Bounds = destRect * transform;
+ Bounds = destRect.TransformToAABB(transform);
Transform = transform;
Source = source;
Opacity = opacity;
diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/RectangleNode.cs b/src/Avalonia.Visuals/Rendering/SceneGraph/RectangleNode.cs
index fd490e1cea..e73684afa6 100644
--- a/src/Avalonia.Visuals/Rendering/SceneGraph/RectangleNode.cs
+++ b/src/Avalonia.Visuals/Rendering/SceneGraph/RectangleNode.cs
@@ -10,7 +10,7 @@ namespace Avalonia.Rendering.SceneGraph
{
public RectangleNode(Matrix transform, IBrush brush, Pen pen, Rect rect, float cornerRadius)
{
- Bounds = (rect * transform).Inflate(pen?.Thickness ?? 0);
+ Bounds = rect.TransformToAABB(transform).Inflate(pen?.Thickness ?? 0);
Transform = transform;
Brush = brush;
Pen = pen;
diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs b/src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs
index add79086c6..7071320118 100644
--- a/src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs
+++ b/src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs
@@ -155,7 +155,7 @@ namespace Avalonia.Rendering.SceneGraph
forceRecurse = forceRecurse || node.Transform != contextImpl.Transform;
node.Transform = contextImpl.Transform;
- node.ClipBounds = (bounds * node.Transform).Intersect(clip);
+ node.ClipBounds = bounds.TransformToAABB(node.Transform).Intersect(clip);
node.ClipToBounds = clipToBounds;
node.GeometryClip = visual.Clip;
node.Opacity = opacity;
diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/TextNode.cs b/src/Avalonia.Visuals/Rendering/SceneGraph/TextNode.cs
index 681bb23423..2bddea88bf 100644
--- a/src/Avalonia.Visuals/Rendering/SceneGraph/TextNode.cs
+++ b/src/Avalonia.Visuals/Rendering/SceneGraph/TextNode.cs
@@ -11,7 +11,7 @@ namespace Avalonia.Rendering.SceneGraph
{
public TextNode(Matrix transform, IBrush foreground, Point origin, IFormattedTextImpl text)
{
- Bounds = new Rect(origin, text.Size) * transform;
+ Bounds = new Rect(origin, text.Size).TransformToAABB(transform);
Transform = transform;
Foreground = foreground;
Origin = origin;