* UINavMenu: 绘制节点字体图标增加偏移SymbolOffset

This commit is contained in:
Sunny 2022-06-23 16:18:50 +08:00
parent 06f7dfcc0f
commit 2171220e91
2 changed files with 42 additions and 6 deletions

View File

@ -27,6 +27,7 @@
* 2022-03-19: V3.1.1
* 2022-03-24: V3.1.1 TipsText显示位置
* 2022-04-14: V3.1.3
* 2022-06-23: V3.2.0 SymbolOffset
******************************************************************************/
using System;
@ -649,8 +650,7 @@ namespace Sunny.UI
for (int i = 0; i < TreeNodeSymbols[e.Node].Count; i++)
{
e.Graphics.DrawFontImage(TreeNodeSymbols[e.Node][i], 24, ForeColor,
new Rectangle(firstLeft + i * 32, e.Bounds.Top, 32, e.Bounds.Height));
e.Graphics.DrawFontImage(TreeNodeSymbols[e.Node][i], 24, ForeColor, new Rectangle(firstLeft + i * 32, e.Bounds.Top, 32, e.Bounds.Height));
}
}
}
@ -667,8 +667,7 @@ namespace Sunny.UI
for (int i = 0; i < TreeNodeSymbols[e.Node].Count; i++)
{
e.Graphics.DrawFontImage(TreeNodeSymbols[e.Node][i], 24, ForeColor,
new Rectangle(firstLeft + i * 32, e.Bounds.Top, 32, e.Bounds.Height));
e.Graphics.DrawFontImage(TreeNodeSymbols[e.Node][i], 24, ForeColor, new Rectangle(firstLeft + i * 32, e.Bounds.Top, 32, e.Bounds.Height));
}
}
}
@ -690,7 +689,8 @@ namespace Sunny.UI
{
SizeF fiSize = e.Graphics.GetFontImageSize(MenuHelper.GetSymbol(e.Node), MenuHelper.GetSymbolSize(e.Node));
Color color = e.Node == SelectedNode ? SelectedForeColor : ForeColor;
e.Graphics.DrawFontImage(MenuHelper.GetSymbol(e.Node), MenuHelper.GetSymbolSize(e.Node), color, imageLeft + (MenuHelper.GetSymbolSize(e.Node) - fiSize.Width) / 2.0f, e.Bounds.Y + (e.Bounds.Height - fiSize.Height) / 2);
Point offset = MenuHelper.GetSymbolOffset(e.Node);
e.Graphics.DrawFontImage(MenuHelper.GetSymbol(e.Node), MenuHelper.GetSymbolSize(e.Node), color, imageLeft + (MenuHelper.GetSymbolSize(e.Node) - fiSize.Width) / 2.0f + offset.X, e.Bounds.Y + (e.Bounds.Height - fiSize.Height) / 2 + offset.Y);
}
else
{
@ -1017,6 +1017,12 @@ namespace Sunny.UI
return this;
}
public UINavMenu SetNodeSymbol(TreeNode node, int symbol, Point symbolOffset, int symbolSize = 24)
{
MenuHelper.SetSymbol(node, symbol, symbolOffset, symbolSize);
return this;
}
public UINavMenu SetNodeImageIndex(TreeNode node, int imageIndex)
{
node.ImageIndex = imageIndex;
@ -1055,6 +1061,13 @@ namespace Sunny.UI
return node;
}
public TreeNode CreateNode(string text, int symbol, Point symbolOffset, int symbolSize, int pageIndex)
{
var node = CreateNode(text, pageIndex);
SetNodeSymbol(node, symbol, symbolOffset, symbolSize);
return node;
}
private TreeNode CreateNode(NavMenuItem item)
{
TreeNode node = new TreeNode(item.Text);
@ -1078,7 +1091,7 @@ namespace Sunny.UI
var childNode = CreateChildNode(parent, new NavMenuItem(page));
if (page.Symbol > 0)
{
MenuHelper.SetSymbol(childNode, page.Symbol, page.SymbolSize);
MenuHelper.SetSymbol(childNode, page.Symbol, page.SymbolOffset, page.SymbolSize);
}
return childNode;
@ -1091,6 +1104,13 @@ namespace Sunny.UI
return node;
}
public TreeNode CreateChildNode(TreeNode parent, string text, int symbol, Point symbolOffset, int symbolSize, int pageIndex)
{
var node = CreateChildNode(parent, text, pageIndex);
SetNodeSymbol(node, symbol, symbolOffset, symbolSize);
return node;
}
private TreeNode CreateChildNode(TreeNode parent, NavMenuItem item)
{
TreeNode childNode = new TreeNode(item.Text);

View File

@ -66,6 +66,11 @@ namespace Sunny.UI
return this[node] == null ? 0 : Items[node].SymbolSize;
}
public Point GetSymbolOffset(TreeNode node)
{
return this[node] == null ? new Point(0, 0) : Items[node].SymbolOffset;
}
public int GetPageIndex(TreeNode node)
{
return this[node] == null ? -1 : Items[node].PageIndex;
@ -124,6 +129,17 @@ namespace Sunny.UI
node.TreeView.Invalidate();
}
public void SetSymbol(TreeNode node, int symbol, Point symbolOffset, int symbolSize = 32)
{
if (node == null) return;
CreateIfNotExist(node);
Items[node].Symbol = symbol;
Items[node].SymbolSize = symbolSize;
Items[node].SymbolOffset = symbolOffset;
node.TreeView.Invalidate();
}
private void CreateIfNotExist(TreeNode node)
{
if (node == null) return;