diff --git a/Greenshot/Drawing/DrawableContainer.cs b/Greenshot/Drawing/DrawableContainer.cs index 89747bbb7..78ba171fd 100644 --- a/Greenshot/Drawing/DrawableContainer.cs +++ b/Greenshot/Drawing/DrawableContainer.cs @@ -559,7 +559,7 @@ namespace Greenshot.Drawing { ResumeLayout(); } - public void HideGrippers() { + public virtual void HideGrippers() { SuspendLayout(); if (_grippers != null) { for (int i = 0; i < _grippers.Length; i++) { diff --git a/Greenshot/Drawing/SpeechbubbleContainer.cs b/Greenshot/Drawing/SpeechbubbleContainer.cs index 1286a44bc..33d315fc9 100644 --- a/Greenshot/Drawing/SpeechbubbleContainer.cs +++ b/Greenshot/Drawing/SpeechbubbleContainer.cs @@ -43,7 +43,7 @@ namespace Greenshot.Drawing { /// We set our own field values /// protected override void InitializeFields() { - AddField(GetType(), FieldType.LINE_THICKNESS, 0); + AddField(GetType(), FieldType.LINE_THICKNESS, 2); AddField(GetType(), FieldType.LINE_COLOR, Color.Blue); AddField(GetType(), FieldType.SHADOW, false); AddField(GetType(), FieldType.FONT_ITALIC, false); @@ -68,7 +68,7 @@ namespace Greenshot.Drawing { if (TargetGripper == null) { InitTargetGripper(Color.Green, new Point(mouseX, mouseY)); } - return base.HandleMouseDown(mouseX, mouseY); + return base.HandleMouseDown(mouseX + 20, mouseY + 20); } public override Rectangle DrawingBounds { @@ -93,9 +93,9 @@ namespace Greenshot.Drawing { bool lineVisible = (lineThickness > 0 && Colors.IsVisible(lineColor)); Rectangle rect = GuiRectangle.GetGuiRectangle(Left, Top, Width, Height); - int tailAngle = 90 + (int)GeometryHelper.Angle2D(Left + (Width / 2), Top + (Height / 2), TargetGripper.Left, TargetGripper.Top); - int tailLength = GeometryHelper.Distance2D(Left + (Width / 2), Top + (Height / 2), TargetGripper.Left, TargetGripper.Top); - int tailWidth = (Math.Abs(Width) + Math.Abs(Height)) / 20; + int tailAngle = 90 + (int)GeometryHelper.Angle2D(rect.Left + (rect.Width / 2), rect.Top + (rect.Height / 2), TargetGripper.Left, TargetGripper.Top); + int tailLength = GeometryHelper.Distance2D(rect.Left + (rect.Width / 2), rect.Top + (rect.Height / 2), TargetGripper.Left, TargetGripper.Top); + int tailWidth = (Math.Abs(rect.Width) + Math.Abs(rect.Height)) / 20; GraphicsPath bubble = new GraphicsPath(); int CornerRadius = 30; @@ -118,9 +118,9 @@ namespace Greenshot.Drawing { GraphicsState state = graphics.Save(); // draw the tail border where the bubble is not visible using (Region clipRegion = new Region(bubble)) { - clipRegion.Translate(Left, Top); + clipRegion.Translate(rect.Left, rect.Top); graphics.SetClip(clipRegion, CombineMode.Exclude); - graphics.TranslateTransform(Left + (Width / 2), Top + (Height / 2)); + graphics.TranslateTransform(rect.Left + (rect.Width / 2), rect.Top + (rect.Height / 2)); graphics.RotateTransform(tailAngle); using (Pen pen = new Pen(lineColor, lineThickness)) { graphics.DrawPath(pen, tail); @@ -132,7 +132,7 @@ namespace Greenshot.Drawing { if (Colors.IsVisible(fillColor)) { //draw the bubbleshape state = graphics.Save(); - graphics.TranslateTransform(Left, Top); + graphics.TranslateTransform(rect.Left, rect.Top); using (Brush brush = new SolidBrush(fillColor)) { graphics.FillPath(brush, bubble); } @@ -147,11 +147,11 @@ namespace Greenshot.Drawing { Matrix transformMatrix = new Matrix(); transformMatrix.Rotate(tailAngle); clipRegion.Transform(transformMatrix); - clipRegion.Translate(Left + (Width / 2), Top + (Height / 2)); + clipRegion.Translate(rect.Left + (rect.Width / 2), rect.Top + (rect.Height / 2)); graphics.SetClip(clipRegion, CombineMode.Exclude); - graphics.TranslateTransform(Left, Top); + graphics.TranslateTransform(rect.Left, rect.Top); using (Pen pen = new Pen(lineColor, lineThickness)) { - pen.EndCap = pen.StartCap = LineCap.Round; + //pen.EndCap = pen.StartCap = LineCap.Round; graphics.DrawPath(pen, bubble); } } @@ -161,7 +161,7 @@ namespace Greenshot.Drawing { if (Colors.IsVisible(fillColor)) { // Draw the tail border state = graphics.Save(); - graphics.TranslateTransform(Left + (Width / 2), Top + (Height / 2)); + graphics.TranslateTransform(rect.Left + (rect.Width / 2), rect.Top + (rect.Height / 2)); graphics.RotateTransform(tailAngle); using (Brush brush = new SolidBrush(fillColor)) { graphics.FillPath(brush, tail); diff --git a/Greenshot/Drawing/StepLabelContainer.cs b/Greenshot/Drawing/StepLabelContainer.cs index 704e4c68e..8870e877d 100644 --- a/Greenshot/Drawing/StepLabelContainer.cs +++ b/Greenshot/Drawing/StepLabelContainer.cs @@ -48,20 +48,33 @@ namespace Greenshot.Drawing { InitContent(); } + public override void ShowGrippers() { + } + + public override void HideGrippers() { + } + public override bool InitContent() { _defaultEditMode = EditStatus.IDLE; _stringFormat.Alignment = StringAlignment.Center; _stringFormat.LineAlignment = StringAlignment.Center; // Set defaults - Width = 40; - Height = 40; + Width = 30; + Height = 30; using (FontFamily fam = new FontFamily(FontFamily.GenericSansSerif.Name)) { - _font = new Font(fam, 18, FontStyle.Regular, GraphicsUnit.Pixel); + _font = new Font(fam, 14, FontStyle.Regular, GraphicsUnit.Pixel); } return true; } + /// + /// This makes it possible for the label to be placed exactly in the middle of the pointer. + /// + public override bool HandleMouseDown(int mouseX, int mouseY) { + return base.HandleMouseDown(mouseX - (Width / 2), mouseY - (Height / 2)); + } + /// /// We set our own field values /// diff --git a/Greenshot/Forms/ImageEditorForm.cs b/Greenshot/Forms/ImageEditorForm.cs index f44be74b7..f63100af3 100644 --- a/Greenshot/Forms/ImageEditorForm.cs +++ b/Greenshot/Forms/ImageEditorForm.cs @@ -176,7 +176,7 @@ namespace Greenshot { obfuscateModeButton.DropDownItemClicked += FilterPresetDropDownItemClicked; highlightModeButton.DropDownItemClicked += FilterPresetDropDownItemClicked; - toolbarButtons = new[] { btnCursor, btnRect, btnEllipse, btnText, btnLine, btnArrow, btnFreehand, btnHighlight, btnObfuscate, btnCrop }; + toolbarButtons = new[] { btnCursor, btnRect, btnEllipse, btnText, btnLine, btnArrow, btnFreehand, btnHighlight, btnObfuscate, btnCrop, btnStepLabel, btnSpeechBubble }; //toolbarDropDownButtons = new ToolStripDropDownButton[]{btnBlur, btnPixeliate, btnTextHighlighter, btnAreaHighlighter, btnMagnifier}; pluginToolStripMenuItem.Visible = pluginToolStripMenuItem.DropDownItems.Count > 0;