From 0cf6a01681e750ab4ddd0ca65787ff6d2f41083c Mon Sep 17 00:00:00 2001 From: Philipp Gesang Date: Thu, 18 Aug 2022 06:12:37 +0200 Subject: edit: abstract out the color views --- src/edit.rs | 173 +++++++++++++++++++++++++++--------------------------------- 1 file changed, 77 insertions(+), 96 deletions(-) diff --git a/src/edit.rs b/src/edit.rs index f43dcbd..b5b35ac 100644 --- a/src/edit.rs +++ b/src/edit.rs @@ -13,120 +13,97 @@ slint::slint! { callback format-rgb-hex(color) -> string; } - GuiEdit := Window { - property scheme-name <=> name.text; + Colors := Rectangle { + width : 100%; + border-width : 2px; + background: @linear-gradient(90deg, #002b36 0%, #073642 100%); - property <[color]> primary: [ + property <[color]> colors: [ rgb( 0, 0, 0), ]; - property <[color]> secondary: [ - rgb(255, 255, 255), - ]; + squares := HorizontalBox { + width : 100%; + height : 20px; - VerticalBox { - alignment: start; + for col[i] in colors : psquare := Rectangle { + property current-color : col; + width : (squares.width / 8) - 12px; + height : (squares.width / 8) - 12px; + border-color : ptouch.has-hover ? #eeeeee : #333333; + border-width : 3px; + forward-focus: pval; - status := HorizontalBox { - width : 100%; + ptouch := TouchArea { + } - name := Text { - text : ""; - color : #a0a0a0; - font-weight : 700; + prect := Rectangle { + y : 3px; + x : 3px; + width : psquare.width - 6px; + height : psquare.height - 6px; + background : current-color; + + VerticalBox { + pdesc := Text { + text : i; + } + Rectangle { + background : ptouch.has-hover ? #ffffff77 : #cccccc33; + pval := TextInput { + text : Aux.format-rgb-hex(current-color); + font-size : 9pt; + } + } + Rectangle { } + } } } + } + } - primary-colors := Rectangle { - width : 100%; - background : #aaaaaa; - border-width : 2px; + GuiEdit := Window { + property scheme-name <=> name.text; - squares-primary := HorizontalBox { - width : 100%; - height : 20px; + callback set-primary ([color]); + callback set-secondary ([color]); - for col[i] in primary : psquare := Rectangle { - property current-color : col; - width : (squares-primary.width / 8) - 12px; - height : (squares-primary.width / 8) - 12px; - border-color : ptouch.has-hover ? #eeeeee : #333333; - border-width : 3px; + set-primary (colors) => { primary-colors .colors = colors; } + set-secondary (colors) => { secondary-colors.colors = colors; } - ptouch := TouchArea { - } + callback user-quit(); - prect := Rectangle { - forward-focus: pval; - y : 3px; - x : 3px; - width : psquare.width - 6px; - height : psquare.height - 6px; - background : current-color; - - VerticalBox { - pdesc := Text { - text : i; - } - Rectangle { - background : ptouch.has-hover ? #ffffff77 : #cccccc33; - pval := TextInput { - text : Aux.format-rgb-hex(current-color); - font-size : 9pt; - } - } - Rectangle { } - } - } - } + key-inputs := FocusScope { + key-pressed(event) => { + debug("input: got", event.text, "shift?", event.modifiers.shift); + if (event.text == "q") { + user-quit(); + } + if (event.modifiers.control) { + //debug("control was pressed during this event"); } + accept } + } - secondary-colors := Rectangle { - width : 100%; - background : #bbbbbb; - border-width : 2px; - - squares-secondary := HorizontalBox { - width : 100%; - height : 20px; - - for col[i] in secondary : ssquare := Rectangle { - property current-color : col; - property i2 : i + 8; - width : (squares-secondary.width / 8) - 12px; - height : (squares-secondary.width / 8) - 12px; - border-color : stouch.has-hover ? #eeeeee : #333333; - border-width : 3px; - forward-focus: sval; - - stouch := TouchArea { - } + color-vbox := VerticalBox { + alignment: start; - srect := Rectangle { - y : 3px; - x : 3px; - width : ssquare.width - 6px; - height : ssquare.height - 6px; - background : current-color; - - VerticalBox { - sdesc := Text { - text : i; - } - Rectangle { - background : stouch.has-hover ? #ffffff77 : #cccccc33; - sval := TextInput { - text : Aux.format-rgb-hex(current-color); - font-size : 9pt; - } - } - Rectangle { } - } - } - } + status := HorizontalBox { + width : 100%; + + name := Text { + text : ""; + color : #a0a0a0; + font-weight : 700; } } + + primary-colors := Colors { + } + + secondary-colors := Colors { + } } } } @@ -165,6 +142,10 @@ impl Edit let gui = GuiEdit::new(); + gui.on_user_quit(move || { + std::process::exit(0); + }); + gui.global::().on_format_rgb_hex(|col| { let x = (col.red() as u32) << 2 | (col.green() as u32) << 1 @@ -176,8 +157,8 @@ impl Edit gui.set_scheme_name(name.into()); } - gui.set_primary(primary.into()); - gui.set_secondary(secondary.into()); + gui.invoke_set_primary(primary.into()); + gui.invoke_set_secondary(secondary.into()); gui.run(); -- cgit v1.2.3