csharpc-sharpdotnetxamlavaloniauicross-platformcross-platform-xamlavaloniaguimulti-platformuser-interfacedotnetcore
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.6 KiB
53 lines
1.6 KiB
using System;
|
|
using System.IO;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Windows.Media;
|
|
using System.Windows.Media.Imaging;
|
|
using CrossUI;
|
|
|
|
namespace Avalonia.RenderTests.WpfCompare;
|
|
|
|
public class CrossTestBase
|
|
{
|
|
private readonly string _groupName;
|
|
public CrossTestBase(string groupName)
|
|
{
|
|
_groupName = groupName;
|
|
}
|
|
|
|
protected void RenderAndCompare(CrossControl root, [CallerMemberName] string? testName = null, double dpi = 96)
|
|
{
|
|
var dir = Path.Combine(GetTestsDirectory(), "TestFiles", "CrossTests", _groupName);
|
|
if (!Directory.Exists(dir))
|
|
Directory.CreateDirectory(dir);
|
|
var path = Path.Combine(dir, testName + ".wpf.png");
|
|
|
|
var w = root.Width;
|
|
var h = root.Height;
|
|
var pw = (int)Math.Ceiling(w * dpi / 96);
|
|
var ph = (int)Math.Ceiling(h * dpi / 96);
|
|
|
|
var control = new WpfCrossControl(root);
|
|
control.Measure(new System.Windows.Size(w, h));
|
|
control.Arrange(new System.Windows.Rect(0, 0, w, h));
|
|
var bmp = new RenderTargetBitmap(pw, ph, dpi, dpi, PixelFormats.Default);
|
|
bmp.Render(control);
|
|
var encoder = new PngBitmapEncoder();
|
|
encoder.Frames.Add(BitmapFrame.Create(bmp));
|
|
using (var f = File.Create(path))
|
|
encoder.Save(f);
|
|
}
|
|
|
|
static string GetTestsDirectory()
|
|
{
|
|
var path = Directory.GetCurrentDirectory();
|
|
|
|
while (path.Length > 0 && Path.GetFileName(path) != "tests")
|
|
{
|
|
path = Path.GetDirectoryName(path)!;
|
|
}
|
|
|
|
return path;
|
|
}
|
|
|
|
}
|
|
|