geopro/src/app/Glyphs.hpp

61 lines
2.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
// 程序绘制的扁平线性图标(无需图片资源):用于面板表头与表头操作按钮,
// 风格对齐原型(细线、圆角端点、单色随主题)。仅外观,无交互逻辑。
#include <QColor>
#include <QIcon>
#include <QString>
class QLabel;
class QAbstractButton;
namespace geopro::app {
enum class Glyph {
// 面板表头图标
Tree, // 对象显示栏(层级)
Dataset, // 数据真实显示栏(数据集/数据库)
Map, // 二维/三维视图(图层)
Detail, // 数据详情(图表)
Anomaly, // 异常列表(警示三角)
Property, // 属性(信息)
// 表头操作按钮图标
Plus, // 新建/添加
Filter, // 筛选(漏斗)
Upload, // 上传
Download, // 导出/下载
Collapse, // 折叠(双箭头)
// 顶部应用栏图标
Workspace, // 工作空间2x2 宫格)
Folder, // 项目(文件夹)
Help, // 帮助(?
Bell, // 通知(铃铛)
Gear, // 设置(齿轮)
};
// 「图标+文字」按钮的图标→文字间距补丁Fusion 内置约 4px本值补到规范 §6.7 的 6px。
// 做法把图标渲染进“px 宽图标 + padRight 透明右边距”的画布,文字被这段透明区右推。
inline constexpr int kGlyphTextGapPad = 2;
// 生成指定颜色、像素尺寸的图标(默认 16px内部按 3x 绘制保证清晰)。
// padRight>0 时图标画布右侧留透明内边距(用于「图标+文字」按钮统一间距),图标本体仍为 px×px 居左。
QIcon makeGlyph(Glyph type, const QColor& color, int px = 16, int padRight = 0);
// 随主题明暗自动着色的 glyph取主题文本色暗色用浅色、亮色用深色主题切换时自动重绘。
// 用于面板表头/页签等 chrome 图标,避免固定色在暗色下看不清。
// 按钮版的 padRight见 kGlyphTextGapPad>0 时本函数同时把 iconSize 设为 (px+padRight)×px。
void setThemedGlyph(QLabel* label, Glyph type, int px);
void setThemedGlyph(QAbstractButton* button, Glyph type, int px, int padRight = 0);
// 生成树展开/折叠箭头 PNG 到临时目录,返回文件路径(供树的 QSS `image: url(...)` 引用)。
// 配合 QTreeView::branch 背景使用,可让选中高亮不覆盖左侧缩进/箭头列且不丢箭头。
QString writeChevronIcon(bool open, const QColor& color);
// 生成清晰复选框 PNG供 QTreeView::indicator 的 QSS `image:url(...)`
// 未选=明显边框空心方框;选中=填充色方框 + 白色对勾。明暗各传一套色tag 区分文件名。
QString writeCheckboxIcon(bool checked, const QColor& border, const QColor& fill, const QColor& check,
const QString& tag);
} // namespace geopro::app