diff --git a/ShareX.HelpersLib/Helpers/Helpers.cs b/ShareX.HelpersLib/Helpers/Helpers.cs index 65bec4145..71b6b6c13 100644 --- a/ShareX.HelpersLib/Helpers/Helpers.cs +++ b/ShareX.HelpersLib/Helpers/Helpers.cs @@ -1257,5 +1257,16 @@ public static string SafeStringFormat(IFormatProvider provider, string format, p return format; } + + public static string NumberToLetters(int num) + { + string result = ""; + while (--num >= 0) + { + result = (char)('A' + num % 26) + result; + num /= 26; + } + return result; + } } } \ No newline at end of file diff --git a/ShareX.HelpersLib/Properties/Resources.Designer.cs b/ShareX.HelpersLib/Properties/Resources.Designer.cs index 7ed6ca3f2..0e5e04aac 100644 --- a/ShareX.HelpersLib/Properties/Resources.Designer.cs +++ b/ShareX.HelpersLib/Properties/Resources.Designer.cs @@ -2888,7 +2888,7 @@ internal static string ShapeType_RegionRectangle { } /// - /// Looks up a localized string similar to Crop image. + /// Looks up a localized string similar to Tool: Crop image. /// internal static string ShapeType_ToolCrop { get { diff --git a/ShareX.HelpersLib/Properties/Resources.resx b/ShareX.HelpersLib/Properties/Resources.resx index 4f3ffa581..f1e89fca5 100644 --- a/ShareX.HelpersLib/Properties/Resources.resx +++ b/ShareX.HelpersLib/Properties/Resources.resx @@ -984,7 +984,7 @@ Would you like to download it? Drawing: Text (Background) - Crop image + Tool: Crop image Drawing: Image (Screen) diff --git a/ShareX.ScreenCaptureLib/Shapes/AnnotationOptions.cs b/ShareX.ScreenCaptureLib/Shapes/AnnotationOptions.cs index 04d9e8b26..4d0f5b0f2 100644 --- a/ShareX.ScreenCaptureLib/Shapes/AnnotationOptions.cs +++ b/ShareX.ScreenCaptureLib/Shapes/AnnotationOptions.cs @@ -75,6 +75,7 @@ public class AnnotationOptions public int StepBorderSize { get; set; } = 0; public Color StepFillColor { get; set; } = PrimaryColor; public int StepFontSize { get; set; } = 18; + public bool StepUseLetters { get; set; } = false; // Blur effect public int BlurRadius { get; set; } = 15; diff --git a/ShareX.ScreenCaptureLib/Shapes/Drawing/StepDrawingShape.cs b/ShareX.ScreenCaptureLib/Shapes/Drawing/StepDrawingShape.cs index 850fd0ac9..022d57a51 100644 --- a/ShareX.ScreenCaptureLib/Shapes/Drawing/StepDrawingShape.cs +++ b/ShareX.ScreenCaptureLib/Shapes/Drawing/StepDrawingShape.cs @@ -38,6 +38,7 @@ public class StepDrawingShape : EllipseDrawingShape public int FontSize { get; set; } public int Number { get; set; } + public bool UseLetters { get; set; } public StepDrawingShape() { @@ -62,6 +63,7 @@ public override void OnConfigLoad() FillColor = AnnotationOptions.StepFillColor; Shadow = AnnotationOptions.Shadow; FontSize = AnnotationOptions.StepFontSize; + UseLetters = AnnotationOptions.StepUseLetters; } public override void OnConfigSave() @@ -71,6 +73,7 @@ public override void OnConfigSave() AnnotationOptions.StepFillColor = FillColor; AnnotationOptions.Shadow = Shadow; AnnotationOptions.StepFontSize = FontSize; + AnnotationOptions.StepUseLetters = UseLetters; } public override void OnDraw(Graphics g) @@ -80,9 +83,11 @@ public override void OnDraw(Graphics g) protected void DrawNumber(Graphics g) { + string text = UseLetters ? Helpers.NumberToLetters(Number) : Number.ToString(); + using (Font font = new Font(FontFamily.GenericSansSerif, FontSize, FontStyle.Bold)) { - Size textSize = g.MeasureString(Number.ToString(), font).ToSize(); + Size textSize = g.MeasureString(text, font).ToSize(); int maxSize = Math.Max(textSize.Width, textSize.Height); int padding = 3; @@ -93,21 +98,21 @@ protected void DrawNumber(Graphics g) if (Shadow) { - DrawNumber(g, Number, font, ShadowColor, Rectangle.LocationOffset(ShadowOffset)); + DrawNumber(g, text, font, ShadowColor, Rectangle.LocationOffset(ShadowOffset)); } - DrawNumber(g, Number, font, BorderColor, Rectangle); + DrawNumber(g, text, font, BorderColor, Rectangle); } } - protected void DrawNumber(Graphics g, int number, Font font, Color textColor, Rectangle rect) + protected void DrawNumber(Graphics g, string text, Font font, Color textColor, Rectangle rect) { using (StringFormat sf = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center }) using (Brush textBrush = new SolidBrush(textColor)) { g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit; rect = rect.LocationOffset(0, 1); - g.DrawString(number.ToString(), font, textBrush, rect, sf); + g.DrawString(text, font, textBrush, rect, sf); g.TextRenderingHint = TextRenderingHint.SystemDefault; } } diff --git a/ShareX.ScreenCaptureLib/Shapes/ShapeManagerMenu.cs b/ShareX.ScreenCaptureLib/Shapes/ShapeManagerMenu.cs index 647fe42e7..a726245e8 100644 --- a/ShareX.ScreenCaptureLib/Shapes/ShapeManagerMenu.cs +++ b/ShareX.ScreenCaptureLib/Shapes/ShapeManagerMenu.cs @@ -49,8 +49,8 @@ internal partial class ShapeManager private ToolStripEx tsMain; private ToolStripButton tsbSaveImage, tsbBorderColor, tsbFillColor, tsbHighlightColor; private ToolStripDropDownButton tsddbShapeOptions; - private ToolStripMenuItem tsmiArrowHeadsBothSide, tsmiShadow, tsmiUndo, tsmiDelete, tsmiDeleteAll, tsmiMoveTop, tsmiMoveUp, tsmiMoveDown, tsmiMoveBottom, - tsmiRegionCapture, tsmiQuickCrop, tsmiTips, tsmiImageEditorBackgroundColor; + private ToolStripMenuItem tsmiArrowHeadsBothSide, tsmiShadow, tsmiStepUseLetters, tsmiUndo, tsmiDelete, tsmiDeleteAll, tsmiMoveTop, tsmiMoveUp, tsmiMoveDown, + tsmiMoveBottom, tsmiRegionCapture, tsmiQuickCrop, tsmiTips, tsmiImageEditorBackgroundColor; private ToolStripLabeledNumericUpDown tslnudBorderSize, tslnudCornerRadius, tslnudCenterPoints, tslnudBlurRadius, tslnudPixelateSize, tslnudStepFontSize; private ToolStripLabel tslDragLeft, tslDragRight; private ToolStripLabeledComboBox tscbCursorTypes; @@ -535,6 +535,16 @@ internal void CreateToolbar() }; tsddbShapeOptions.DropDownItems.Add(tslnudStepFontSize); + tsmiStepUseLetters = new ToolStripMenuItem("Use letters"); + tsmiStepUseLetters.Checked = false; + tsmiStepUseLetters.CheckOnClick = true; + tsmiStepUseLetters.Click += (sender, e) => + { + AnnotationOptions.StepUseLetters = tsmiStepUseLetters.Checked; + UpdateCurrentShape(); + }; + tsddbShapeOptions.DropDownItems.Add(tsmiStepUseLetters); + tsmiShadow = new ToolStripMenuItem(Resources.ShapeManager_CreateToolbar_DropShadow); tsmiShadow.Checked = true; tsmiShadow.CheckOnClick = true; @@ -1228,6 +1238,7 @@ private void UpdateMenu() tsbHighlightColor.Image = ImageHelpers.CreateColorPickerIcon(AnnotationOptions.HighlightColor, new Rectangle(0, 0, 16, 16)); tslnudStepFontSize.Content.Value = AnnotationOptions.StepFontSize; + tsmiStepUseLetters.Checked = AnnotationOptions.StepUseLetters; tsmiShadow.Checked = AnnotationOptions.Shadow; @@ -1315,7 +1326,7 @@ private void UpdateMenu() tslnudCenterPoints.Visible = shapeType == ShapeType.DrawingLine || shapeType == ShapeType.DrawingArrow; tsmiArrowHeadsBothSide.Visible = shapeType == ShapeType.DrawingArrow; - tslnudStepFontSize.Visible = shapeType == ShapeType.DrawingStep; + tslnudStepFontSize.Visible = tsmiStepUseLetters.Visible = shapeType == ShapeType.DrawingStep; tscbCursorTypes.Visible = shapeType == ShapeType.DrawingCursor; tslnudBlurRadius.Visible = shapeType == ShapeType.EffectBlur; tslnudPixelateSize.Visible = shapeType == ShapeType.EffectPixelate;