Browse Source

Preserve Visual's size in render node and pass it to ThreadSafeRender

pull/2185/head
Nikita Tsukanov 7 years ago
parent
commit
31d2e34e6e
  1. 5
      src/Avalonia.Visuals/Rendering/DeferredRenderer.cs
  2. 5
      src/Avalonia.Visuals/Rendering/SceneGraph/IVisualNode.cs
  3. 1
      src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs
  4. 4
      src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs

5
src/Avalonia.Visuals/Rendering/DeferredRenderer.cs

@ -326,11 +326,8 @@ namespace Avalonia.Rendering
using (var fullCtx = new DrawingContext(context, false))
using (fullCtx.PushPostTransform(node.Transform))
using (fullCtx.PushTransformContainer())
critical.ThreadSafeRender(fullCtx, node.Bounds.Size, scaling);
critical.ThreadSafeRender(fullCtx, node.VisualSize, scaling);
context.Transform = savedTransform;
//critical.ThreadSafeRender()
}
private void Render(IDrawingContextImpl context, VisualNode node, IVisual layer, Rect clipBounds)

5
src/Avalonia.Visuals/Rendering/SceneGraph/IVisualNode.cs

@ -43,6 +43,11 @@ namespace Avalonia.Rendering.SceneGraph
/// Gets the layout bounds for the node in global coordinates.
/// </summary>
Rect LayoutBounds { get; }
/// <summary>
/// Gets the original visual size before transformations
/// </summary>
Size VisualSize { get; }
/// <summary>
/// Whether the node is clipped to <see cref="ClipBounds"/>.

1
src/Avalonia.Visuals/Rendering/SceneGraph/SceneBuilder.cs

@ -181,6 +181,7 @@ namespace Avalonia.Rendering.SceneGraph
node.ClipBounds = clipBounds;
node.ClipToBounds = clipToBounds;
node.LayoutBounds = globalBounds;
node.VisualSize = visual.Bounds.Size;
node.GeometryClip = visual.Clip?.PlatformImpl;
node.Opacity = opacity;

4
src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs

@ -60,6 +60,9 @@ namespace Avalonia.Rendering.SceneGraph
/// <inheritdoc/>
public Rect LayoutBounds { get; set; }
/// <inheritdoc/>
public Size VisualSize { get; set; }
/// <inheritdoc/>
public bool ClipToBounds { get; set; }
@ -221,6 +224,7 @@ namespace Avalonia.Rendering.SceneGraph
ClipBounds = ClipBounds,
ClipToBounds = ClipToBounds,
LayoutBounds = LayoutBounds,
VisualSize = VisualSize,
GeometryClip = GeometryClip,
_opacity = Opacity,
OpacityMask = OpacityMask,

Loading…
Cancel
Save