// fltk_theme.cpp — Fl_Theme(header-only C++ 主题库)→ C API 桥接 // // Fl_Theme 是纯 C++(模板/enum class/Fl::set_boxtype 绘制回调),无法用 // 纯 C 头文件对接,故写此桥接把主题功能导出为 C 函数,供 Viper extern FFI // 调用(includes/fltk/_cfl_theme.vp)。 // // 编译(mingw64): // g++ -std=c++17 -O2 -c fltk_theme.cpp \ // -I ../Fl_Theme -I ../../cfltk/fltk -o ../../cfltk/build/fltk_theme.o // ar rcs ../../cfltk/build/libfltk_theme.a ../../cfltk/build/fltk_theme.o // // 链接需要 libcfltk2.a(cfltk2 库)+ libfltk_images.a(Fl_SVG_Image)。 #include "Fl_Theme/Fl_Theme.hpp" extern "C" { // 应用深色主题(flat 控件方案 + BLACK 色板 + 深灰背景/白前景) void Fl_Theme_apply_dark() { WidgetTheme::apply(ThemeType::Dark); } // 应用 Metro 主题(metro 控件方案 + 蓝灰配色) void Fl_Theme_apply_metro() { WidgetTheme::apply(ThemeType::Metro); } // 设置 flat 控件圆角半径(默认 5;在应用主题前调用) void Fl_Theme_set_border_radius(int radius) { FLAT_BORDER_RADIUS = radius; } // 仅应用 flat 控件绘制方案(不改颜色),用于非 Dark/Metro 的主题切换 void Fl_Theme_apply_flat_scheme() { init_flat_theme(); } // 仅应用 metro 控件绘制方案 void Fl_Theme_apply_metro_scheme() { init_metro_theme(); } }