|
@@ -89,7 +89,7 @@ public abstract class RenderNode : Node, IHighDpiRenderNode
|
|
|
|
|
|
protected abstract void OnPaint(RenderContext context, DrawingSurface surface);
|
|
|
|
|
|
- private void RenderPreviews(RenderContext ctx)
|
|
|
+ protected void RenderPreviews(RenderContext ctx)
|
|
|
{
|
|
|
var previewToRender = ctx.GetPreviewTexturesForNode(Id);
|
|
|
if (previewToRender == null || previewToRender.Count == 0)
|
|
@@ -106,14 +106,22 @@ public abstract class RenderNode : Node, IHighDpiRenderNode
|
|
|
int saved = preview.Texture.DrawingSurface.Canvas.Save();
|
|
|
preview.Texture.DrawingSurface.Canvas.Clear();
|
|
|
|
|
|
- VecD scaling = PreviewUtility.CalculateUniformScaling(ctx.RenderOutputSize, preview.Texture.Size);
|
|
|
- VecD offset = PreviewUtility.CalculateCenteringOffset(ctx.RenderOutputSize, preview.Texture.Size, scaling);
|
|
|
+ var bounds = GetPreviewBounds(ctx, preview.ElementToRender);
|
|
|
+ if (bounds == null)
|
|
|
+ {
|
|
|
+ bounds = new RectD(0, 0, ctx.RenderOutputSize.X, ctx.RenderOutputSize.Y);
|
|
|
+ }
|
|
|
+
|
|
|
+ VecD scaling = PreviewUtility.CalculateUniformScaling(bounds.Value.Size, preview.Texture.Size);
|
|
|
+ VecD offset = PreviewUtility.CalculateCenteringOffset(bounds.Value.Size, preview.Texture.Size, scaling);
|
|
|
RenderContext adjusted =
|
|
|
- PreviewUtility.CreatePreviewContext(ctx, scaling, ctx.RenderOutputSize, preview.Texture.Size);
|
|
|
+ PreviewUtility.CreatePreviewContext(ctx, scaling, bounds.Value.Size, preview.Texture.Size);
|
|
|
|
|
|
preview.Texture.DrawingSurface.Canvas.Translate((float)offset.X, (float)offset.Y);
|
|
|
preview.Texture.DrawingSurface.Canvas.Scale((float)scaling.X, (float)scaling.Y);
|
|
|
+ preview.Texture.DrawingSurface.Canvas.Translate((float)-bounds.Value.X, (float)-bounds.Value.Y);
|
|
|
|
|
|
+ adjusted.RenderSurface = preview.Texture.DrawingSurface;
|
|
|
RenderPreview(preview.Texture.DrawingSurface, adjusted, preview.ElementToRender);
|
|
|
preview.Texture.DrawingSurface.Canvas.RestoreToCount(saved);
|
|
|
}
|