+ 字体图标增加旋转角度参数SymbolRotate

This commit is contained in:
Sunny 2023-10-26 21:55:49 +08:00
parent a266d608ff
commit b333d5ebce
10 changed files with 173 additions and 36 deletions

View File

@ -29,6 +29,7 @@
* 2023-08-28: V3.4.2
* 2023-10-25: V3.5.1 DPI下
* 2023-10-25: V3.5.1 线
* 2023-10-26: V3.5.1 SymbolRotate
******************************************************************************/
using System;
@ -64,7 +65,7 @@ namespace Sunny.UI
edit.Invalidate();
Controls.Add(edit);
firstEditHeight = lastEditHeight = edit.Height;
lastEditHeight = edit.Height;
Width = 150;
Height = 29;
@ -76,7 +77,6 @@ namespace Sunny.UI
ControlBoxRect = new Rectangle(Width - 24, 0, 24, Height);
}
int firstEditHeight = -1;
int lastEditHeight = -1;
private void Edit_SizeChanged(object sender, EventArgs e)
{
@ -103,7 +103,11 @@ namespace Sunny.UI
protected override void OnFontChanged(EventArgs e)
{
base.OnFontChanged(e);
if (DefaultFontSize < 0 && edit != null) edit.Font = this.Font;
if (DefaultFontSize < 0 && edit != null)
{
edit.Font = this.Font;
}
Invalidate();
}
@ -377,6 +381,7 @@ namespace Sunny.UI
{
Padding = new Padding(Padding.Left, Padding.Top, Padding.Right < 30 ? 30 : Padding.Right, Padding.Bottom < 2 ? 2 : Padding.Bottom);
}
base.OnPaddingChanged(e);
SizeChange();
}
@ -412,14 +417,6 @@ namespace Sunny.UI
NoNeedChange = false;
}
if (edit.Height + RectSize * 2 + 2 < firstEditHeight && Height > firstEditHeight)
{
NoNeedChange = true;
Height = firstEditHeight;
edit.Top = (Height - edit.Height) / 2;
NoNeedChange = false;
}
if (edit.Top != (Height - edit.Height) / 2 + 1)
{
edit.Top = (Height - edit.Height) / 2 + 1;

View File

@ -19,6 +19,7 @@
* 2020-01-01: V2.2.0
* 2022-03-19: V3.1.1
* 2023-05-12: V3.3.6 DrawString函数
* 2023-10-26: V3.5.1 SymbolRotate
******************************************************************************/
using System;
@ -242,6 +243,26 @@ namespace Sunny.UI
}
}
private int _symbolRotate = 0;
/// <summary>
/// 字体图标旋转角度
/// </summary>
[DefaultValue(0)]
[Description("字体图标旋转角度"), Category("SunnyUI")]
public int SymbolRotate
{
get => _symbolRotate;
set
{
if (_symbolRotate != value)
{
_symbolRotate = value;
Invalidate();
}
}
}
private Point textOffset = new Point(0, 0);
/// <summary>
@ -366,7 +387,7 @@ namespace Sunny.UI
if (Icon == UIIcon.Symbol)
{
e.Graphics.DrawFontImage(symbol, symbolSize, ForeColor, new Rectangle((Width - avatarSize) / 2 + 1 + SymbolOffset.X,
(Height - avatarSize) / 2 + 1 + SymbolOffset.Y, avatarSize, avatarSize));
(Height - avatarSize) / 2 + 1 + SymbolOffset.Y, avatarSize, avatarSize), 0, 0, SymbolRotate);
}
if (Icon == UIIcon.Text)

View File

