From bbf3b66ed9644de9797e7787219a28c10a23fd14 Mon Sep 17 00:00:00 2001 From: maxluli Date: Thu, 16 Jun 2022 15:01:48 +0200 Subject: [PATCH] Added the rectangle Tool and the ability for each tool to be painted or force painted --- Paint_2/BezierPencil.cs | 3 + Paint_2/DotPencil.cs | 3 + Paint_2/Form1.cs | 11 ++- Paint_2/PaintTool.cs | 1 + Paint_2/Paint_2.csproj | 1 + Paint_2/Pencil.cs | 3 + Paint_2/Project.cs | 1 + Paint_2/RectanglePencil.cs | 148 +++++++++++++++++++++++++++++++++++++ 8 files changed, 170 insertions(+), 1 deletion(-) create mode 100644 Paint_2/RectanglePencil.cs diff --git a/Paint_2/BezierPencil.cs b/Paint_2/BezierPencil.cs index 0d60104..cd0fe98 100644 --- a/Paint_2/BezierPencil.cs +++ b/Paint_2/BezierPencil.cs @@ -17,6 +17,7 @@ namespace Paint_2 { private List> _drawings; private List> _drawingsRedo; + private bool _needsFullRefresh; private PaintToolUtils Utils; private List _colors; private List _colorsRedo; @@ -28,6 +29,7 @@ namespace Paint_2 public List> Drawings { get => _drawings; set => _drawings = value; } public List> DrawingsRedo { get => _drawingsRedo; set => _drawingsRedo = value; } + public bool NeedsFullRefresh { get => _needsFullRefresh; set => _needsFullRefresh = value; } public List Colors { get => _colors; set => _colors = value; } public List ColorsRedo { get => _colorsRedo; set => _colorsRedo = value; } public List Widths { get => _widths; set => _widths = value; } @@ -38,6 +40,7 @@ namespace Paint_2 public BezierPencil(string name) { + NeedsFullRefresh = false; Drawings = new List>(); DrawingsRedo = new List>(); Colors = new List(); diff --git a/Paint_2/DotPencil.cs b/Paint_2/DotPencil.cs index a6f061c..50eb057 100644 --- a/Paint_2/DotPencil.cs +++ b/Paint_2/DotPencil.cs @@ -19,6 +19,7 @@ namespace Paint_2 private List> _drawings; private List> _drawingsRedo; + private bool _needsFullRefresh; private PaintToolUtils Utils; private List _colors; private List _colorsRedo; @@ -30,6 +31,7 @@ namespace Paint_2 public List> Drawings { get => _drawings; set => _drawings = value; } public List> DrawingsRedo { get => _drawingsRedo; set => _drawingsRedo = value; } + public bool NeedsFullRefresh { get => _needsFullRefresh; set => _needsFullRefresh = value; } public List Colors { get => _colors; set => _colors = value; } public List ColorsRedo { get => _colorsRedo; set => _colorsRedo = value; } public List Widths { get => _widths; set => _widths = value; } @@ -47,6 +49,7 @@ namespace Paint_2 Widths = new List(); WidthsRedo = new List(); Name = name; + NeedsFullRefresh = false; Utils = new PaintToolUtils(this); } diff --git a/Paint_2/Form1.cs b/Paint_2/Form1.cs index 20b6780..4bb5639 100644 --- a/Paint_2/Form1.cs +++ b/Paint_2/Form1.cs @@ -95,7 +95,16 @@ namespace Paint_2 lsbTools.DataSource = Project.AvaibleTools; DebugLabel.Text = ""; - canvas.Image = Project.PaintLayers(); + PaintTool currentTool = Project.GetCurrentTool(SelectedLayers); + if (currentTool.NeedsFullRefresh) + { + canvas.Image = Project.ForcePaintLayers(); + } + else + { + canvas.Image = Project.PaintLayers(); + } + lblSelectedColor.Text = ColorToString(Project.GetCurrentToolColor(SelectedLayers)); btnSelectedColor.BackColor = Project.GetCurrentToolColor(SelectedLayers); diff --git a/Paint_2/PaintTool.cs b/Paint_2/PaintTool.cs index c799d18..4ddf8f5 100644 --- a/Paint_2/PaintTool.cs +++ b/Paint_2/PaintTool.cs @@ -22,6 +22,7 @@ namespace Paint_2 Color Color { get; set; } List Widths { get; set; } List WidthsRedo { get; set; } + bool NeedsFullRefresh { get; set; } int Width { get; set; } string Name { get; set; } diff --git a/Paint_2/Paint_2.csproj b/Paint_2/Paint_2.csproj index 6cf542f..ba90cc9 100644 --- a/Paint_2/Paint_2.csproj +++ b/Paint_2/Paint_2.csproj @@ -66,6 +66,7 @@ + ColorPicker.cs diff --git a/Paint_2/Pencil.cs b/Paint_2/Pencil.cs index c6b258d..599c45e 100644 --- a/Paint_2/Pencil.cs +++ b/Paint_2/Pencil.cs @@ -20,6 +20,7 @@ namespace Paint_2 private List> _drawings; private List> _drawingsRedo; private PaintToolUtils Utils; + private bool _needsFullRefresh; private List _colors; private List _colorsRedo; private List _widths; @@ -37,6 +38,7 @@ namespace Paint_2 public Color Color { get => _color; set => _color = value; } public string Name { get => _name; set => _name = value; } public int Width { get => _width; set => _width = value; } + public bool NeedsFullRefresh { get => _needsFullRefresh; set => _needsFullRefresh = value; } public Pencil(string name) { @@ -48,6 +50,7 @@ namespace Paint_2 WidthsRedo = new List(); Name = name; Utils = new PaintToolUtils(this); + NeedsFullRefresh = false; } public void Add(Point point) { diff --git a/Paint_2/Project.cs b/Paint_2/Project.cs index deeb6e7..f3e5429 100644 --- a/Paint_2/Project.cs +++ b/Paint_2/Project.cs @@ -46,6 +46,7 @@ namespace Paint_2 AvaibleTools.Add(new Pencil("Default Pencil")); AvaibleTools.Add(new DotPencil("Dotted Line")); AvaibleTools.Add(new BezierPencil("Bezier Generator")); + AvaibleTools.Add(new RectanglePencil("Rectangle tool")); //We create a single first layer with the default toolSet Layers = new List(); diff --git a/Paint_2/RectanglePencil.cs b/Paint_2/RectanglePencil.cs new file mode 100644 index 0000000..b4a71f1 --- /dev/null +++ b/Paint_2/RectanglePencil.cs @@ -0,0 +1,148 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Drawing; + +namespace Paint_2 +{ + internal class RectanglePencil:PaintTool + { + private List> _drawings; + private List> _drawingsRedo; + private bool _needsFullRefresh; + private PaintToolUtils Utils; + private List _colors; + private List _colorsRedo; + private List _widths; + private List _widthsRedo; + private Color _color; + private string _name; + private int _width; + + public List> Drawings { get => _drawings; set => _drawings = value; } + public List> DrawingsRedo { get => _drawingsRedo; set => _drawingsRedo = value; } + public bool NeedsFullRefresh { get => _needsFullRefresh; set => _needsFullRefresh = value; } + public List Colors { get => _colors; set => _colors = value; } + public List ColorsRedo { get => _colorsRedo; set => _colorsRedo = value; } + public List Widths { get => _widths; set => _widths = value; } + public List WidthsRedo { get => _widthsRedo; set => _widthsRedo = value; } + public Color Color { get => _color; set => _color = value; } + public string Name { get => _name; set => _name = value; } + public int Width { get => _width; set => _width = value; } + + public RectanglePencil(string name) + { + NeedsFullRefresh = true; + Drawings = new List>(); + DrawingsRedo = new List>(); + Colors = new List(); + ColorsRedo = new List(); + Widths = new List(); + WidthsRedo = new List(); + Name = name; + Utils = new PaintToolUtils(this); + } + public void Add(Point point) + { + List myDrawing = Drawings[Drawings.Count - 1]; + if (myDrawing.Count == 0 || myDrawing.Count == 1) + { + myDrawing.Add(point); + } + else + { + myDrawing[1] = point; + } + Drawings[Drawings.Count - 1] = myDrawing; + } + public void Paint(Bitmap canvas) + { + Graphics gr = Graphics.FromImage(canvas); + int drawingCounter = 0; + Size pointSize; + + foreach (List drawing in Drawings) + { + if (drawing.Count == 2) + { + Point p1 = drawing[0]; + Point p2 = drawing[1]; + + Point start = new Point(0,0); + Point end = new Point(0,0); + + if (p2.X > p1.X) + { + start.X = p1.X; + end.X = p2.X; + } + else + { + start.X = p2.X; + end.X = p1.X; + } + if (p2.Y > p1.Y) + { + start.Y = p1.Y; + end.Y = p2.Y; + } + else + { + start.Y = p2.Y; + end.Y = p1.Y; + } + + gr.FillRectangle(new SolidBrush(Colors[drawingCounter]), new Rectangle(start, new Size(end.X - start.X, end.Y - start.Y))); + } + drawingCounter++; + } + } + public void Start(Color color, int width) + { + Utils.StandartStart(color, width); + } + public void Clear() + { + Utils.StandartClear(); + } + public void Stop() + { + for (int i = 0; i < Drawings.Count; i++) + { + List Drawing = Drawings[i]; + } + } + private Bitmap PostProcessing(List Drawing, Bitmap bmp, int width, Color color) + { + return bmp; + } + public List GetLastColors(int colorNumber) + { + return Utils.SandartGetLastColors(colorNumber); + } + public override string ToString() + { + return Name; + } + + public void Undo() + { + Utils.StandartUndo(); + } + + public void Redo() + { + Utils.StandartRedo(); + } + + public object Clone() + { + RectanglePencil result = new RectanglePencil(Name); + result.Width = Width; + result.Color = Color; + return (Object)(result); + } + } +}