Files
msime-windows/server/src/window/floating_toolbar_skin.cpp
T
fanlusky ec00892121 feat(server): 新增仿微软拼音的内置皮肤 microsoft
- 候选窗:深色 #2C2C2C 底、#383838 选中底、#E183D9 紫色选中条,序号与候选同字号,
  横排每项最小 4.35em、间距 0.28em(换行的行间同样隔 0.28em);尺寸均按字号缩放
- 翻页:默认开启,实心圆角三角,与候选行等高,横排前加分隔线
- 悬浮工具栏沿用默认页面,拖拽条改为紫色
- ui:PagerArrows 新增 Glyph::Triangle 与分隔线,三角用单一路径填充,半透明时不出现描边重叠;
  CandidateList 新增 minItemWidth 与 selectedBarInside
- 设置页新增皮肤卡片与预览;更新内置皮肤列表、文档与配置注释,补充测试
2026-09-30 17:35:38 +08:00

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