@ -26,6 +26,7 @@
* 2022-03-19: V3.1.1
* 2023-05-13: V3.3.6 DrawString函数
* 2023-05-16: V3.3.6 DrawFontImage函数
* 2023-10-26: V3.5.1 SymbolRotate
******************************************************************************/
using System;
@ -245,6 +246,26 @@ namespace Sunny.UI
}
}
private int _symbolRotate = 0;
/// <summary>
/// 字体图标旋转角度
/// </summary>
[DefaultValue(0)]
[Description("字体图标旋转角度"), Category("SunnyUI")]
public int SymbolRotate
{
get => _symbolRotate;
set
{
if (_symbolRotate != value)
{
_symbolRotate = value;
Invalidate();
}
}
}
/// <summary>
/// 设置主题样式
/// </summary>
@ -638,7 +659,7 @@ namespace Sunny.UI
}
e.Graphics.FillEllipse(bcColor, (Width - CircleSize) / 2.0f - 1, Height - Padding.Bottom - CircleSize - 1, CircleSize, CircleSize);
e.Graphics.DrawFontImage(Symbol, SymbolSize, SymbolColor, new Rectangle(0, Height - Padding.Bottom - CircleSize, Width, CircleSize), symbolOffset.X, symbolOffset.Y);
e.Graphics.DrawFontImage(Symbol, SymbolSize, SymbolColor, new Rectangle(0, Height - Padding.Bottom - CircleSize, Width, CircleSize), symbolOffset.X, symbolOffset.Y, SymbolRotate);
}
else if (Image != null)
{
@ -661,7 +682,7 @@ namespace Sunny.UI
}
e.Graphics.FillEllipse(bcColor, Padding.Left - 1, (Height - CircleSize) / 2.0f - 1, CircleSize, CircleSize);
e.Graphics.DrawFontImage(Symbol, SymbolSize, SymbolColor, new Rectangle(Padding.Left, 0, CircleSize, Height), symbolOffset.X, symbolOffset.Y);
e.Graphics.DrawFontImage(Symbol, SymbolSize, SymbolColor, new Rectangle(Padding.Left, 0, CircleSize, Height), symbolOffset.X, symbolOffset.Y, SymbolRotate);
}
else if (Image != null)
{
@ -688,7 +709,7 @@ namespace Sunny.UI
}
e.Graphics.FillEllipse(bcColor, Width - Padding.Right - CircleSize - 1, (Height - CircleSize) / 2.0f - 1, CircleSize, CircleSize);
e.Graphics.DrawFontImage(Symbol, SymbolSize, SymbolColor, new Rectangle(Width - Padding.Right - CircleSize, 0, CircleSize, Height), symbolOffset.X, symbolOffset.Y);
e.Graphics.DrawFontImage(Symbol, SymbolSize, SymbolColor, new Rectangle(Width - Padding.Right - CircleSize, 0, CircleSize, Height), symbolOffset.X, symbolOffset.Y, SymbolRotate);
}
else if (Image != null)
{
@ -711,7 +732,7 @@ namespace Sunny.UI
}
e.Graphics.FillEllipse(bcColor, (Width - CircleSize) / 2.0f - 1, Padding.Top - 1, CircleSize, CircleSize);
e.Graphics.DrawFontImage(Symbol, SymbolSize, SymbolColor, new Rectangle(0, Padding.Top, Width, CircleSize), symbolOffset.X, symbolOffset.Y);
e.Graphics.DrawFontImage(Symbol, SymbolSize, SymbolColor, new Rectangle(0, Padding.Top, Width, CircleSize), symbolOffset.X, symbolOffset.Y, SymbolRotate);
}
else if (Image != null)
{

View File

@ -19,6 +19,7 @@
* 2020-01-01: V2.2.0
* 2022-04-14: V3.1.3
* 2022-11-29: V3.3.0 RemovePage方法
* 2023-10-26: V3.5.1 SymbolRotate
******************************************************************************/
using System;
@ -72,6 +73,11 @@ namespace Sunny.UI
return this[node] == null ? new Point(0, 0) : Items[node].SymbolOffset;
}
public int GetSymbolRotate(TreeNode node)
{
return this[node] == null ? 0 : Items[node].SymbolRotate;
}
public int GetPageIndex(TreeNode node)
{
return this[node] == null ? -1 : Items[node].PageIndex;
@ -120,17 +126,18 @@ namespace Sunny.UI
Items[node].PageGuid = guid;
}
public void SetSymbol(TreeNode node, int symbol, int symbolSize = 32)
public void SetSymbol(TreeNode node, int symbol, int symbolSize = 32, int symbolRotate = 0)
{
if (node == null) return;
CreateIfNotExist(node);
Items[node].Symbol = symbol;
Items[node].SymbolSize = symbolSize;
Items[node].SymbolRotate = symbolRotate;
node.TreeView.Invalidate();
}
public void SetSymbol(TreeNode node, int symbol, Point symbolOffset, int symbolSize = 32)
public void SetSymbol(TreeNode node, int symbol, Point symbolOffset, int symbolSize = 32, int symbolRotate = 0)
{
if (node == null) return;
@ -138,6 +145,7 @@ namespace Sunny.UI
Items[node].Symbol = symbol;
Items[node].SymbolSize = symbolSize;
Items[node].SymbolOffset = symbolOffset;
Items[node].SymbolRotate = symbolRotate;
node.TreeView.Invalidate();
}
@ -554,6 +562,11 @@ namespace Sunny.UI
/// </summary>
public Point SymbolOffset { get; set; } = new Point(0, 0);
/// <summary>
/// 字体图标旋转角度
/// </summary>
public int SymbolRotate { get; set; } = 0;
public int PageIndex { get; set; }
public string TipsText { get; set; }
@ -584,6 +597,8 @@ namespace Sunny.UI
PageGuid = page.PageGuid;
Symbol = page.Symbol;
SymbolSize = page.SymbolSize;
SymbolOffset = page.SymbolOffset;
SymbolRotate = page.SymbolRotate;
AlwaysOpen = page.AlwaysOpen;
}

