/// file: RectanglePencil.cs /// Author: Maxime Rohmer /// Brief: A tool that paints a Rectangle /// Version: 0.1.0 /// Date: 17/06/2022 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 bool _isShiftPressed; private bool _isCtrlPressed; 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 bool IsShiftPressed { get => _isShiftPressed; set => _isShiftPressed = value; } public bool IsCtrlPressed { get => _isCtrlPressed; set => _isCtrlPressed = 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; foreach (List drawing in Drawings) { if (drawing.Count == 2) { List points; if (drawingCounter == Drawings.Count - 1) { points = Utils.ConvertRectangleIntoPositive(IsCtrlPressed, drawing[0], drawing[1]); } else { points = Utils.ConvertRectangleIntoPositive(false, drawing[0], drawing[1]); } gr.FillRectangle(new SolidBrush(Colors[drawingCounter]), new Rectangle(points[0], new Size(points[1].X - points[0].X, points[1].Y - points[0].Y))); } drawingCounter++; } } public string PaintSVG() { string result = ""; string newLine = Environment.NewLine; int drawingCounter = 0; foreach (List drawing in Drawings) { if (drawing.Count == 2) { List points; if (drawingCounter == Drawings.Count -1) { points = Utils.ConvertRectangleIntoPositive(IsCtrlPressed, drawing[0], drawing[1]); } else { points = Utils.ConvertRectangleIntoPositive(false, drawing[0], drawing[1]); } Point start = points[0]; Point end = points[1]; result += ""; result += newLine; } drawingCounter++; } return result; } public void Start(Color color, int width) { Utils.StandartStart(color, width); } public void Clear() { Utils.StandartClear(); } public void Stop() { List myDrawing = Drawings.Last(); Drawings[Drawings.Count - 1] = Utils.ConvertRectangleIntoPositive(IsCtrlPressed,myDrawing[0], myDrawing[1]); } 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); } } }