PaintBucketTool.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. using PaintDotNet.Measurement.HistoryMementos;
  2. using System.Drawing;
  3. using System.Windows.Forms;
  4. namespace PaintDotNet.Measurement.Tools
  5. {
  6. public class PaintBucketTool : FloodToolBase
  7. {
  8. private Cursor cursorMouseUp;
  9. private Brush brush;
  10. protected override void OnMouseDown(MouseEventArgs e)
  11. {
  12. brush = AppEnvironment.CreateBrush((e.Button != MouseButtons.Left));
  13. Cursor = Cursors.WaitCursor;
  14. base.OnMouseDown(e);
  15. }
  16. protected override void OnMouseUp(MouseEventArgs e)
  17. {
  18. Cursor = cursorMouseUp;
  19. base.OnMouseUp(e);
  20. }
  21. protected override void OnFillRegionComputed(Point[][] polygonSet)
  22. {
  23. using (PdnGraphicsPath path = new PdnGraphicsPath())
  24. {
  25. path.AddPolygons(polygonSet);
  26. using (PdnRegion fillRegion = new PdnRegion(path))
  27. {
  28. Rectangle boundingBox = fillRegion.GetBoundsInt();
  29. Surface surface = ((BitmapLayer)ActiveLayer).Surface;
  30. RenderArgs ra = new RenderArgs(surface);
  31. HistoryMemento ha;
  32. using (PdnRegion affected = Utility.SimplifyAndInflateRegion(fillRegion))
  33. {
  34. ha = new BitmapHistoryMemento(Name, Image, DocumentWorkspace, DocumentWorkspace.GetActiveLayerIndex(), affected);
  35. }
  36. ra.Graphics.CompositingMode = AppEnvironment.GetCompositingMode();
  37. ra.Graphics.FillRegion(brush, fillRegion.GetRegionReadOnly());
  38. //HistoryStack.PushNewMemento(ha);
  39. ActiveLayer.Invalidate(boundingBox);
  40. Update();
  41. }
  42. }
  43. }
  44. protected override void OnActivate()
  45. {
  46. // cursor-transitions
  47. cursorMouseUp = new Cursor(PdnResources.GetResourceStream("Cursors.PaintBucketToolCursor.cur"));
  48. Cursor = cursorMouseUp;
  49. base.OnActivate();
  50. }
  51. protected override void OnDeactivate()
  52. {
  53. if (cursorMouseUp != null)
  54. {
  55. cursorMouseUp.Dispose();
  56. cursorMouseUp = null;
  57. }
  58. base.OnDeactivate();
  59. }
  60. public PaintBucketTool(IDocumentWorkspace documentWorkspace)
  61. : base(documentWorkspace,
  62. PdnResources.GetImageResource("Icons.PaintBucketIcon.png"),
  63. PdnResources.GetString("PaintBucketTool.Name"),
  64. PdnResources.GetString("PaintBucketTool.HelpText"),
  65. 'f',
  66. false,
  67. ToolBarConfigItems.Brush | ToolBarConfigItems.Antialiasing | ToolBarConfigItems.AlphaBlending)
  68. {
  69. }
  70. protected override void Dispose(bool disposing)
  71. {
  72. base.Dispose(disposing);
  73. if (disposing)
  74. {
  75. if (brush != null)
  76. {
  77. brush.Dispose();
  78. brush = null;
  79. }
  80. }
  81. }
  82. }
  83. }