From ead7fdc4ba4e7b3cd91de9d305f3329c06729e80 Mon Sep 17 00:00:00 2001 From: Nathan Brown Date: Sun, 9 Oct 2022 22:24:04 -0700 Subject: [PATCH] Main redact functionality --- src/Greenshot.Base/Interfaces/DrawingModes.cs | 3 +- .../Drawing/RedactionContainer.cs | 60 +++++++++++++++ src/Greenshot.Editor/Drawing/Surface.cs | 3 + .../Forms/ImageEditorForm.Designer.cs | 77 ++++++++++++------- src/Greenshot.Editor/Forms/ImageEditorForm.cs | 11 +++ 5 files changed, 126 insertions(+), 28 deletions(-) create mode 100644 src/Greenshot.Editor/Drawing/RedactionContainer.cs diff --git a/src/Greenshot.Base/Interfaces/DrawingModes.cs b/src/Greenshot.Base/Interfaces/DrawingModes.cs index cd84aea4f..38e3ca97f 100644 --- a/src/Greenshot.Base/Interfaces/DrawingModes.cs +++ b/src/Greenshot.Base/Interfaces/DrawingModes.cs @@ -35,6 +35,7 @@ namespace Greenshot.Base.Interfaces Bitmap, Path, SpeechBubble, - StepLabel + StepLabel, + Redact, } } \ No newline at end of file diff --git a/src/Greenshot.Editor/Drawing/RedactionContainer.cs b/src/Greenshot.Editor/Drawing/RedactionContainer.cs new file mode 100644 index 000000000..1b3154b20 --- /dev/null +++ b/src/Greenshot.Editor/Drawing/RedactionContainer.cs @@ -0,0 +1,60 @@ +using System; +using System.Drawing; +using System.Runtime.Serialization; +using Dapplo.Windows.Common.Extensions; +using Dapplo.Windows.Common.Structs; +using Greenshot.Base.Interfaces; +using Greenshot.Base.Interfaces.Drawing; + +namespace Greenshot.Editor.Drawing +{ + /// + /// Represents a redaction object on the Surface + /// + [Serializable] + public class RedactionContainer : RectangleContainer + { + private readonly Color lineColor = Color.Black; + private readonly Color fillColor = Color.Black; + private readonly int lineThickness = 0; + private readonly bool shadow = false; + + public RedactionContainer(ISurface parent) : base(parent) + { + Init(); + } + + /// + /// Do some logic to make sure all fields are initiated correctly + /// + /// StreamingContext + protected override void OnDeserialized(StreamingContext streamingContext) + { + base.OnDeserialized(streamingContext); + Init(); + } + + private void Init() + { + CreateDefaultAdorners(); + } + + protected override void InitializeFields() + { + } + + public override void Draw(Graphics graphics, RenderMode rm) + { + var rect = new NativeRect(Left, Top, Width, Height).Normalize(); + + DrawRectangle(rect, graphics, rm, lineThickness, lineColor, fillColor, shadow); + } + + public override bool ClickableAt(int x, int y) + { + var rect = new NativeRect(Left, Top, Width, Height).Normalize(); + + return RectangleClickableAt(rect, lineThickness, fillColor, x, y); + } + } +} diff --git a/src/Greenshot.Editor/Drawing/Surface.cs b/src/Greenshot.Editor/Drawing/Surface.cs index f050374a6..75cb41e21 100644 --- a/src/Greenshot.Editor/Drawing/Surface.cs +++ b/src/Greenshot.Editor/Drawing/Surface.cs @@ -754,6 +754,9 @@ namespace Greenshot.Editor.Drawing case DrawingModes.Rect: _undrawnElement = new RectangleContainer(this); break; + case DrawingModes.Redact: + _undrawnElement = new RedactionContainer(this); + break; case DrawingModes.Ellipse: _undrawnElement = new EllipseContainer(this); break; diff --git a/src/Greenshot.Editor/Forms/ImageEditorForm.Designer.cs b/src/Greenshot.Editor/Forms/ImageEditorForm.Designer.cs index c0a8f8a63..15e49fafd 100644 --- a/src/Greenshot.Editor/Forms/ImageEditorForm.Designer.cs +++ b/src/Greenshot.Editor/Forms/ImageEditorForm.Designer.cs @@ -62,6 +62,7 @@ namespace Greenshot.Editor.Forms { this.btnCursor = new GreenshotToolStripButton(); this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this.btnRect = new GreenshotToolStripButton(); + this.btnRedact = new GreenshotToolStripButton(); this.btnEllipse = new GreenshotToolStripButton(); this.btnLine = new GreenshotToolStripButton(); this.btnArrow = new GreenshotToolStripButton(); @@ -99,8 +100,9 @@ namespace Greenshot.Editor.Forms { this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); this.insert_window_toolstripmenuitem = new GreenshotToolStripMenuItem(); this.objectToolStripMenuItem = new GreenshotToolStripMenuItem(); - this.addRectangleToolStripMenuItem = new GreenshotToolStripMenuItem(); - this.addEllipseToolStripMenuItem = new GreenshotToolStripMenuItem(); + this.addRectangleToolStripMenuItem = new GreenshotToolStripMenuItem(); + this.redactToolStripMenuItem = new GreenshotToolStripMenuItem(); + this.addEllipseToolStripMenuItem = new GreenshotToolStripMenuItem(); this.drawLineToolStripMenuItem = new GreenshotToolStripMenuItem(); this.drawArrowToolStripMenuItem = new GreenshotToolStripMenuItem(); this.drawFreehandToolStripMenuItem = new GreenshotToolStripMenuItem(); @@ -329,6 +331,7 @@ namespace Greenshot.Editor.Forms { this.btnCursor, this.toolStripSeparator1, this.btnRect, + this.btnRedact, this.btnEllipse, this.btnLine, this.btnArrow, @@ -366,20 +369,30 @@ namespace Greenshot.Editor.Forms { // toolStripSeparator1 // this.toolStripSeparator1.Name = "toolStripSeparator1"; - // - // btnRect - // - this.btnRect.CheckOnClick = true; - this.btnRect.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.btnRect.Image = ((System.Drawing.Image)(resources.GetObject("btnRect.Image"))); - this.btnRect.ImageTransparentColor = System.Drawing.Color.Magenta; - this.btnRect.LanguageKey = "editor_drawrectangle"; - this.btnRect.Name = "btnRect"; - this.btnRect.Click += new System.EventHandler(this.BtnRectClick); - // - // btnEllipse - // - this.btnEllipse.CheckOnClick = true; + // + // btnRect + // + this.btnRect.CheckOnClick = true; + this.btnRect.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.btnRect.Image = ((System.Drawing.Image)(resources.GetObject("btnRect.Image"))); + this.btnRect.ImageTransparentColor = System.Drawing.Color.Magenta; + this.btnRect.LanguageKey = "editor_drawrectangle"; + this.btnRect.Name = "btnRect"; + this.btnRect.Click += new System.EventHandler(this.BtnRectClick); + // + // btnRedact + // + this.btnRedact.CheckOnClick = true; + this.btnRedact.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.btnRedact.Image = ((System.Drawing.Image)(resources.GetObject("btnRect.Image"))); + this.btnRedact.ImageTransparentColor = System.Drawing.Color.Magenta; + this.btnRedact.LanguageKey = "editor_drawrectangle"; + this.btnRedact.Name = "btnRedact"; + this.btnRedact.Click += new System.EventHandler(this.BtnRedactClick); + // + // btnEllipse + // + this.btnEllipse.CheckOnClick = true; this.btnEllipse.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; this.btnEllipse.Image = ((System.Drawing.Image)(resources.GetObject("btnEllipse.Image"))); this.btnEllipse.ImageTransparentColor = System.Drawing.Color.Magenta; @@ -688,6 +701,7 @@ namespace Greenshot.Editor.Forms { // this.objectToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.addRectangleToolStripMenuItem, + this.redactToolStripMenuItem, this.addEllipseToolStripMenuItem, this.drawLineToolStripMenuItem, this.drawArrowToolStripMenuItem, @@ -706,17 +720,24 @@ namespace Greenshot.Editor.Forms { this.objectToolStripMenuItem.Name = "objectToolStripMenuItem"; this.objectToolStripMenuItem.Size = new System.Drawing.Size(54, 20); this.objectToolStripMenuItem.Text = "Object"; - // - // addRectangleToolStripMenuItem - // - this.addRectangleToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("addRectangleToolStripMenuItem.Image"))); - this.addRectangleToolStripMenuItem.LanguageKey = "editor_drawrectangle"; - this.addRectangleToolStripMenuItem.Name = "addRectangleToolStripMenuItem"; - this.addRectangleToolStripMenuItem.Click += new System.EventHandler(this.AddRectangleToolStripMenuItemClick); - // - // addEllipseToolStripMenuItem - // - this.addEllipseToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("addEllipseToolStripMenuItem.Image"))); + // + // addRectangleToolStripMenuItem + // + this.addRectangleToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("addRectangleToolStripMenuItem.Image"))); + this.addRectangleToolStripMenuItem.LanguageKey = "editor_drawrectangle"; + this.addRectangleToolStripMenuItem.Name = "addRectangleToolStripMenuItem"; + this.addRectangleToolStripMenuItem.Click += new System.EventHandler(this.AddRectangleToolStripMenuItemClick); + // + // redactToolStripMenuItem + // + this.redactToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("addRectangleToolStripMenuItem.Image")));//TODO + this.redactToolStripMenuItem.LanguageKey = "editor_drawrectangle";//TODO + this.redactToolStripMenuItem.Name = "redactToolStripMenuItem"; + this.redactToolStripMenuItem.Click += new System.EventHandler(this.RedactToolStripMenuItemClick); + // + // addEllipseToolStripMenuItem + // + this.addEllipseToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("addEllipseToolStripMenuItem.Image"))); this.addEllipseToolStripMenuItem.LanguageKey = "editor_drawellipse"; this.addEllipseToolStripMenuItem.Name = "addEllipseToolStripMenuItem"; this.addEllipseToolStripMenuItem.Click += new System.EventHandler(this.AddEllipseToolStripMenuItemClick); @@ -2001,6 +2022,7 @@ namespace Greenshot.Editor.Forms { private GreenshotToolStripMenuItem addCounterToolStripMenuItem; private GreenshotToolStripMenuItem addEllipseToolStripMenuItem; private GreenshotToolStripMenuItem addRectangleToolStripMenuItem; + private GreenshotToolStripMenuItem redactToolStripMenuItem; private GreenshotToolStripMenuItem objectToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem undoToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem redoToolStripMenuItem; @@ -2025,6 +2047,7 @@ namespace Greenshot.Editor.Forms { private GreenshotToolStripButton btnEllipse; private GreenshotToolStripButton btnSave; private GreenshotToolStripButton btnRect; + private GreenshotToolStripButton btnRedact; private System.Windows.Forms.ToolStripContainer topToolStripContainer; private ToolStripEx destinationsToolStrip; private NonJumpingPanel panel1; diff --git a/src/Greenshot.Editor/Forms/ImageEditorForm.cs b/src/Greenshot.Editor/Forms/ImageEditorForm.cs index 87c3813c7..4b430c34e 100644 --- a/src/Greenshot.Editor/Forms/ImageEditorForm.cs +++ b/src/Greenshot.Editor/Forms/ImageEditorForm.cs @@ -689,6 +689,12 @@ namespace Greenshot.Editor.Forms RefreshFieldControls(); } + private void BtnRedactClick(object sender, EventArgs e) + { + _surface.DrawingMode = DrawingModes.Redact; + RefreshFieldControls(); + } + private void BtnTextClick(object sender, EventArgs e) { _surface.DrawingMode = DrawingModes.Text; @@ -768,6 +774,11 @@ namespace Greenshot.Editor.Forms BtnRectClick(sender, e); } + private void RedactToolStripMenuItemClick(object sender, EventArgs e) + { + BtnRedactClick(sender, e); + } + private void DrawFreehandToolStripMenuItemClick(object sender, EventArgs e) { BtnFreehandClick(sender, e);