using Minint.Core.Models; namespace Minint.Core.Services.Impl; public sealed class DrawingService : IDrawingService { public void ApplyBrush(MinintLayer layer, int cx, int cy, int radius, int colorIndex, int width, int height) { foreach (var (x, y) in GetBrushMask(cx, cy, radius, width, height)) layer.Pixels[y * width + x] = colorIndex; } public void ApplyEraser(MinintLayer layer, int cx, int cy, int radius, int width, int height) { foreach (var (x, y) in GetBrushMask(cx, cy, radius, width, height)) layer.Pixels[y * width + x] = 0; } public List<(int X, int Y)> GetBrushMask(int cx, int cy, int radius, int width, int height) { var mask = new List<(int, int)>(); int r = Math.Max(radius, 0); int r2 = r * r; int xMin = Math.Max(0, cx - r); int xMax = Math.Min(width - 1, cx + r); int yMin = Math.Max(0, cy - r); int yMax = Math.Min(height - 1, cy + r); for (int py = yMin; py <= yMax; py++) { int dy = py - cy; for (int px = xMin; px <= xMax; px++) { int dx = px - cx; if (dx * dx + dy * dy <= r2) mask.Add((px, py)); } } return mask; } }