View File

@ -21,6 +21,7 @@
* 2022-03-19: V3.1.1
* 2023-05-12: V3.3.6 DrawString函数
* 2023-05-16: V3.3.6 DrawFontImage函数
* 2023-10-26: V3.5.1 SymbolRotate
******************************************************************************/
using System;
@ -108,6 +109,26 @@ namespace Sunny.UI
}
}
private int _symbolRotate = 0;
/// <summary>
/// 字体图标旋转角度
/// </summary>
[DefaultValue(0)]
[Description("字体图标旋转角度"), Category("SunnyUI")]
public int SymbolRotate
{
get => _symbolRotate;
set
{
if (_symbolRotate != value)
{
_symbolRotate = value;
Invalidate();
}
}
}
[DefaultValue(0)]
[Description("图标和文字间间隔"), Category("SunnyUI")]
public int ImageInterval
@ -289,9 +310,9 @@ namespace Sunny.UI
}
if (Text.IsNullOrEmpty())
e.Graphics.DrawFontImage(Symbol, SymbolSize, symbolColor, new RectangleF((Width - SymbolSize) / 2.0f, (Height - SymbolSize) / 2.0f, SymbolSize, SymbolSize), SymbolOffset.X, SymbolOffset.Y);
e.Graphics.DrawFontImage(Symbol, SymbolSize, symbolColor, new RectangleF((Width - SymbolSize) / 2.0f, (Height - SymbolSize) / 2.0f, SymbolSize, SymbolSize), SymbolOffset.X, SymbolOffset.Y, SymbolRotate);
else
e.Graphics.DrawFontImage(Symbol, SymbolSize, symbolColor, new Rectangle(rect.Left, rect.Top, SymbolSize, rect.Height), SymbolOffset.X, SymbolOffset.Y);
e.Graphics.DrawFontImage(Symbol, SymbolSize, symbolColor, new Rectangle(rect.Left, rect.Top, SymbolSize, rect.Height), SymbolOffset.X, SymbolOffset.Y, SymbolRotate);
e.Graphics.DrawString(Text, Font, ForeColor, rect, ContentAlignment.MiddleRight);
}

View File

