From a34b98b6fd531022f89a123e80b64d7cad3fcf85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Krysi=C5=84ski?= Date: Thu, 12 Jun 2025 12:48:19 +0200 Subject: [PATCH 1/4] Fixed absolute values and transform passing --- src/ColorPicker | 2 +- .../Helpers/Extensions/ColorHelpers.cs | 50 +++++++++++++++---- 2 files changed, 41 insertions(+), 11 deletions(-) diff --git a/src/ColorPicker b/src/ColorPicker index 56faff5af..c6a57b776 160000 --- a/src/ColorPicker +++ b/src/ColorPicker @@ -1 +1 @@ -Subproject commit 56faff5afcc6fc96b44b5caa6f15d0b3a902cd0a +Subproject commit c6a57b776302496822dd3171fff5d1b21a09b460 diff --git a/src/PixiEditor/Helpers/Extensions/ColorHelpers.cs b/src/PixiEditor/Helpers/Extensions/ColorHelpers.cs index 7a5468e37..9a7aba07a 100644 --- a/src/PixiEditor/Helpers/Extensions/ColorHelpers.cs +++ b/src/PixiEditor/Helpers/Extensions/ColorHelpers.cs @@ -1,7 +1,10 @@ using Avalonia; using Avalonia.Media; +using Avalonia.Skia; using Drawie.Backend.Core.ColorsImpl.Paintables; +using Drawie.Backend.Core.Numerics; using Drawie.Numerics; +using Drawie.Skia; using PixiEditor.Extensions.CommonApi.Palettes; using BackendColor = Drawie.Backend.Core.ColorsImpl.Color; using GradientStop = Drawie.Backend.Core.ColorsImpl.Paintables.GradientStop; @@ -47,17 +50,31 @@ internal static class ColorHelpers new VecD(linearGradientBrush.StartPoint.Point.X, linearGradientBrush.StartPoint.Point.Y), new VecD(linearGradientBrush.EndPoint.Point.X, linearGradientBrush.EndPoint.Point.Y), linearGradientBrush.GradientStops.Select(stop => - new GradientStop(new BackendColor(stop.Color.R, stop.Color.G, stop.Color.B, stop.Color.A), stop.Offset))), + new GradientStop(new BackendColor(stop.Color.R, stop.Color.G, stop.Color.B, stop.Color.A), stop.Offset))) + { + AbsoluteValues = linearGradientBrush.StartPoint.Unit == RelativeUnit.Absolute || + linearGradientBrush.EndPoint.Unit == RelativeUnit.Absolute, + Transform = linearGradientBrush.Transform != null ? ToDrawieMatrix(linearGradientBrush.Transform.Value) : null + }, IRadialGradientBrush radialGradientBrush => new RadialGradientPaintable( new VecD(radialGradientBrush.Center.Point.X, radialGradientBrush.Center.Point.Y), radialGradientBrush.RadiusX.Scalar, radialGradientBrush.GradientStops.Select(stop => - new GradientStop(new BackendColor(stop.Color.R, stop.Color.G, stop.Color.B, stop.Color.A), stop.Offset))), + new GradientStop(new BackendColor(stop.Color.R, stop.Color.G, stop.Color.B, stop.Color.A), stop.Offset))) + { + AbsoluteValues = radialGradientBrush.Center.Unit == RelativeUnit.Absolute || + radialGradientBrush.RadiusX.Unit == RelativeUnit.Absolute, + Transform = radialGradientBrush.Transform != null ? ToDrawieMatrix(radialGradientBrush.Transform.Value) : null + }, IConicGradientBrush conicGradientBrush => new SweepGradientPaintable( new VecD(conicGradientBrush.Center.Point.X, conicGradientBrush.Center.Point.Y), conicGradientBrush.Angle, conicGradientBrush.GradientStops.Select(stop => - new GradientStop(new BackendColor(stop.Color.R, stop.Color.G, stop.Color.B, stop.Color.A), stop.Offset))), + new GradientStop(new BackendColor(stop.Color.R, stop.Color.G, stop.Color.B, stop.Color.A), stop.Offset))) + { + AbsoluteValues = conicGradientBrush.Center.Unit == RelativeUnit.Absolute, + Transform = conicGradientBrush.Transform != null ? ToDrawieMatrix(conicGradientBrush.Transform.Value) : null + }, null => null, }; @@ -67,22 +84,25 @@ internal static class ColorHelpers ColorPaintable color => new SolidColorBrush(color.Color.ToColor()), LinearGradientPaintable linearGradientPaintable => new LinearGradientBrush { - StartPoint = new RelativePoint(linearGradientPaintable.Start.X, linearGradientPaintable.Start.Y, RelativeUnit.Absolute), - EndPoint = new RelativePoint(linearGradientPaintable.End.X, linearGradientPaintable.End.Y, RelativeUnit.Absolute), - GradientStops = ToAvaloniaGradientStops(linearGradientPaintable.GradientStops) + StartPoint = new RelativePoint(linearGradientPaintable.Start.X, linearGradientPaintable.Start.Y, paintable.AbsoluteValues ? RelativeUnit.Absolute : RelativeUnit.Relative), + EndPoint = new RelativePoint(linearGradientPaintable.End.X, linearGradientPaintable.End.Y, paintable.AbsoluteValues ? RelativeUnit.Absolute : RelativeUnit.Relative), + GradientStops = ToAvaloniaGradientStops(linearGradientPaintable.GradientStops), + Transform = linearGradientPaintable.Transform.HasValue ? new MatrixTransform(ToAvaloniaMatrix(linearGradientPaintable.Transform.Value)) : null }, RadialGradientPaintable radialGradientPaintable => new RadialGradientBrush { - Center = new RelativePoint(radialGradientPaintable.Center.X, radialGradientPaintable.Center.Y, RelativeUnit.Absolute), + Center = new RelativePoint(radialGradientPaintable.Center.X, radialGradientPaintable.Center.Y, paintable.AbsoluteValues ? RelativeUnit.Absolute : RelativeUnit.Relative), RadiusX = new RelativeScalar(radialGradientPaintable.Radius, RelativeUnit.Absolute), RadiusY = new RelativeScalar(radialGradientPaintable.Radius, RelativeUnit.Absolute), - GradientStops = ToAvaloniaGradientStops(radialGradientPaintable.GradientStops) + GradientStops = ToAvaloniaGradientStops(radialGradientPaintable.GradientStops), + Transform = radialGradientPaintable.Transform.HasValue ? new MatrixTransform(ToAvaloniaMatrix(radialGradientPaintable.Transform.Value)) : null }, SweepGradientPaintable conicGradientPaintable => new ConicGradientBrush { Angle = conicGradientPaintable.Angle, - Center = new RelativePoint(conicGradientPaintable.Center.X, conicGradientPaintable.Center.Y, RelativeUnit.Absolute), - GradientStops = ToAvaloniaGradientStops(conicGradientPaintable.GradientStops) + Center = new RelativePoint(conicGradientPaintable.Center.X, conicGradientPaintable.Center.Y, paintable.AbsoluteValues ? RelativeUnit.Absolute : RelativeUnit.Relative), + GradientStops = ToAvaloniaGradientStops(conicGradientPaintable.GradientStops), + Transform = conicGradientPaintable.Transform.HasValue ? new MatrixTransform(ToAvaloniaMatrix(conicGradientPaintable.Transform.Value)) : null }, null => null, _ => throw new NotImplementedException() @@ -98,4 +118,14 @@ internal static class ColorHelpers return stops; } + + private static Matrix ToAvaloniaMatrix(Matrix3X3 matrix) + { + return new Matrix(matrix.ScaleX, matrix.SkewY, matrix.SkewX, matrix.ScaleY, matrix.TransX, matrix.TransY); + } + + private static Matrix3X3 ToDrawieMatrix(Matrix matrix) + { + return matrix.ToSKMatrix().ToMatrix3X3(); + } } From 0dcf24032b73e40bfd03478ca2f9c38fa084e508 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Krysi=C5=84ski?= Date: Thu, 12 Jun 2025 12:51:48 +0200 Subject: [PATCH 2/4] Fixed fill change type --- .../UpdateableChangeExecutors/VectorPathToolExecutor.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/VectorPathToolExecutor.cs b/src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/VectorPathToolExecutor.cs index fd3f51e64..e350b94f2 100644 --- a/src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/VectorPathToolExecutor.cs +++ b/src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/VectorPathToolExecutor.cs @@ -180,6 +180,7 @@ internal class VectorPathToolExecutor : UpdateableChangeExecutor, IPathExecutorF VectorShapeChangeType changeType = name switch { nameof(IFillableShapeToolbar.Fill) => VectorShapeChangeType.Fill, + nameof(IFillableShapeToolbar.FillBrush) => VectorShapeChangeType.Fill, nameof(IShapeToolbar.StrokeBrush) => VectorShapeChangeType.Stroke, nameof(IShapeToolbar.ToolSize) => VectorShapeChangeType.Stroke, nameof(IShapeToolbar.AntiAliasing) => VectorShapeChangeType.OtherVisuals, From 8e6a2669b5be61e6ed039c0f05f67f9b58548275 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Krysi=C5=84ski?= Date: Thu, 12 Jun 2025 14:58:37 +0200 Subject: [PATCH 3/4] Update ColorPicker --- src/ColorPicker | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ColorPicker b/src/ColorPicker index c6a57b776..db1d4c6ff 160000 --- a/src/ColorPicker +++ b/src/ColorPicker @@ -1 +1 @@ -Subproject commit c6a57b776302496822dd3171fff5d1b21a09b460 +Subproject commit db1d4c6ffbb5d2275ca9d46fd5261906a0a778d3 From 620e500d8b8e7061252a16d58ea5e58b1a79b106 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Krysi=C5=84ski?= Date: Thu, 12 Jun 2025 15:14:06 +0200 Subject: [PATCH 4/4] Update ColorPicker --- src/ColorPicker | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ColorPicker b/src/ColorPicker index db1d4c6ff..66bae8cf2 160000 --- a/src/ColorPicker +++ b/src/ColorPicker @@ -1 +1 @@ -Subproject commit db1d4c6ffbb5d2275ca9d46fd5261906a0a778d3 +Subproject commit 66bae8cf20153b9273b10c7d37ac90dc57ef15bb