Browse Source
Merge pull request #8174 from danielmayost/fixes/viewboxContainerBugs
Fix FlowDirection within Viewbox
pull/8227/head
Max Katz
4 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with
25 additions and
20 deletions
-
src/Avalonia.Base/Rendering/ImmediateRenderer.cs
-
src/Avalonia.Base/Rendering/SceneGraph/SceneBuilder.cs
-
src/Avalonia.Base/VisualExtensions.cs
|
|
|
@ -277,18 +277,20 @@ namespace Avalonia.Rendering |
|
|
|
var m = Matrix.CreateTranslation(visual.Bounds.Position); |
|
|
|
|
|
|
|
var renderTransform = Matrix.Identity; |
|
|
|
|
|
|
|
// this should be calculated BEFORE renderTransform
|
|
|
|
if (visual.HasMirrorTransform) |
|
|
|
{ |
|
|
|
var mirrorMatrix = new Matrix(-1.0, 0.0, 0.0, 1.0, visual.Bounds.Width, 0); |
|
|
|
renderTransform *= mirrorMatrix; |
|
|
|
} |
|
|
|
|
|
|
|
if (visual.RenderTransform != null) |
|
|
|
{ |
|
|
|
var origin = visual.RenderTransformOrigin.ToPixels(new Size(visual.Bounds.Width, visual.Bounds.Height)); |
|
|
|
var offset = Matrix.CreateTranslation(origin); |
|
|
|
renderTransform = (-offset) * visual.RenderTransform.Value * (offset); |
|
|
|
} |
|
|
|
|
|
|
|
if (visual.HasMirrorTransform) |
|
|
|
{ |
|
|
|
var mirrorMatrix = new Matrix(-1.0, 0.0, 0.0, 1.0, visual.Bounds.Width, 0); |
|
|
|
renderTransform *= mirrorMatrix; |
|
|
|
var finalTransform = (-offset) * visual.RenderTransform.Value * (offset); |
|
|
|
renderTransform *= finalTransform; |
|
|
|
} |
|
|
|
|
|
|
|
m = renderTransform * m; |
|
|
|
|
|
|
|
@ -188,19 +188,21 @@ namespace Avalonia.Rendering.SceneGraph |
|
|
|
|
|
|
|
var renderTransform = Matrix.Identity; |
|
|
|
|
|
|
|
if (visual.RenderTransform != null) |
|
|
|
{ |
|
|
|
var origin = visual.RenderTransformOrigin.ToPixels(new Size(visual.Bounds.Width, visual.Bounds.Height)); |
|
|
|
var offset = Matrix.CreateTranslation(origin); |
|
|
|
renderTransform = (-offset) * visual.RenderTransform.Value * (offset); |
|
|
|
} |
|
|
|
|
|
|
|
// this should be calculated BEFORE renderTransform
|
|
|
|
if (visual.HasMirrorTransform) |
|
|
|
{ |
|
|
|
var mirrorMatrix = new Matrix(-1.0, 0.0, 0.0, 1.0, visual.Bounds.Width, 0); |
|
|
|
renderTransform *= mirrorMatrix; |
|
|
|
} |
|
|
|
|
|
|
|
if (visual.RenderTransform != null) |
|
|
|
{ |
|
|
|
var origin = visual.RenderTransformOrigin.ToPixels(new Size(visual.Bounds.Width, visual.Bounds.Height)); |
|
|
|
var offset = Matrix.CreateTranslation(origin); |
|
|
|
var finalTransform = (-offset) * visual.RenderTransform.Value * (offset); |
|
|
|
renderTransform *= finalTransform; |
|
|
|
} |
|
|
|
|
|
|
|
m = renderTransform * m; |
|
|
|
|
|
|
|
using (contextImpl.BeginUpdate(node)) |
|
|
|
|
|
|
|
@ -101,6 +101,13 @@ namespace Avalonia |
|
|
|
|
|
|
|
while (v != ancestor) |
|
|
|
{ |
|
|
|
// this should be calculated BEFORE renderTransform
|
|
|
|
if (v.HasMirrorTransform) |
|
|
|
{ |
|
|
|
var mirrorMatrix = new Matrix(-1.0, 0.0, 0.0, 1.0, v.Bounds.Width, 0); |
|
|
|
result *= mirrorMatrix; |
|
|
|
} |
|
|
|
|
|
|
|
if (v.RenderTransform?.Value != null) |
|
|
|
{ |
|
|
|
var origin = v.RenderTransformOrigin.ToPixels(v.Bounds.Size); |
|
|
|
@ -110,12 +117,6 @@ namespace Avalonia |
|
|
|
result *= renderTransform; |
|
|
|
} |
|
|
|
|
|
|
|
if (v.HasMirrorTransform) |
|
|
|
{ |
|
|
|
var mirrorMatrix = new Matrix(-1.0, 0.0, 0.0, 1.0, v.Bounds.Width, 0); |
|
|
|
result *= mirrorMatrix; |
|
|
|
} |
|
|
|
|
|
|
|
var topLeft = v.Bounds.TopLeft; |
|
|
|
|
|
|
|
if (topLeft != default) |
|
|
|
|