diff --git a/SunnyUI/Controls/DropItem/UIDropControl.cs b/SunnyUI/Controls/DropItem/UIDropControl.cs
index 5765f519..58fb6f67 100644
--- a/SunnyUI/Controls/DropItem/UIDropControl.cs
+++ b/SunnyUI/Controls/DropItem/UIDropControl.cs
@@ -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;
diff --git a/SunnyUI/Controls/UIAvatar.cs b/SunnyUI/Controls/UIAvatar.cs
index fc7d5dec..7963048b 100644
--- a/SunnyUI/Controls/UIAvatar.cs
+++ b/SunnyUI/Controls/UIAvatar.cs
@@ -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;
+
+ ///
+ /// 字体图标旋转角度
+ ///
+ [DefaultValue(0)]
+ [Description("字体图标旋转角度"), Category("SunnyUI")]
+ public int SymbolRotate
+ {
+ get => _symbolRotate;
+ set
+ {
+ if (_symbolRotate != value)
+ {
+ _symbolRotate = value;
+ Invalidate();
+ }
+ }
+ }
+
private Point textOffset = new Point(0, 0);
///
@@ -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)
diff --git a/SunnyUI/Controls/UIHeaderButton.cs b/SunnyUI/Controls/UIHeaderButton.cs
index eabb1c81..05acbe1c 100644
--- a/SunnyUI/Controls/UIHeaderButton.cs
+++ b/SunnyUI/Controls/UIHeaderButton.cs
@@ -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;
+
+ ///
+ /// 字体图标旋转角度
+ ///
+ [DefaultValue(0)]
+ [Description("字体图标旋转角度"), Category("SunnyUI")]
+ public int SymbolRotate
+ {
+ get => _symbolRotate;
+ set
+ {
+ if (_symbolRotate != value)
+ {
+ _symbolRotate = value;
+ Invalidate();
+ }
+ }
+ }
+
///
/// 设置主题样式
///
@@ -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)
{
diff --git a/SunnyUI/Controls/UINavMenuHelper.cs b/SunnyUI/Controls/UINavMenuHelper.cs
index 4d95dadb..a36a4ecc 100644
--- a/SunnyUI/Controls/UINavMenuHelper.cs
+++ b/SunnyUI/Controls/UINavMenuHelper.cs
@@ -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
///
public Point SymbolOffset { get; set; } = new Point(0, 0);
+ ///
+ /// 字体图标旋转角度
+ ///
+ 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;
}
diff --git a/SunnyUI/Controls/UISymbolLabel.cs b/SunnyUI/Controls/UISymbolLabel.cs
index 48afa469..b28bba25 100644
--- a/SunnyUI/Controls/UISymbolLabel.cs
+++ b/SunnyUI/Controls/UISymbolLabel.cs
@@ -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;
+
+ ///
+ /// 字体图标旋转角度
+ ///
+ [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);
}
diff --git a/SunnyUI/Controls/UITextBox.cs b/SunnyUI/Controls/UITextBox.cs
index 1d35ea03..c59e771d 100644
--- a/SunnyUI/Controls/UITextBox.cs
+++ b/SunnyUI/Controls/UITextBox.cs
@@ -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;
+
+ ///
+ /// 字体图标旋转角度
+ ///
+ [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;
}
+ ///
+ /// 字体图标旋转角度
+ ///
+ [DefaultValue(0)]
+ [Description("按钮字体图标旋转角度"), Category("SunnyUI")]
+ public int ButtonSymbolRotate
+ {
+ get => btn.SymbolRotate;
+ set => btn.SymbolRotate = value;
+ }
+
///
/// 填充颜色,当值为背景色或透明色或空值则不填充
///
diff --git a/SunnyUI/Controls/UIToolTip.cs b/SunnyUI/Controls/UIToolTip.cs
index 73bfa9b8..9ccf862e 100644
--- a/SunnyUI/Controls/UIToolTip.cs
+++ b/SunnyUI/Controls/UIToolTip.cs
@@ -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
///
public Point SymbolOffset { get; set; } = new Point(0, 0);
+ ///
+ /// 字体图标旋转角度
+ ///
+ public int SymbolRotate { get; set; } = 0;
+
///
/// 字体图标颜色
///
diff --git a/SunnyUI/Font/UIFontImageDefine.cs b/SunnyUI/Font/UIFontImageDefine.cs
index 6ce71a5b..599cee4b 100644
--- a/SunnyUI/Font/UIFontImageDefine.cs
+++ b/SunnyUI/Font/UIFontImageDefine.cs
@@ -31,6 +31,8 @@ namespace Sunny.UI
int SymbolSize { get; set; }
Point SymbolOffset { get; set; }
+
+ int SymbolRotate { get; set; }
}
public enum UISymbolType
diff --git a/SunnyUI/Font/UIFontImages.cs b/SunnyUI/Font/UIFontImages.cs
index fb15bfcb..068031d7 100644
--- a/SunnyUI/Font/UIFontImages.cs
+++ b/SunnyUI/Font/UIFontImages.cs
@@ -341,6 +341,11 @@ namespace Sunny.UI
///
public int SymbolSize { get; set; } = 28;
+ ///
+ /// 字体图标旋转角度
+ ///
+ public int SymbolRotate { get; set; } = 0;
+
private void lbl_DoubleClick(object sender, EventArgs e)
{
if (sender is Label lbl)
diff --git a/SunnyUI/Frames/UIPage.cs b/SunnyUI/Frames/UIPage.cs
index 3217b75f..dc4c6eb7 100644
--- a/SunnyUI/Frames/UIPage.cs
+++ b/SunnyUI/Frames/UIPage.cs
@@ -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;
+
+ ///
+ /// 字体图标旋转角度
+ ///
+ [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);