@ -53,6 +53,7 @@
* 2023-08-24: V3.4.2 Enabled为false时
* 2023-10-25: V3.5.1 DPI下
* 2023-10-25: V3.5.1 线
* 2023-10-26: V3.5.1 SymbolRotate
******************************************************************************/
using System;
@ -119,6 +120,7 @@ namespace Sunny.UI
btn.BackColor = Color.Transparent;
btn.Click += Btn_Click;
btn.Radius = 3;
btn.SymbolOffset = new Point(-1, 1);
edit.Invalidate();
Controls.Add(edit);
@ -132,7 +134,7 @@ namespace Sunny.UI
bar.MouseEnter += Bar_MouseEnter;
TextAlignment = ContentAlignment.MiddleLeft;
firstEditHeight = lastEditHeight = edit.Height;
lastEditHeight = edit.Height;
Width = 150;
Height = 29;
@ -140,7 +142,6 @@ namespace Sunny.UI
TextAlignmentChange += UITextBox_TextAlignmentChange;
}
int firstEditHeight = -1;
int lastEditHeight = -1;
private void Edit_SizeChanged(object sender, EventArgs e)
{
@ -674,7 +675,9 @@ namespace Sunny.UI
base.OnFontChanged(e);
if (DefaultFontSize < 0 && edit != null)
{
edit.Font = this.Font;
}
Invalidate();
}
@ -735,14 +738,6 @@ namespace Sunny.UI
NoNeedChange = false;
}
if (edit.Height + RectSize * 2 + 2 < firstEditHeight && Height > firstEditHeight)
{
NoNeedChange = true;
Height = firstEditHeight;
edit.Top = (Height - edit.Height) / 2;
NoNeedChange = false;
}
if (edit.Top != (Height - edit.Height) / 2 + 1)
{
edit.Top = (Height - edit.Height) / 2 + 1;
@ -1320,7 +1315,7 @@ namespace Sunny.UI
}
else if (Symbol != 0)
{
e.Graphics.DrawFontImage(Symbol, SymbolSize, SymbolColor, new Rectangle(4 + symbolOffset.X, (Height - SymbolSize) / 2 + 1 + symbolOffset.Y, SymbolSize, SymbolSize), SymbolOffset.X, SymbolOffset.Y);
e.Graphics.DrawFontImage(Symbol, SymbolSize, SymbolColor, new Rectangle(4 + symbolOffset.X, (Height - SymbolSize) / 2 + 1 + symbolOffset.Y, SymbolSize, SymbolSize), SymbolOffset.X, SymbolOffset.Y, SymbolRotate);
}
if (styleCustomMode && Text.IsValid() && NeedDrawDisabledText)
@ -1415,6 +1410,26 @@ namespace Sunny.UI
}
}
private int _symbolRotate = 0;
/// <summary>
/// 字体图标旋转角度
/// </summary>
[DefaultValue(0)]
[Description("字体图标旋转角度"), Category("SunnyUI")]
public int SymbolRotate
{
get => _symbolRotate;
set
{
if (_symbolRotate != value)
{
_symbolRotate = value;
Invalidate();
}
}
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
[Editor("Sunny.UI.UIImagePropertyEditor, " + AssemblyRefEx.SystemDesign, typeof(UITypeEditor))]
[DefaultValue(361761)]
@ -1433,7 +1448,7 @@ namespace Sunny.UI
set => btn.SymbolSize = value;
}
[DefaultValue(typeof(Point), "0, 1")]
[DefaultValue(typeof(Point), "-1, 1")]
[Description("按钮字体图标的偏移位置"), Category("SunnyUI")]
public Point ButtonSymbolOffset
{
@ -1441,6 +1456,17 @@ namespace Sunny.UI
set => btn.SymbolOffset = value;
}
/// <summary>
/// 字体图标旋转角度
/// </summary>
[DefaultValue(0)]
[Description("按钮字体图标旋转角度"), Category("SunnyUI")]
public int ButtonSymbolRotate
{
get => btn.SymbolRotate;
set => btn.SymbolRotate = value;
}
/// <summary>
/// 填充颜色,当值为背景色或透明色或空值则不填充
/// </summary>

View File

