In #283 it was reported that Greenshot doesn't draw unicode icons correctly. this should solve it.

This commit is contained in:
Robin Krom 2021-03-08 23:19:34 +01:00
commit 4c509618af

View file

@ -598,6 +598,41 @@ namespace Greenshot.Drawing
DrawText(graphics, rect, lineThickness, lineColor, drawShadow, _stringFormat, text, _font); DrawText(graphics, rect, lineThickness, lineColor, drawShadow, _stringFormat, text, _font);
} }
private static TextFormatFlags ConvertStringFormat(StringFormat stringFormat)
{
TextFormatFlags flags = TextFormatFlags.Default;
if (stringFormat == null)
{
return flags;
}
switch (stringFormat.LineAlignment)
{
case StringAlignment.Center:
flags |= TextFormatFlags.VerticalCenter;
break;
case StringAlignment.Far:
flags |= TextFormatFlags.Bottom;
break;
case StringAlignment.Near:
flags |= TextFormatFlags.Top;
break;
}
switch (stringFormat.Alignment)
{
case StringAlignment.Center:
flags |= TextFormatFlags.HorizontalCenter;
break;
case StringAlignment.Far:
flags |= TextFormatFlags.Right;
break;
case StringAlignment.Near:
flags |= TextFormatFlags.Left;
break;
}
return flags;
}
/// <summary> /// <summary>
/// This method can be used from other containers /// This method can be used from other containers
/// </summary> /// </summary>
@ -636,8 +671,8 @@ namespace Greenshot.Drawing
shadowRect.Inflate(-textOffset, -textOffset); shadowRect.Inflate(-textOffset, -textOffset);
} }
using Brush fontBrush = new SolidBrush(Color.FromArgb(alpha, 100, 100, 100)); TextRenderer.DrawText(graphics, text, font, shadowRect, Color.FromArgb(alpha, 100, 100, 100), ConvertStringFormat(stringFormat));
graphics.DrawString(text, font, fontBrush, shadowRect, stringFormat);
currentStep++; currentStep++;
alpha -= basealpha / steps; alpha -= basealpha / steps;
} }
@ -647,16 +682,14 @@ namespace Greenshot.Drawing
{ {
drawingRectange.Inflate(-textOffset, -textOffset); drawingRectange.Inflate(-textOffset, -textOffset);
} }
using (Brush fontBrush = new SolidBrush(fontColor))
if (stringFormat != null)
{ {
if (stringFormat != null) TextRenderer.DrawText(graphics, text, font, drawingRectange, fontColor, ConvertStringFormat(stringFormat));
{ }
graphics.DrawString(text, font, fontBrush, drawingRectange, stringFormat); else
} {
else TextRenderer.DrawText(graphics, text, font, drawingRectange, fontColor);
{
graphics.DrawString(text, font, fontBrush, drawingRectange);
}
} }
} }