Skip to content

Commit

Permalink
Use new file-scoped namespace declaration
Browse files Browse the repository at this point in the history
  • Loading branch information
wieslawsoltes committed Oct 7, 2021
1 parent bb54768 commit 66dc0e1
Show file tree
Hide file tree
Showing 465 changed files with 31,165 additions and 31,630 deletions.
279 changes: 139 additions & 140 deletions src/Avalonia.Screenshot/Capture.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,188 +10,187 @@
using Avalonia.Platform;
using Avalonia.Skia.Helpers;

namespace Avalonia.Screenshot
namespace Avalonia.Screenshot;

public static class CanvasRenderer
{
public static class CanvasRenderer
public static void Render(Control target, SKCanvas canvas, double dpi = 96, bool useDeferredRenderer = false)
{
public static void Render(Control target, SKCanvas canvas, double dpi = 96, bool useDeferredRenderer = false)
var renderTarget = new CanvasRenderTarget(canvas, dpi);
if (useDeferredRenderer)
{
var renderTarget = new CanvasRenderTarget(canvas, dpi);
if (useDeferredRenderer)
{
using var renderer = new DeferredRenderer(target, renderTarget);
renderer.Start();
var renderLoopTask = renderer as IRenderLoopTask;
renderLoopTask.Update(TimeSpan.Zero);
renderLoopTask.Render();
}
else
{
ImmediateRenderer.Render(target, renderTarget);
}
using var renderer = new DeferredRenderer(target, renderTarget);
renderer.Start();
var renderLoopTask = renderer as IRenderLoopTask;
renderLoopTask.Update(TimeSpan.Zero);
renderLoopTask.Render();
}
else
{
ImmediateRenderer.Render(target, renderTarget);
}
}
}

