fltk-theme 0.2.1

A theming crate for fltk-rs
# fltk-theme

A theming crate for fltk-rs.
- The widget themes are based on work by [Remy Oukaour]https://github.com/roukaour/viz-brain-visualizer and [Rangi42]https://github.com/Rangi42/tilemap-studio.
- The color themes are based on work by [Greg Ercolano]https://groups.google.com/g/fltkgeneral/c/3A5VC_854ok/m/sDpJsmuLBAAJ.
- Some of the widget schemes are based on work by the NTK GUI library, others are nouveau.

## Usage
```toml
[dependencies]
fltk = "1.2"
fltk-theme = "0.2"
```

## Example

Setting the color theme:

```rust
use fltk::{prelude::*, *};
use fltk_theme::{ColorTheme, color_themes};

fn main() {
    let a = app::App::default().with_scheme(app::Scheme::Gtk);
    let theme = ColorTheme::from_colormap(color_themes::BLACK_THEME);
    theme.apply();
    let mut win = window::Window::default().with_size(400, 300);
    let mut btn = button::Button::new(160, 200, 80, 40, "Hello");
    btn.set_color(btn.color().lighter());
    win.end();
    win.show();
    a.run().unwrap();
}
```

Setting the widget theme:

```rust
use fltk::{prelude::*, *};
use fltk_theme::{widget_themes, WidgetTheme, ThemeType};

fn main() {
    let a = app::App::default();
    let widget_theme = WidgetTheme::new(ThemeType::AquaClassic);
    widget_theme.apply();
    let mut win = window::Window::default().with_size(400, 300);
    let mut btn = button::Button::new(160, 200, 80, 30, "Hello");
    btn.set_frame(widget_themes::OS_DEFAULT_BUTTON_UP_BOX);
    win.end();
    win.show();
    a.run().unwrap();
}
```

Setting the widget scheme:
```rust
use fltk::{prelude::*, *};
use fltk_theme::{WidgetScheme, SchemeType};

fn main() {
    let a = app::App::default();
    let widget_scheme = WidgetScheme::new(SchemeType::Clean);
    widget_scheme.apply();
    let mut win = window::Window::default().with_size(400, 300);
    let mut btn = button::Button::new(160, 200, 80, 30, "Hello");
    win.end();
    win.show();
    a.run().unwrap();
}
```

## Widget themes

- Classic (old Windows theme)
- ![alt_test]screenshots/classic.jpg

- Aero (Windows 7 theme)
- ![alt_test]screenshots/aero.jpg

- AquaClassic (classic MacOS theme),
- ![alt_test]screenshots/aqua_classic.jpg

- Dark
- ![alt_test]screenshots/dark.jpg

- High Contrast
- ![alt_test]screenshots/high_contrast.jpg

- Blue
- ![alt_test]screenshots/blue.jpg

- Metro (Windows 8 theme)
- ![alt_test]screenshots/metro.jpg

- Greybird (Gnome xfce)
- ![alt_test]screenshots/greybird.jpg

## Theme FrameTypes

Choosing a WidgetTheme will also define a set of FrameTypes which can be used for your widgets.
```
OS_BUTTON_UP_BOX
OS_CHECK_DOWN_BOX
OS_BUTTON_UP_FRAME
OS_CHECK_DOWN_FRAME
OS_PANEL_THIN_UP_BOX
OS_SPACER_THIN_DOWN_BOX
OS_PANEL_THIN_UP_FRAME
OS_SPACER_THIN_DOWN_FRAME
OS_RADIO_ROUND_DOWN_BOX
OS_HOVERED_UP_BOX
OS_DEPRESSED_DOWN_BOX
OS_HOVERED_UP_FRAME
OS_DEPRESSED_DOWN_FRAME
OS_INPUT_THIN_DOWN_BOX
OS_INPUT_THIN_DOWN_FRAME
OS_MINI_BUTTON_UP_BOX
OS_MINI_DEPRESSED_DOWN_BOX
OS_MINI_BUTTON_UP_FRAME
OS_MINI_DEPRESSED_DOWN_FRAME
OS_DEFAULT_BUTTON_UP_BOX
OS_DEFAULT_HOVERED_UP_BOX
OS_DEFAULT_DEPRESSED_DOWN_BOX
OS_TOOLBAR_BUTTON_HOVER_BOX
OS_TABS_BOX
OS_SWATCH_BOX
OS_SWATCH_FRAME
OS_BG_BOX
```

You can check the frames example to see all `FrameType`'s you can apply to you widgets.
- ![alt_test]screenshots/frames.jpg


## Color themes

- Black theme
- ![alt_test]screenshots/black.jpg

- Dark theme
- ![alt_test]screenshots/dark_color.jpg

- Plain gray theme
- ![alt_test]screenshots/plain-gray.jpg

- Tan theme
- ![alt_test]screenshots/tan.jpg

- Shake theme
- ![alt_test]screenshots/shake.jpg


## Widget Schemes

These provide schemes for widgets without color theming. Currently there are 6 schemes:
- Aqua: Tries to mimic the modern MacOS's styles.
- ![alt_test]screenshots/aqua_scheme.jpg

- Fluent: Tries to mimic Window's 10 styles.
- ![alt_test]screenshots/fluent.jpg
- ![alt_test]screenshots/fluent2.jpg

- Clean: Taken from NTK's clear scheme.
- ![alt_test]screenshots/clean.jpg

- Crystal: Taken from NTK's crystal scheme.
- ![alt_test]screenshots/crystal.jpg

- Gleam: Taken from NTK's gleam scheme.
- ![alt_test]screenshots/gleam.jpg

- SvgBased: This overrides FLTK's Base scheme round/rounded/oval FrameTypes which are drawn using scalable vector graphics.
- ![alt_test]screenshots/svgbased.jpg