基于 Win32 API + GDI+ 从零实现仿真数据检查器,用于替代 Simulink.sdi.view 查看带时间轴的 CSV 数据。 - 新增 Utilities 层:UTF-8/宽字符与数值格式化工具、CSV 解析器(自动识别分隔符与引号)、 信号数据集模型(时间轴识别、信号名解析、取值采样)、Solarised Light 主题色板与绘图基础工具 - 新增 Toolbar 组件:打开 CSV、适应窗口、适应时间、放大、缩小、合并网格、每信号一格 - 新增 SignalPanel 组件:信号列表(可见性开关、颜色标识、所属网格标记)、样式编辑区 (颜色、线宽、线段/散点/点线/阶梯显示方式、所属网格),支持右键上下文菜单与滚轮滚动 - 新增 PlotView 组件:多网格波形绘制、自适应时间轴与幅值轴、网格线、信号图例、 时间光标与实时数值读数、纵向滚动条 - 新增 Application 组件:DPI 感知(Per-Monitor V2)、双缓冲绘制、区域布局与分隔条拖拽、 鼠标与键盘消息分发、文件拖放、状态栏提示 - 交互能力:滚轮缩放、Shift+滚轮平移、Ctrl+滚轮缩放幅值、拖拽平移、幅值轴纵向缩放、 右键框选缩放、单击固定/取消时间光标、双击自适应、方向键平移与滚动 - 补齐 Makefile 的源文件与头文件索引,并新增 gdiplus、comdlg32 链接库
87 lines
2.6 KiB
C++
87 lines
2.6 KiB
C++
#include "Theme.hpp"
|
|
|
|
namespace jdi
|
|
{
|
|
|
|
namespace
|
|
{
|
|
// Solarised Light 基础色板。
|
|
const std::uint32_t kBase03 = 0x002B36u; // #002B36
|
|
const std::uint32_t kBase02 = 0x073642u; // #073642
|
|
const std::uint32_t kBase01 = 0x586E75u; // #586E75
|
|
const std::uint32_t kBase00 = 0x657B83u; // #657B83
|
|
const std::uint32_t kBase0 = 0x839496u; // #839496
|
|
const std::uint32_t kBase1 = 0x93A1A1u; // #93A1A1
|
|
const std::uint32_t kBase2 = 0xEEE8D5u; // #EEE8D5
|
|
const std::uint32_t kBase3 = 0xFDF6E3u; // #FDF6E3
|
|
|
|
// Solarised 强调色。
|
|
const std::uint32_t kYellow = 0xB58900u; // #B58900
|
|
const std::uint32_t kOrange = 0xCB4B16u; // #CB4B16
|
|
const std::uint32_t kRed = 0xDC322Fu; // #DC322F
|
|
const std::uint32_t kMagenta = 0xD33682u; // #D33682
|
|
const std::uint32_t kViolet = 0x6C71C4u; // #6C71C4
|
|
const std::uint32_t kBlue = 0x268BD2u; // #268BD2
|
|
const std::uint32_t kCyan = 0x2AA198u; // #2AA198
|
|
const std::uint32_t kGreen = 0x859900u; // #859900
|
|
|
|
/** @brief 波形默认配色,按视觉对比度排序。 */
|
|
const std::uint32_t kSignalPalette[] = {
|
|
MakeArgb(kBlue), MakeArgb(kGreen), MakeArgb(kRed), MakeArgb(kViolet),
|
|
MakeArgb(kYellow), MakeArgb(kCyan), MakeArgb(kMagenta), MakeArgb(kOrange),
|
|
MakeArgb(kBase01), MakeArgb(kBase0),
|
|
};
|
|
|
|
/** @brief 全局唯一主题实例。 */
|
|
const Theme kSolarizedLight = []
|
|
{
|
|
Theme theme;
|
|
theme.windowBg = MakeArgb(kBase3);
|
|
theme.toolbarBg = MakeArgb(kBase2);
|
|
theme.panelBg = MakeArgb(kBase2);
|
|
theme.cardBg = MakeArgb(kBase3);
|
|
theme.statusBg = MakeArgb(kBase2);
|
|
theme.plotBg = MakeArgb(kBase3);
|
|
theme.border = MakeArgb(0xD9D1BCu);
|
|
theme.borderStrong = MakeArgb(kBase1);
|
|
|
|
theme.text = MakeArgb(kBase00);
|
|
theme.textStrong = MakeArgb(kBase02);
|
|
theme.textMuted = MakeArgb(kBase1);
|
|
theme.textOnAccent = MakeArgb(kBase3);
|
|
|
|
theme.accent = MakeArgb(kBlue);
|
|
theme.accentSoft = MakeArgb(0xCFE4F3u);
|
|
theme.hover = MakeArgb(0xE4DCC6u);
|
|
theme.pressed = MakeArgb(0xD8CFB6u);
|
|
theme.selection = MakeArgb(0xDCEAF6u);
|
|
|
|
theme.gridWeak = MakeArgb(0xECE5D1u);
|
|
theme.gridStrong = MakeArgb(0xDCD4BEu);
|
|
theme.axisLine = MakeArgb(kBase1);
|
|
theme.cursor = MakeArgb(kOrange);
|
|
theme.readoutBg = MakeArgb(0xF6EFDCu);
|
|
theme.danger = MakeArgb(kRed);
|
|
theme.warning = MakeArgb(kYellow);
|
|
return theme;
|
|
}();
|
|
}
|
|
|
|
const Theme& SolarizedLight()
|
|
{
|
|
return kSolarizedLight;
|
|
}
|
|
|
|
const std::uint32_t* SignalPalette(int& count)
|
|
{
|
|
count = static_cast<int>(sizeof(kSignalPalette) / sizeof(kSignalPalette[0]));
|
|
return kSignalPalette;
|
|
}
|
|
|
|
int SignalColorCount()
|
|
{
|
|
return static_cast<int>(sizeof(kSignalPalette) / sizeof(kSignalPalette[0]));
|
|
}
|
|
|
|
} // namespace jdi
|