public class CanvasRenderTarget : IRenderTarget
{
private readonly SKCanvas _canvas;
private readonly double _dpi;
public class CanvasRenderTarget : IRenderTarget
{
private readonly SKCanvas _canvas;
private readonly double _dpi;

public CanvasRenderTarget(SKCanvas canvas, double dpi)
{
_canvas = canvas;
_dpi = dpi;
}
public CanvasRenderTarget(SKCanvas canvas, double dpi)
{
_canvas = canvas;
_dpi = dpi;
}

public IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
{
return DrawingContextHelper.WrapSkiaCanvas(_canvas, new Vector(_dpi, _dpi), visualBrushRenderer);
}
public IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
{
return DrawingContextHelper.WrapSkiaCanvas(_canvas, new Vector(_dpi, _dpi), visualBrushRenderer);
}

public void Dispose()
{
}
public void Dispose()
{
}
}

public static class PdfRenderer
public static class PdfRenderer
{
public static void Render(Control target, Size size, Stream stream, double dpi = 72, bool useDeferredRenderer = false)
{
public static void Render(Control target, Size size, Stream stream, double dpi = 72, bool useDeferredRenderer = false)
{
using var managedWStream = new SKManagedWStream(stream);
using var document = SKDocument.CreatePdf(stream, (float)dpi);
using var canvas = document.BeginPage((float)size.Width, (float)size.Height);
target.Measure(size);
target.Arrange(new Rect(size));
CanvasRenderer.Render(target, canvas, dpi, useDeferredRenderer);
}
using var managedWStream = new SKManagedWStream(stream);
using var document = SKDocument.CreatePdf(stream, (float)dpi);
using var canvas = document.BeginPage((float)size.Width, (float)size.Height);
target.Measure(size);
target.Arrange(new Rect(size));
CanvasRenderer.Render(target, canvas, dpi, useDeferredRenderer);
}
}

public static class PngRenderer
public static class PngRenderer
{
public static void Render(Control target, Size size, string path, double dpi = 96)
{
public static void Render(Control target, Size size, string path, double dpi = 96)
{
var pixelSize = new PixelSize((int)size.Width, (int)size.Height);
var dpiVector = new Vector(dpi, dpi);
using var bitmap = new RenderTargetBitmap(pixelSize, dpiVector);
target.Measure(size);
target.Arrange(new Rect(size));
bitmap.Render(target);
bitmap.Save(path);
}
var pixelSize = new PixelSize((int)size.Width, (int)size.Height);
var dpiVector = new Vector(dpi, dpi);
using var bitmap = new RenderTargetBitmap(pixelSize, dpiVector);
target.Measure(size);
target.Arrange(new Rect(size));
bitmap.Render(target);
bitmap.Save(path);
}
}

public static class SkpRenderer
public static class SkpRenderer
{
public static void Render(Control target, Size size, Stream stream, double dpi = 96, bool useDeferredRenderer = false)
{
public static void Render(Control target, Size size, Stream stream, double dpi = 96, bool useDeferredRenderer = false)
{
var bounds = SKRect.Create(new SKSize((float)size.Width, (float)size.Height));
using var pictureRecorder = new SKPictureRecorder();
using var canvas = pictureRecorder.BeginRecording(bounds);
target.Measure(size);
target.Arrange(new Rect(size));
CanvasRenderer.Render(target, canvas, dpi, useDeferredRenderer);
using var picture = pictureRecorder.EndRecording();
picture.Serialize(stream);
}
var bounds = SKRect.Create(new SKSize((float)size.Width, (float)size.Height));
using var pictureRecorder = new SKPictureRecorder();
using var canvas = pictureRecorder.BeginRecording(bounds);
target.Measure(size);
target.Arrange(new Rect(size));
CanvasRenderer.Render(target, canvas, dpi, useDeferredRenderer);
using var picture = pictureRecorder.EndRecording();
picture.Serialize(stream);
}
}

public static class SvgRenderer
public static class SvgRenderer
{
public static void Render(Control target, Size size, Stream stream, double dpi = 96, bool useDeferredRenderer = false)
{
public static void Render(Control target, Size size, Stream stream, double dpi = 96, bool useDeferredRenderer = false)
using var managedWStream = new SKManagedWStream(stream);
var bounds = SKRect.Create(new SKSize((float)size.Width, (float)size.Height));
using var canvas = SKSvgCanvas.Create(bounds, managedWStream);
target.Measure(size);
target.Arrange(new Rect(size));
CanvasRenderer.Render(target, canvas, dpi, useDeferredRenderer);
}
}

public static class XpsRenderer
{
public static void Render(Control target, Size size, Stream stream, double dpi = 72, bool useDeferredRenderer = false)
{
using var managedWStream = new SKManagedWStream(stream);
using var document = SKDocument.CreateXps(stream, (float)dpi);
using var canvas = document.BeginPage((float)size.Width, (float)size.Height);
target.Measure(size);
target.Arrange(new Rect(size));
CanvasRenderer.Render(target, canvas, dpi, useDeferredRenderer);
}
}

public static class Capture
{
public static void AttachCapture(this TopLevel root)
{
AttachCapture(root, new KeyGesture(Key.F6));
}

public static void AttachCapture(this TopLevel root, KeyGesture gesture)
{
root.AddHandler(InputElement.KeyDownEvent, async (sender, args) =>
{
using var managedWStream = new SKManagedWStream(stream);
var bounds = SKRect.Create(new SKSize((float)size.Width, (float)size.Height));
using var canvas = SKSvgCanvas.Create(bounds, managedWStream);
target.Measure(size);
target.Arrange(new Rect(size));
CanvasRenderer.Render(target, canvas, dpi, useDeferredRenderer);
}
if (args.Key == Key.F6)
{
await Save(root);
}
}, RoutingStrategies.Tunnel);
}

public static class XpsRenderer
public static async Task Save(TopLevel root)
{
public static void Render(Control target, Size size, Stream stream, double dpi = 72, bool useDeferredRenderer = false)
var dlg = new SaveFileDialog() { Title = "Save" };
dlg.Filters.Add(new FileDialogFilter() { Name = "Png", Extensions = { "png" } });
dlg.Filters.Add(new FileDialogFilter() { Name = "Svg", Extensions = { "svg" } });
dlg.Filters.Add(new FileDialogFilter() { Name = "Pdf", Extensions = { "pdf" } });
dlg.Filters.Add(new FileDialogFilter() { Name = "Xps", Extensions = { "xps" } });
dlg.Filters.Add(new FileDialogFilter() { Name = "Skp", Extensions = { "skp" } });
dlg.Filters.Add(new FileDialogFilter() { Name = "All", Extensions = { "*" } });
dlg.InitialFileName = "screenshot";
dlg.DefaultExtension = "png";
var result = await dlg.ShowAsync(root as Window);
if (result is { } path)
{
using var managedWStream = new SKManagedWStream(stream);
using var document = SKDocument.CreateXps(stream, (float)dpi);
using var canvas = document.BeginPage((float)size.Width, (float)size.Height);
target.Measure(size);
target.Arrange(new Rect(size));
CanvasRenderer.Render(target, canvas, dpi, useDeferredRenderer);
Save(root, root.Bounds.Size, path);
}
}

public static class Capture
public static void Save(Control? control, Size size, string path)
{
public static void AttachCapture(this TopLevel root)
if (control is null)
{
AttachCapture(root, new KeyGesture(Key.F6));
return;
}

public static void AttachCapture(this TopLevel root, KeyGesture gesture)
if (path.EndsWith("png", StringComparison.OrdinalIgnoreCase))
{
root.AddHandler(InputElement.KeyDownEvent, async (sender, args) =>
{
if (args.Key == Key.F6)
{
await Save(root);
}
}, RoutingStrategies.Tunnel);
PngRenderer.Render(control, size, path);
}

public static async Task Save(TopLevel root)
if (path.EndsWith("skp", StringComparison.OrdinalIgnoreCase))
{
var dlg = new SaveFileDialog() { Title = "Save" };
dlg.Filters.Add(new FileDialogFilter() { Name = "Png", Extensions = { "png" } });
dlg.Filters.Add(new FileDialogFilter() { Name = "Svg", Extensions = { "svg" } });
dlg.Filters.Add(new FileDialogFilter() { Name = "Pdf", Extensions = { "pdf" } });
dlg.Filters.Add(new FileDialogFilter() { Name = "Xps", Extensions = { "xps" } });
dlg.Filters.Add(new FileDialogFilter() { Name = "Skp", Extensions = { "skp" } });
dlg.Filters.Add(new FileDialogFilter() { Name = "All", Extensions = { "*" } });
dlg.InitialFileName = "screenshot";
dlg.DefaultExtension = "png";
var result = await dlg.ShowAsync(root as Window);
if (result is { } path)
{
Save(root, root.Bounds.Size, path);
}
using var stream = File.Create(path);
SkpRenderer.Render(control, size, stream, 96, false);
}

public static void Save(Control? control, Size size, string path)
if (path.EndsWith("svg", StringComparison.OrdinalIgnoreCase))
{
if (control is null)
{
return;
}

if (path.EndsWith("png", StringComparison.OrdinalIgnoreCase))
{
PngRenderer.Render(control, size, path);
}

if (path.EndsWith("skp", StringComparison.OrdinalIgnoreCase))
{
using var stream = File.Create(path);
SkpRenderer.Render(control, size, stream, 96, false);
}

if (path.EndsWith("svg", StringComparison.OrdinalIgnoreCase))
{
using var stream = File.Create(path);
SvgRenderer.Render(control, size, stream, 96, false);
}
using var stream = File.Create(path);
SvgRenderer.Render(control, size, stream, 96, false);
}

if (path.EndsWith("pdf", StringComparison.OrdinalIgnoreCase))
{
using var stream = File.Create(path);
PdfRenderer.Render(control, size, stream, 96, false);
}
if (path.EndsWith("pdf", StringComparison.OrdinalIgnoreCase))
{
using var stream = File.Create(path);
PdfRenderer.Render(control, size, stream, 96, false);
}

if (path.EndsWith("xps", StringComparison.OrdinalIgnoreCase))
{
using var stream = File.Create(path);
XpsRenderer.Render(control, size, stream, 96, false);
}
if (path.EndsWith("xps", StringComparison.OrdinalIgnoreCase))
{
using var stream = File.Create(path);
XpsRenderer.Render(control, size, stream, 96, false);
}
}
}
Loading

0 comments on commit 66dc0e1

Please sign in to comment.