|
@@ -1,48 +1,19 @@
|
|
|
using System.Diagnostics.Contracts;
|
|
|
+using Drawie.Backend.Core.Surfaces;
|
|
|
using Drawie.Backend.Core.Surfaces.PaintImpl;
|
|
|
|
|
|
namespace PixiEditor.ChangeableDocument.Changeables.Graph;
|
|
|
|
|
|
-public sealed class Filter : IDisposable
|
|
|
+public abstract class Filter(Filter? previous)
|
|
|
{
|
|
|
- public Filter(ColorFilter? colorFilter, ImageFilter? imageFilter)
|
|
|
- {
|
|
|
- ColorFilter = colorFilter;
|
|
|
- ImageFilter = imageFilter;
|
|
|
- }
|
|
|
-
|
|
|
- public ColorFilter? ColorFilter { get; }
|
|
|
-
|
|
|
- public ImageFilter? ImageFilter { get; }
|
|
|
+ public Filter? Previous { get; } = previous;
|
|
|
|
|
|
- [Pure]
|
|
|
- public Filter Add(ColorFilter? colorFilter, ImageFilter? imageFilter)
|
|
|
+ public void Apply(DrawingSurface surface)
|
|
|
{
|
|
|
- ColorFilter? color = ColorFilter;
|
|
|
+ Previous?.Apply(surface);
|
|
|
|
|
|
- if (colorFilter != null)
|
|
|
- {
|
|
|
- color = ColorFilter == null ? colorFilter : ColorFilter.CreateCompose(colorFilter, ColorFilter);
|
|
|
- }
|
|
|
-
|
|
|
- ImageFilter? image = ImageFilter;
|
|
|
- if (imageFilter == null)
|
|
|
- {
|
|
|
- image = ImageFilter == null ? imageFilter : ImageFilter.CreateCompose(imageFilter, ImageFilter);
|
|
|
- }
|
|
|
-
|
|
|
- return new Filter(color, image);
|
|
|
- }
|
|
|
-
|
|
|
- [Pure]
|
|
|
- public Filter Add(ColorFilter? colorFilter) => Add(colorFilter, null);
|
|
|
-
|
|
|
- [Pure]
|
|
|
- public Filter Add(ImageFilter? imageFilter) => Add(null, imageFilter);
|
|
|
-
|
|
|
- public void Dispose()
|
|
|
- {
|
|
|
- ColorFilter?.Dispose();
|
|
|
- ImageFilter?.Dispose();
|
|
|
+ DoApply(surface);
|
|
|
}
|
|
|
+
|
|
|
+ protected abstract void DoApply(DrawingSurface surface);
|
|
|
}
|