|
|
@ -1160,35 +1160,21 @@ namespace Avalonia.Skia |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
var brushTransform = Matrix.CreateTranslation(-contentBounds.Position); |
|
|
var brushTransform = Matrix.Identity; |
|
|
|
|
|
|
|
|
contentBounds = contentBounds.TransformToAABB(brushTransform); |
|
|
|
|
|
|
|
|
|
|
|
var destinationRect = content.Brush.DestinationRect.ToPixels(targetRect.Size); |
|
|
var destinationRect = content.Brush.DestinationRect.ToPixels(targetRect.Size); |
|
|
|
|
|
|
|
|
if (tileBrush.Stretch != Stretch.None) |
|
|
|
|
|
{ |
|
|
|
|
|
//scale content to destination size
|
|
|
|
|
|
var scale = tileBrush.Stretch.CalculateScaling(destinationRect.Size, contentBounds.Size); |
|
|
|
|
|
|
|
|
|
|
|
var scaleTransform = Matrix.CreateScale(scale); |
|
|
|
|
|
|
|
|
|
|
|
contentBounds = contentBounds.TransformToAABB(scaleTransform); |
|
|
|
|
|
|
|
|
|
|
|
brushTransform *= scaleTransform; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var sourceRect = tileBrush.SourceRect.ToPixels(contentBounds); |
|
|
var sourceRect = tileBrush.SourceRect.ToPixels(contentBounds); |
|
|
|
|
|
|
|
|
//scale content to source size
|
|
|
brushTransform *= Matrix.CreateTranslation(-sourceRect.Position); |
|
|
if (contentBounds.Size != sourceRect.Size) |
|
|
|
|
|
|
|
|
if (sourceRect.Size != destinationRect.Size) |
|
|
{ |
|
|
{ |
|
|
var scale = tileBrush.Stretch.CalculateScaling(sourceRect.Size, contentBounds.Size); |
|
|
//scale source to destination size
|
|
|
|
|
|
var scale = tileBrush.Stretch.CalculateScaling(destinationRect.Size, sourceRect.Size); |
|
|
|
|
|
|
|
|
var scaleTransform = Matrix.CreateScale(scale); |
|
|
var scaleTransform = Matrix.CreateScale(scale); |
|
|
|
|
|
|
|
|
contentBounds = contentBounds.TransformToAABB(scaleTransform); |
|
|
|
|
|
|
|
|
|
|
|
brushTransform *= scaleTransform; |
|
|
brushTransform *= scaleTransform; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -1199,11 +1185,16 @@ namespace Avalonia.Skia |
|
|
var transformOrigin = content.TransformOrigin.ToPixels(targetRect); |
|
|
var transformOrigin = content.TransformOrigin.ToPixels(targetRect); |
|
|
var offset = Matrix.CreateTranslation(transformOrigin); |
|
|
var offset = Matrix.CreateTranslation(transformOrigin); |
|
|
transform = -offset * content.Transform.Value * offset; |
|
|
transform = -offset * content.Transform.Value * offset; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (content.Brush.TileMode == TileMode.None) |
|
|
if (tileBrush.TileMode == TileMode.None) |
|
|
{ |
|
|
{ |
|
|
brushTransform *= transform; |
|
|
brushTransform *= transform; |
|
|
|
|
|
|
|
|
|
|
|
destinationRect = destinationRect.TransformToAABB(transform); |
|
|
|
|
|
|
|
|
|
|
|
destinationRect = new Rect(0, 0, destinationRect.Left + destinationRect.Width, |
|
|
|
|
|
destinationRect.Top + destinationRect.Height); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (tileBrush.Stretch == Stretch.None && transform == Matrix.Identity) |
|
|
if (tileBrush.Stretch == Stretch.None && transform == Matrix.Identity) |
|
|
|