From dcbe2ab4feb9786dc93aad20bc5a1f1148ef3afd Mon Sep 17 00:00:00 2001 From: Jaex Date: Thu, 23 Aug 2018 13:20:55 +0300 Subject: [PATCH] #2955: Support old resize node style --- .../RegionCaptureOptions.cs | 1 + .../RegionHelpers/ResizeNode.cs | 34 ++++++++++++++++--- ShareX.ScreenCaptureLib/Shapes/BaseShape.cs | 26 ++++++++++++++ .../Shapes/Drawing/LineDrawingShape.cs | 5 +++ .../Drawing/SpeechBalloonDrawingShape.cs | 6 ++++ .../Shapes/Region/FreehandRegionShape.cs | 5 +++ 6 files changed, 73 insertions(+), 4 deletions(-) diff --git a/ShareX.ScreenCaptureLib/RegionCaptureOptions.cs b/ShareX.ScreenCaptureLib/RegionCaptureOptions.cs index 8cbf349ec..eb2bd8651 100644 --- a/ShareX.ScreenCaptureLib/RegionCaptureOptions.cs +++ b/ShareX.ScreenCaptureLib/RegionCaptureOptions.cs @@ -64,6 +64,7 @@ public class RegionCaptureOptions public int MagnifierPixelCount = 15; // Must be odd number like 11, 13, 15 etc. public int MagnifierPixelSize = 10; public bool ShowCrosshair = false; + public bool UseSimpleNodeDesign = true; public bool EnableAnimations = true; public bool IsFixedSize = false; public Size FixedSize = new Size(250, 250); diff --git a/ShareX.ScreenCaptureLib/RegionHelpers/ResizeNode.cs b/ShareX.ScreenCaptureLib/RegionHelpers/ResizeNode.cs index 9476df7ea..f5fbb8df7 100644 --- a/ShareX.ScreenCaptureLib/RegionHelpers/ResizeNode.cs +++ b/ShareX.ScreenCaptureLib/RegionHelpers/ResizeNode.cs @@ -24,6 +24,7 @@ You should have received a copy of the GNU General Public License #endregion License Information (GPL v3) using ShareX.HelpersLib; +using System; using System.Drawing; namespace ShareX.ScreenCaptureLib @@ -50,7 +51,33 @@ public Point Position public int Size { get; set; } - public NodeShape Shape { get; set; } + public bool AutoSetSize { get; set; } = true; + + private NodeShape shape; + + public NodeShape Shape + { + get + { + return shape; + } + set + { + shape = value; + + if (AutoSetSize) + { + if (shape == NodeShape.CustomNode && CustomNodeImage != null) + { + Size = Math.Max(CustomNodeImage.Width, CustomNodeImage.Height); + } + else + { + Size = DefaultSize; + } + } + } + } public Image CustomNodeImage { get; private set; } @@ -58,14 +85,12 @@ public ResizeNode(int x = 0, int y = 0) { Shape = NodeShape.Square; Position = new Point(x, y); - Size = DefaultSize; } public void SetCustomNode(Image customNodeImage) { - Shape = NodeShape.CustomNode; CustomNodeImage = customNodeImage; - Size = CustomNodeImage.Width; + Shape = NodeShape.CustomNode; } public override void OnDraw(Graphics g) @@ -78,6 +103,7 @@ public override void OnDraw(Graphics g) g.DrawRectangle(Pens.White, rect.Offset(-1)); g.DrawRectangle(Pens.Black, rect); break; + default: case NodeShape.Circle: g.DrawEllipse(Pens.White, rect.Offset(-1)); g.DrawEllipse(Pens.Black, rect); diff --git a/ShareX.ScreenCaptureLib/Shapes/BaseShape.cs b/ShareX.ScreenCaptureLib/Shapes/BaseShape.cs index 8f1a1127a..53cfac344 100644 --- a/ShareX.ScreenCaptureLib/Shapes/BaseShape.cs +++ b/ShareX.ScreenCaptureLib/Shapes/BaseShape.cs @@ -109,8 +109,34 @@ public virtual bool Intersects(Point position) return Rectangle.Contains(position); } + internal void ChangeNodeShape(NodeShape nodeShape) + { + foreach (ResizeNode node in Manager.ResizeNodes) + { + node.Shape = nodeShape; + } + } + + protected virtual void UseSimpleNodeShape() + { + ChangeNodeShape(NodeShape.Square); + } + + protected void UpdateNodeShape() + { + if (Options.UseSimpleNodeDesign) + { + UseSimpleNodeShape(); + } + else + { + ChangeNodeShape(NodeShape.CustomNode); + } + } + public virtual void ShowNodes() { + UpdateNodeShape(); Manager.NodesVisible = true; } diff --git a/ShareX.ScreenCaptureLib/Shapes/Drawing/LineDrawingShape.cs b/ShareX.ScreenCaptureLib/Shapes/Drawing/LineDrawingShape.cs index 66254edc8..0be00fbd2 100644 --- a/ShareX.ScreenCaptureLib/Shapes/Drawing/LineDrawingShape.cs +++ b/ShareX.ScreenCaptureLib/Shapes/Drawing/LineDrawingShape.cs @@ -42,6 +42,11 @@ public class LineDrawingShape : BaseDrawingShape public override bool IsValidShape => Rectangle.Width > 1 || Rectangle.Height > 1; + protected override void UseSimpleNodeShape() + { + ChangeNodeShape(NodeShape.Circle); + } + private void AdjustPoints(int centerPointCount) { Point[] newPoints = new Point[2 + centerPointCount]; diff --git a/ShareX.ScreenCaptureLib/Shapes/Drawing/SpeechBalloonDrawingShape.cs b/ShareX.ScreenCaptureLib/Shapes/Drawing/SpeechBalloonDrawingShape.cs index 9ef708daa..f0cc32c3a 100644 --- a/ShareX.ScreenCaptureLib/Shapes/Drawing/SpeechBalloonDrawingShape.cs +++ b/ShareX.ScreenCaptureLib/Shapes/Drawing/SpeechBalloonDrawingShape.cs @@ -63,6 +63,12 @@ public override void OnCreated() TailPosition = Rectangle.Location.Add(0, Rectangle.Height + 30); } + protected override void UseSimpleNodeShape() + { + ChangeNodeShape(NodeShape.Square); + Manager.ResizeNodes[(int)NodePosition.Extra].Shape = NodeShape.Circle; + } + public override void OnNodeVisible() { base.OnNodeVisible(); diff --git a/ShareX.ScreenCaptureLib/Shapes/Region/FreehandRegionShape.cs b/ShareX.ScreenCaptureLib/Shapes/Region/FreehandRegionShape.cs index 373372083..9ec74cd7d 100644 --- a/ShareX.ScreenCaptureLib/Shapes/Region/FreehandRegionShape.cs +++ b/ShareX.ScreenCaptureLib/Shapes/Region/FreehandRegionShape.cs @@ -57,6 +57,11 @@ public Point LastPosition private List points = new List(); private bool isPolygonMode; + protected override void UseSimpleNodeShape() + { + ChangeNodeShape(NodeShape.Circle); + } + public override void OnUpdate() { if (Manager.IsCreating)