diff options
| -rw-r--r-- | src/edit.rs | 89 | 
1 files changed, 87 insertions, 2 deletions
| diff --git a/src/edit.rs b/src/edit.rs index d640db2..2192f2c 100644 --- a/src/edit.rs +++ b/src/edit.rs @@ -12,6 +12,10 @@ slint::slint! {      export global Aux := {          property<int> selected: 0;          callback format-rgb-hex(color) -> string; +        callback format-rgb-component(int) -> string; +        callback color-of-rgb-component(string, int) -> color; +        callback component-of-rgb(string, color) -> int; +        callback selected-color() -> color;      }      Colors := Rectangle { @@ -67,6 +71,53 @@ slint::slint! {          }      } +    ComponentEdit := HorizontalBox { +        height    : 18pt; +        alignment : start; + +        property <int>    val; +        property <string> comp : ""; + +        Text { +            width       : 15%; +            height      : 14.4pt; +            color       : #a0a0a0; +            font-size   : 12pt; +            font-weight : 700; +            text        : Aux.format-rgb-component (val); +        } + +        Rectangle { +            border-width : 2px; +            height       : 14.4pt; +            width        : 75%; +            background   : Aux.color-of-rgb-component (comp, val); +        } +    } + +    Edit := Rectangle { +        width        : 100%; +        border-width : 2px; +        background: @linear-gradient(90deg, #002b36 0%, #073642 100%); +        property<color> rgb : Colors.white; + +        callback update (color); +        update (col) => { +            debug("edit > update"); +            //red.val   = col.red(); +            //green.val = col.green(); +            //blue.val  = col.blue(); +        } + +        VerticalBox { +            alignment : start; + +            red     := ComponentEdit { val : Aux.component-of-rgb("r", rgb); comp: "r"; } +            green   := ComponentEdit { val : Aux.component-of-rgb("g", rgb); comp: "g"; } +            blue    := ComponentEdit { val : Aux.component-of-rgb("b", rgb); comp: "b"; } +        } +    } +      GuiEdit := Window {          property scheme-name <=> name.text; @@ -108,11 +159,16 @@ slint::slint! {                  if (event.modifiers.control) {                      //debug("control was pressed during this event");                  } +                edit.update( +                    Aux.selected < 8 +                        ? primary-colors.colors   [Aux.selected] +                        : secondary-colors.colors [Aux.selected - 8] +                );                  accept              }          } -        color-vbox := VerticalBox { +        master := VerticalBox {              alignment: start;              callback select-prev(); @@ -151,6 +207,9 @@ slint::slint! {              secondary-colors := Colors {                  base : 8;              } + +            edit := Edit { +            }          }      }  } @@ -189,7 +248,9 @@ impl Edit          let gui = GuiEdit::new(); -        gui.on_user_quit (move || { std::process::exit(0); }); +        gui.on_user_quit(move || { +            std::process::exit(0); +        });          gui.global::<Aux>().on_format_rgb_hex(|col| {              let x = (col.red() as u32) << 2 @@ -198,6 +259,30 @@ impl Edit              format!("#{:06x}", x).into()          }); +        gui.global::<Aux>().on_format_rgb_component(|val| { +            let val = 0xff & val; +            format!("#{:02x} ({})", val, val).into() +        }); + +        gui.global::<Aux>().on_color_of_rgb_component(|comp, val| { +            match comp.as_str() { +                "r" => Color::from_rgb_u8(val as u8, 0, 0), +                "g" => Color::from_rgb_u8(0, val as u8, 0), +                "b" => Color::from_rgb_u8(0, 0, val as u8), +                _ => Color::from_rgb_u8(0, 0, 0), +            } +        }); + +        /* Why the hell is there no API for this in .60‽ */ +        gui.global::<Aux>().on_component_of_rgb(|comp, col| { +            match comp.as_str() { +                "r" => col.red() as i32, +                "g" => col.green() as i32, +                "b" => col.blue() as i32, +                _ => 0, +            } +        }); +          if let Some(name) = name {              gui.set_scheme_name(name.into());          } | 
