This commit is contained in:
ShrlAlgo
2025-07-11 09:20:23 +08:00
parent c7b104f44f
commit 4d35cadb56
840 changed files with 102347 additions and 11595 deletions

View File

@@ -0,0 +1,62 @@
using System.Windows;
using System.Windows.Media;
using WPFDark.Internals;
namespace WPFDark.Controls.Internals
{
public interface IHasTransform
{
ScaleTransform ScaleTransform { get; }
TranslateTransform TranslateTransform { get; }
}
public static class HasTransformExtensions
{
public static Point TransformPos(this IHasTransform self, double x, double y)
{
var s = self.ScaleTransform.ScaleX;
return new Point(
(x - self.TranslateTransform.X) / s,
(y - self.TranslateTransform.Y) / s);
}
public static ImmutableRect_double TransformRect(this IHasTransform self, double w, double h)
{
var s = self.ScaleTransform.ScaleX;
return new ImmutableRect_double(
-self.TranslateTransform.X / s,
-self.TranslateTransform.Y / s,
w / s,
h / s);
}
public static ImmutableRect_double TransformRect(this IHasTransform self, in ImmutableRect_double rect)
{
var s = self.ScaleTransform.ScaleX;
return new ImmutableRect_double(
(rect.X - self.TranslateTransform.X) / s,
(rect.Y - self.TranslateTransform.Y) / s,
rect.Width / s,
rect.Height / s);
}
public static void SetTransform(this IHasTransform self, double scale, double centerX, double centerY)
{
var d0 = self.TransformPos(centerX, centerY);
self.ScaleTransform.ScaleX = scale;
self.ScaleTransform.ScaleY = scale;
var d1 = self.TransformPos(centerX, centerY);
var diff = d1 - d0;
self.TranslateTransform.X += diff.X * scale;
self.TranslateTransform.Y += diff.Y * scale;
}
}
}