diff --git a/src/Greenshot.Base/Interfaces/Drawing/Adorners/IAdorner.cs b/src/Greenshot.Base/Interfaces/Drawing/Adorners/IAdorner.cs
index 624c156b1..4dfa4811d 100644
--- a/src/Greenshot.Base/Interfaces/Drawing/Adorners/IAdorner.cs
+++ b/src/Greenshot.Base/Interfaces/Drawing/Adorners/IAdorner.cs
@@ -98,5 +98,15 @@ namespace Greenshot.Base.Interfaces.Drawing.Adorners
///
///
void AdjustToDpi(uint dpi);
+
+ ///
+ /// The color of the lines around the adorner
+ ///
+ Color OutlineColor { get; set; }
+
+ ///
+ /// The color of the fill of the adorner
+ ///
+ Color FillColor { get; set; }
}
}
\ No newline at end of file
diff --git a/src/Greenshot.Editor/Drawing/Adorners/AbstractAdorner.cs b/src/Greenshot.Editor/Drawing/Adorners/AbstractAdorner.cs
index 028306e24..dde10bb84 100644
--- a/src/Greenshot.Editor/Drawing/Adorners/AbstractAdorner.cs
+++ b/src/Greenshot.Editor/Drawing/Adorners/AbstractAdorner.cs
@@ -137,12 +137,36 @@ namespace Greenshot.Editor.Drawing.Adorners
_size = DpiHelper.ScaleWithDpi(DefaultSize, dpi);
}
+ public Color OutlineColor { get; set; } = Color.White;
+ public Color FillColor { get; set; } = Color.Black;
+
///
/// Draw the adorner
///
/// PaintEventArgs
public virtual void Paint(PaintEventArgs paintEventArgs)
{
+ Graphics targetGraphics = paintEventArgs.Graphics;
+
+ var bounds = BoundsOnSurface;
+ GraphicsState state = targetGraphics.Save();
+
+ targetGraphics.CompositingMode = CompositingMode.SourceCopy;
+
+ try
+ {
+ using var fillBrush = new SolidBrush(FillColor);
+ targetGraphics.FillRectangle(fillBrush, bounds);
+ using var lineBrush = new SolidBrush(OutlineColor);
+ using var pen = new Pen(lineBrush);
+ targetGraphics.DrawRectangle(pen, bounds);
+ }
+ catch
+ {
+ // Ignore, BUG-2065
+ }
+
+ targetGraphics.Restore(state);
}
///
diff --git a/src/Greenshot.Editor/Drawing/Adorners/MoveAdorner.cs b/src/Greenshot.Editor/Drawing/Adorners/MoveAdorner.cs
index ad1355ced..7c20e6722 100644
--- a/src/Greenshot.Editor/Drawing/Adorners/MoveAdorner.cs
+++ b/src/Greenshot.Editor/Drawing/Adorners/MoveAdorner.cs
@@ -136,31 +136,5 @@ namespace Greenshot.Editor.Drawing.Adorners
return new Point(x, y);
}
}
-
- ///
- /// Draw the adorner
- ///
- /// PaintEventArgs
- public override void Paint(PaintEventArgs paintEventArgs)
- {
- Graphics targetGraphics = paintEventArgs.Graphics;
-
- var bounds = BoundsOnSurface;
- GraphicsState state = targetGraphics.Save();
-
- targetGraphics.CompositingMode = CompositingMode.SourceCopy;
-
- try
- {
- targetGraphics.FillRectangle(Brushes.Black, bounds);
- targetGraphics.DrawRectangle(new Pen(Brushes.White), bounds);
- }
- catch
- {
- // Ignore, BUG-2065
- }
-
- targetGraphics.Restore(state);
- }
}
}
\ No newline at end of file
diff --git a/src/Greenshot.Editor/Drawing/Adorners/ResizeAdorner.cs b/src/Greenshot.Editor/Drawing/Adorners/ResizeAdorner.cs
index 052abaaa4..c99d4440f 100644
--- a/src/Greenshot.Editor/Drawing/Adorners/ResizeAdorner.cs
+++ b/src/Greenshot.Editor/Drawing/Adorners/ResizeAdorner.cs
@@ -164,23 +164,5 @@ namespace Greenshot.Editor.Drawing.Adorners
return new Point(x, y);
}
}
-
- ///
- /// Draw the adorner
- ///
- /// PaintEventArgs
- public override void Paint(PaintEventArgs paintEventArgs)
- {
- Graphics targetGraphics = paintEventArgs.Graphics;
-
- var bounds = BoundsOnSurface;
- GraphicsState state = targetGraphics.Save();
-
- targetGraphics.CompositingMode = CompositingMode.SourceCopy;
-
- targetGraphics.FillRectangle(Brushes.Black, bounds);
- targetGraphics.DrawRectangle(new Pen(Brushes.White), bounds);
- targetGraphics.Restore(state);
- }
}
}
\ No newline at end of file
diff --git a/src/Greenshot.Editor/Drawing/Adorners/TargetAdorner.cs b/src/Greenshot.Editor/Drawing/Adorners/TargetAdorner.cs
index 0dec40a5f..f39f535e6 100644
--- a/src/Greenshot.Editor/Drawing/Adorners/TargetAdorner.cs
+++ b/src/Greenshot.Editor/Drawing/Adorners/TargetAdorner.cs
@@ -29,11 +29,13 @@ namespace Greenshot.Editor.Drawing.Adorners
///
/// This implements the special "gripper" for the Speech-Bubble tail
///
- public class TargetAdorner : AbstractAdorner
+ public sealed class TargetAdorner : AbstractAdorner
{
- public TargetAdorner(IDrawableContainer owner, Point location) : base(owner)
+ public TargetAdorner(IDrawableContainer owner, Point location, Color? fillColor = null, Color? outlineColor = null) : base(owner)
{
Location = location;
+ FillColor = fillColor ?? Color.Green;
+ OutlineColor = outlineColor ?? Color.White;
}
///
@@ -90,19 +92,6 @@ namespace Greenshot.Editor.Drawing.Adorners
Owner.Invalidate();
}
- ///
- /// Draw the adorner
- ///
- /// PaintEventArgs
- public override void Paint(PaintEventArgs paintEventArgs)
- {
- Graphics targetGraphics = paintEventArgs.Graphics;
-
- var bounds = BoundsOnSurface;
- targetGraphics.FillRectangle(Brushes.Green, bounds);
- targetGraphics.DrawRectangle(new Pen(Brushes.White), bounds);
- }
-
///
/// Made sure this adorner is transformed
///
diff --git a/src/Greenshot.Editor/Drawing/DrawableContainer.cs b/src/Greenshot.Editor/Drawing/DrawableContainer.cs
index b07974e61..38eab8b3f 100644
--- a/src/Greenshot.Editor/Drawing/DrawableContainer.cs
+++ b/src/Greenshot.Editor/Drawing/DrawableContainer.cs
@@ -363,7 +363,8 @@ namespace Greenshot.Editor.Drawing
///
/// Initialize a target gripper
///
- protected void InitAdorner(Color gripperColor, Point location)
+ /// Point
+ protected void InitTargetAdorner(Point location)
{
_targetAdorner = new TargetAdorner(this, location);
Adorners.Add(_targetAdorner);
diff --git a/src/Greenshot.Editor/Drawing/SpeechbubbleContainer.cs b/src/Greenshot.Editor/Drawing/SpeechbubbleContainer.cs
index 0a19805e7..0e60765e9 100644
--- a/src/Greenshot.Editor/Drawing/SpeechbubbleContainer.cs
+++ b/src/Greenshot.Editor/Drawing/SpeechbubbleContainer.cs
@@ -62,7 +62,7 @@ namespace Greenshot.Editor.Drawing
protected override void OnDeserialized(StreamingContext streamingContext)
{
base.OnDeserialized(streamingContext);
- InitAdorner(Color.Green, _storedTargetGripperLocation);
+ InitTargetAdorner(_storedTargetGripperLocation);
}
public SpeechbubbleContainer(ISurface parent) : base(parent)
@@ -95,7 +95,7 @@ namespace Greenshot.Editor.Drawing
if (TargetAdorner == null)
{
_initialGripperPoint = new Point(mouseX, mouseY);
- InitAdorner(Color.Green, new Point(mouseX, mouseY));
+ InitTargetAdorner(new Point(mouseX, mouseY));
}
return base.HandleMouseDown(mouseX, mouseY);