ClearRegionOperation.cs 1.0 KB

1234567891011121314151617181920212223242526272829303132333435
  1. using ChunkyImageLib.DataHolders;
  2. using SkiaSharp;
  3. namespace ChunkyImageLib.Operations;
  4. internal class ClearRegionOperation : IDrawOperation
  5. {
  6. Vector2i pos;
  7. Vector2i size;
  8. public bool IgnoreEmptyChunks => true;
  9. public ClearRegionOperation(Vector2i pos, Vector2i size)
  10. {
  11. this.pos = pos;
  12. this.size = size;
  13. }
  14. public void DrawOnChunk(Chunk chunk, Vector2i chunkPos)
  15. {
  16. Vector2i convPos = OperationHelper.ConvertForResolution(pos, chunk.Resolution);
  17. Vector2i convSize = OperationHelper.ConvertForResolution(size, chunk.Resolution);
  18. chunk.Surface.SkiaSurface.Canvas.Save();
  19. chunk.Surface.SkiaSurface.Canvas.ClipRect(SKRect.Create(convPos - chunkPos.Multiply(chunk.PixelSize), convSize));
  20. chunk.Surface.SkiaSurface.Canvas.Clear();
  21. chunk.Surface.SkiaSurface.Canvas.Restore();
  22. }
  23. public HashSet<Vector2i> FindAffectedChunks()
  24. {
  25. return OperationHelper.FindChunksFullyInsideRectangle(pos, size, ChunkPool.FullChunkSize);
  26. }
  27. public void Dispose() { }
  28. }