- 候选窗:深色 #2C2C2C 底、#383838 选中底、#E183D9 紫色选中条,序号与候选同字号, 横排每项最小 4.35em、间距 0.28em(换行的行间同样隔 0.28em);尺寸均按字号缩放 - 翻页:默认开启,实心圆角三角,与候选行等高,横排前加分隔线 - 悬浮工具栏沿用默认页面,拖拽条改为紫色 - ui:PagerArrows 新增 Glyph::Triangle 与分隔线,三角用单一路径填充,半透明时不出现描边重叠; CandidateList 新增 minItemWidth 与 selectedBarInside - 设置页新增皮肤卡片与预览;更新内置皮肤列表、文档与配置注释,补充测试
82 lines
4.3 KiB
C++
82 lines
4.3 KiB
C++
#include "window/floating_toolbar_skin.h"
|
|
|
|
#include "skin/candidate_skin_catalog.h"
|
|
#include "window/candidate_skin_palette.h"
|
|
|
|
FloatingToolbarSkin ResolveFloatingToolbarSkin(const std::string &skinId, bool light)
|
|
{
|
|
// default(_light).html: the base every skin page starts from.
|
|
FloatingToolbarSkin skin = light ? FloatingToolbarSkin{CandidateColorFromRgb(0xFFFFFF),
|
|
D2D1::ColorF(0, 0.12f),
|
|
CandidateColorFromRgb(0x1A1A1A),
|
|
D2D1::ColorF(0, 0.08f),
|
|
D2D1::ColorF(0, 0.12f),
|
|
CandidateColorFromRgb(0x8E8CD8),
|
|
8.0f,
|
|
6.0f}
|
|
: FloatingToolbarSkin{CandidateColorFromRgb(0x1A1A1A),
|
|
D2D1::ColorF(1.0f, 1.0f, 1.0f, 0.15f),
|
|
CandidateColorFromRgb(0xFFFFFF),
|
|
D2D1::ColorF(1.0f, 1.0f, 1.0f, 0.10f),
|
|
D2D1::ColorF(1.0f, 1.0f, 1.0f, 0.15f),
|
|
CandidateColorFromRgb(0x8E8CD8),
|
|
8.0f,
|
|
6.0f};
|
|
if (skinId == "wechat")
|
|
{
|
|
skin.fill = CandidateColorFromRgb(light ? 0xF7F7F7 : 0x151515);
|
|
skin.border = CandidateColorFromRgb(light ? 0xDEDEDE : 0x292929);
|
|
skin.handle = CandidateColorFromRgb(0x07C160);
|
|
skin.hover = CandidateColorFromRgb(0x07C160, light ? 0.12f : 0.16f);
|
|
}
|
|
else if (skinId == "graphite")
|
|
{
|
|
skin.fill = CandidateColorFromRgb(light ? 0xFBFBFC : 0x1C1F23);
|
|
skin.border = CandidateColorFromRgb(light ? 0xE2E5E9 : 0x30353B);
|
|
skin.glyph = CandidateColorFromRgb(light ? 0x374151 : 0xD7DCE2);
|
|
skin.handle = CandidateColorFromRgb(light ? 0x5F6B7A : 0x8993A0);
|
|
skin.divider = light ? CandidateColorFromRgb(0x1F2937, 0.10f) : D2D1::ColorF(1.0f, 1.0f, 1.0f, 0.10f);
|
|
skin.hover = light ? CandidateColorFromRgb(0x1F2937, 0.055f) : D2D1::ColorF(1.0f, 1.0f, 1.0f, 0.055f);
|
|
skin.radius = 4.0f;
|
|
skin.iconRadius = 3.0f;
|
|
}
|
|
else if (skinId == "willow_green")
|
|
{
|
|
skin.fill = CandidateColorFromRgb(light ? 0xF4F5F3 : 0x2D2F2E);
|
|
skin.border = CandidateColorFromRgb(light ? 0xDFE3DF : 0x3B3E3C);
|
|
skin.handle = CandidateColorFromRgb(light ? 0x58B980 : 0x65C98D);
|
|
skin.hover = light ? CandidateColorFromRgb(0x58B980, 0.16f) : CandidateColorFromRgb(0x65C98D, 0.20f);
|
|
skin.radius = 9.0f;
|
|
}
|
|
else if (skinId == "autumn_osmanthus")
|
|
{
|
|
skin.fill = CandidateColorFromRgb(light ? 0xD6ECF0 : 0x7D929F);
|
|
skin.border = CandidateColorFromRgb(light ? 0xBCD8DE : 0x8FA3AF);
|
|
skin.handle = CandidateColorFromRgb(light ? 0xE6A817 : 0xF97D0A);
|
|
skin.hover = light ? CandidateColorFromRgb(0xFFE399, 0.70f) : CandidateColorFromRgb(0xF97D0A, 0.28f);
|
|
skin.radius = 10.0f;
|
|
}
|
|
else if (skinId == "microsoft")
|
|
{
|
|
// 其余沿用默认(Fluent)工具栏,只有拖拽条跟候选框选中条同为紫色。
|
|
skin.handle = CandidateColorFromRgb(0xE183D9);
|
|
}
|
|
return skin;
|
|
}
|
|
|
|
void ApplyFloatingToolbarSkinOverrides(FloatingToolbarSkin &skin, const CandidateSkinCatalog::Package &package,
|
|
bool light)
|
|
{
|
|
const CandidateSkinCatalog::ToolbarColors &colors = light ? package.toolbarLight : package.toolbarDark;
|
|
skin.fill = ParseCandidateCssColor(colors.background, skin.fill);
|
|
skin.border = ParseCandidateCssColor(colors.border, skin.border);
|
|
skin.handle = ParseCandidateCssColor(colors.handle, skin.handle);
|
|
skin.divider = ParseCandidateCssColor(colors.divider, skin.divider);
|
|
skin.glyph = ParseCandidateCssColor(colors.icon, skin.glyph);
|
|
skin.hover = ParseCandidateCssColor(colors.hover, skin.hover);
|
|
if (package.toolbarCornerRadiusDip)
|
|
{
|
|
skin.radius = static_cast<float>(*package.toolbarCornerRadiusDip);
|
|
}
|
|
}
|