fltk_theme/widget_themes/
mod.rs

1#![allow(unused_variables)]
2#![allow(clippy::many_single_char_names)]
3
4use crate::activated_color;
5use fltk::{
6    app,
7    draw::*,
8    enums::{Color, FrameType, UnmappedFrameType},
9    misc::Tooltip,
10};
11
12pub(crate) mod aero;
13pub(crate) mod aqua_classic;
14pub(crate) mod blue;
15pub(crate) mod classic;
16pub(crate) mod dark;
17pub(crate) mod greybird;
18pub(crate) mod high_contrast;
19pub(crate) mod metro;
20
21// const OS_BG_DOWN_BOX_TYPE: UnmappedFrameType = UnmappedFrameType::from_i32(FrameType::FreeBoxType.as_i32() + 1);
22
23pub const OS_BUTTON_UP_BOX: FrameType = FrameType::GtkUpBox;
24pub const OS_CHECK_DOWN_BOX: FrameType = FrameType::GtkDownBox;
25pub const OS_BUTTON_UP_FRAME: FrameType = FrameType::GtkUpFrame;
26pub const OS_CHECK_DOWN_FRAME: FrameType = FrameType::GtkDownFrame;
27pub const OS_PANEL_THIN_UP_BOX: FrameType = FrameType::GtkThinUpBox;
28pub const OS_SPACER_THIN_DOWN_BOX: FrameType = FrameType::GtkThinDownBox;
29pub const OS_PANEL_THIN_UP_FRAME: FrameType = FrameType::GtkThinUpFrame;
30pub const OS_SPACER_THIN_DOWN_FRAME: FrameType = FrameType::GtkThinDownFrame;
31pub const OS_RADIO_ROUND_DOWN_BOX: FrameType = FrameType::GtkRoundDownBox;
32pub const OS_HOVERED_UP_BOX: FrameType = FrameType::PlasticUpBox;
33pub const OS_DEPRESSED_DOWN_BOX: FrameType = FrameType::PlasticDownBox;
34pub const OS_HOVERED_UP_FRAME: FrameType = FrameType::PlasticUpFrame;
35pub const OS_DEPRESSED_DOWN_FRAME: FrameType = FrameType::PlasticDownFrame;
36pub const OS_INPUT_THIN_DOWN_BOX: FrameType = FrameType::PlasticThinDownBox;
37pub const OS_INPUT_THIN_DOWN_FRAME: FrameType = FrameType::PlasticRoundDownBox;
38pub const OS_MINI_BUTTON_UP_BOX: FrameType = FrameType::GleamUpBox;
39pub const OS_MINI_DEPRESSED_DOWN_BOX: FrameType = FrameType::GleamDownBox;
40pub const OS_MINI_BUTTON_UP_FRAME: FrameType = FrameType::GleamUpFrame;
41pub const OS_MINI_DEPRESSED_DOWN_FRAME: FrameType = FrameType::GleamDownFrame;
42pub const OS_DEFAULT_BUTTON_UP_BOX: FrameType = FrameType::DiamondUpBox;
43pub const OS_DEFAULT_HOVERED_UP_BOX: FrameType = FrameType::PlasticThinUpBox;
44pub const OS_DEFAULT_DEPRESSED_DOWN_BOX: FrameType = FrameType::DiamondDownBox;
45pub const OS_TOOLBAR_BUTTON_HOVER_BOX: FrameType = FrameType::GleamRoundUpBox;
46pub const OS_TABS_BOX: FrameType = FrameType::EmbossedBox;
47pub const OS_SWATCH_BOX: FrameType = FrameType::EngravedBox;
48pub const OS_SWATCH_FRAME: FrameType = FrameType::EngravedFrame;
49pub const OS_BG_BOX: FrameType = FrameType::FreeBoxType;
50// TODO: replace with FreeBoxType.as_i32() when const fn possible (Rust 1.65)
51pub(crate) const OS_BG_DOWN_BOX: FrameType =
52    FrameType::UserFrameType(unsafe { UnmappedFrameType::from_i32(57) });
53pub(crate) const OS_TOOLBAR_FRAME: FrameType =
54    FrameType::UserFrameType(unsafe { UnmappedFrameType::from_i32(58) });
55
56pub const OS_FONT_SIZE: i32 = if cfg!(target_os = "windows") { 12 } else { 13 };
57
58pub(crate) fn use_native_settings() {
59    app::set_visible_focus(false);
60    app::set_scrollbar_size(15);
61    Tooltip::set_font_size(OS_FONT_SIZE);
62    Tooltip::set_delay(0.5);
63}
64
65pub(crate) fn vertical_gradient(x1: i32, y1: i32, x2: i32, y2: i32, c1: Color, c2: Color) {
66    let imax = y2 - y1;
67    let d = if imax > 0 { imax } else { 1 };
68    if app::draw_frame_active() {
69        for i in 0..=imax {
70            let w = 1.0 - i as f32 / d as f32;
71            set_draw_color(Color::color_average(c1, c2, w));
72            draw_xyline(x1, y1 + i, x2);
73        }
74    } else {
75        for i in 0..=imax {
76            let w = 1.0 - i as f32 / d as f32;
77            set_draw_color(Color::inactive(&Color::color_average(c1, c2, w)));
78            draw_xyline(x1, y1 + i, x2);
79        }
80    }
81}
82
83pub(crate) fn horizontal_gradient(x1: i32, y1: i32, x2: i32, y2: i32, c1: Color, c2: Color) {
84    let imax = x2 - x1;
85    let d = if imax > 0 { imax } else { 1 };
86    if app::draw_frame_active() {
87        for i in 0..=imax {
88            let w = 1.0 - i as f32 / d as f32;
89            set_draw_color(Color::color_average(c1, c2, w));
90            draw_yxline(x1 + i, y1, y2);
91        }
92    } else {
93        for i in 0..=imax {
94            let w = 1.0 - i as f32 / d as f32;
95            set_draw_color(Color::inactive(&Color::color_average(c1, c2, w)));
96            draw_yxline(x1 + i, y1, y2);
97        }
98    }
99}
100
101pub(crate) fn devalued(c: Color, w: f32) -> Color {
102    Color::color_average(Color::Black, c, w)
103}