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);