@ -21,6 +21,7 @@
* 2021-08-16: V3.0.6 ToolTip接口UITextBox这类的组合控件无法显示ToolTip的问题
* 2021-12-09: V3.0.9
* 2023-05-14: V3.3.6 DrawString函数
* 2023-10-26: V3.5.1 SymbolRotate
******************************************************************************/
using System;
@ -74,7 +75,7 @@ namespace Sunny.UI
}
public void SetToolTip(Control control, string caption, string title, int symbol, int symbolSize,
Color symbolColor)
Color symbolColor, int symbolRotate = 0)
{
if (title == null) title = string.Empty;
@ -85,6 +86,7 @@ namespace Sunny.UI
ToolTipControls[control].Symbol = symbol;
ToolTipControls[control].SymbolSize = symbolSize;
ToolTipControls[control].SymbolColor = symbolColor;
ToolTipControls[control].SymbolRotate = symbolRotate;
}
else
{
@ -95,7 +97,8 @@ namespace Sunny.UI
ToolTipText = caption,
Symbol = symbol,
SymbolSize = symbolSize,
SymbolColor = symbolColor
SymbolColor = symbolColor,
SymbolRotate = symbolRotate
};
ToolTipControls.TryAdd(control, ctrl);
@ -103,7 +106,7 @@ namespace Sunny.UI
if (control is IToolTip toolTip)
{
SetToolTip(toolTip.ExToolTipControl(), caption, title, symbol, symbolSize, symbolColor);
SetToolTip(toolTip.ExToolTipControl(), caption, title, symbol, symbolSize, symbolColor, symbolRotate);
}
base.SetToolTip(control, caption);
@ -264,6 +267,11 @@ namespace Sunny.UI
/// </summary>
public Point SymbolOffset { get; set; } = new Point(0, 0);
/// <summary>
/// 字体图标旋转角度
/// </summary>
public int SymbolRotate { get; set; } = 0;
/// <summary>
/// 字体图标颜色
/// </summary>

View File

@ -31,6 +31,8 @@ namespace Sunny.UI
int SymbolSize { get; set; }
Point SymbolOffset { get; set; }
int SymbolRotate { get; set; }
}
public enum UISymbolType

View File

@ -341,6 +341,11 @@ namespace Sunny.UI
/// </summary>
public int SymbolSize { get; set; } = 28;
/// <summary>
/// 字体图标旋转角度
/// </summary>
public int SymbolRotate { get; set; } = 0;
private void lbl_DoubleClick(object sender, EventArgs e)
{
if (sender is Label lbl)

View File

@ -39,6 +39,7 @@
* 2023-05-12: V3.3.6 DrawString函数
* 2023-07-27: V3.4.1 TopMost为true
* 2023-10-09: V3.5.0
* 2023-10-26: V3.5.1 SymbolRotate
******************************************************************************/
using System;
@ -348,6 +349,26 @@ namespace Sunny.UI
}
}
private int _symbolRotate = 0;
/// <summary>
/// 字体图标旋转角度
/// </summary>
[DefaultValue(0)]
[Description("字体图标旋转角度"), Category("SunnyUI")]
public int SymbolRotate
{
get => _symbolRotate;
set
{
if (_symbolRotate != value)
{
_symbolRotate = value;
Invalidate();
}
}
}
[DefaultValue(false), Description("在Frame框架中不被关闭"), Category("SunnyUI")]
public bool AlwaysOpen
{
@ -631,7 +652,7 @@ namespace Sunny.UI
if (!AllowShowTitle) return;
if (Symbol > 0)
{
e.Graphics.DrawFontImage(Symbol, SymbolSize, TitleForeColor, new Rectangle(ImageInterval, 0, SymbolSize, TitleHeight), SymbolOffset.X, SymbolOffset.Y);
e.Graphics.DrawFontImage(Symbol, SymbolSize, TitleForeColor, new Rectangle(ImageInterval, 0, SymbolSize, TitleHeight), SymbolOffset.X, SymbolOffset.Y, SymbolRotate);
}
e.Graphics.DrawString(Text, TitleFont, TitleForeColor, new Rectangle(Symbol > 0 ? ImageInterval * 2 + SymbolSize : ImageInterval, 0, Width, TitleHeight), ContentAlignment.MiddleLeft);