diff --git a/data/resources/style.css b/data/resources/style.css index 030e5bc6cc5c71e7f22cb696e3729c14beca5565..0a1a5dd94b60cf3ca4ca54155a093bc25f453151 100644 --- a/data/resources/style.css +++ b/data/resources/style.css @@ -18,6 +18,11 @@ entry selection{ background-color: @foreground_color; } +.color-exclude { + background-color: @foreground_color; + color: @inverted_color; +} + .fg-entry image.left{ color: @foreground_color; } diff --git a/data/resources/ui/colour-entry.ui b/data/resources/ui/colour-entry.ui index 509fe155a5e7c4ef6d3a93f8ce180305c6ff0d53..6e870db910e9394b691e720d0b60af2f8a10a53e 100644 --- a/data/resources/ui/colour-entry.ui +++ b/data/resources/ui/colour-entry.ui @@ -7,8 +7,9 @@ color-select-symbolic True + diff --git a/data/resources/ui/shortcuts.ui b/data/resources/ui/shortcuts.ui index 4aa4dcf512bef8b4560a7cc8a5c292912b93356c..4d7bfc93f0ff803dd054905cef7e4b6b739248bd 100644 --- a/data/resources/ui/shortcuts.ui +++ b/data/resources/ui/shortcuts.ui @@ -18,6 +18,13 @@ win.reverse-colors + + + True + Reset Colors + win.reset-colors + + True @@ -39,3 +46,4 @@ + diff --git a/data/resources/ui/window.ui b/data/resources/ui/window.ui index d68e7ee62c68eaafb2117ed74b900c4d09eef94d..e76899e0e701adcaa1e90d8561752a922990faa2 100644 --- a/data/resources/ui/window.ui +++ b/data/resources/ui/window.ui @@ -88,6 +88,24 @@ + + + + + edit-undo-symbolic + 10 + 10 + end + end + win.reset-colors + + + + + + diff --git a/src/window.rs b/src/window.rs index a0d370c6f687d851add4be558c4c50b14e50678a..be950163d7c00a036eef9e90b54beba4b40aa97e 100644 --- a/src/window.rs +++ b/src/window.rs @@ -103,9 +103,11 @@ impl Window { imp.level_bar.set_contrast_level(contrast_level); imp.preview.set_contrast_level(contrast_level); + let inverted_colour = gdk::RGBA::builder().red(1.0-fg_colour.red()).green(1.0-fg_colour.green()).blue(1.0-fg_colour.blue()).build(); let mut css = String::new(); css.push_str(&format!("@define-color background_color {};", bg_colour.to_string())); css.push_str(&format!("@define-color foreground_color {};", fg_colour.to_string())); + css.push_str(&format!("@define-color inverted_color {};", inverted_colour.to_string())); imp.sender.borrow().as_ref().unwrap().send(Action::ApplyStylesheet(css)).unwrap(); } @@ -135,24 +137,43 @@ impl Window { window.colour_changed(bg_colour, fg_colour); }); - let bg_handle = bg_entry.connect_changed(on_entry_changed.clone()); - let fg_handle = fg_entry.connect_changed(on_entry_changed); + let bg_handle_reverse = bg_entry.connect_changed(on_entry_changed.clone()); + let fg_handle_reverse = fg_entry.connect_changed(on_entry_changed.clone()); + let bg_handle_reset = bg_entry.connect_changed(on_entry_changed.clone()); + let fg_handle_reset = fg_entry.connect_changed(on_entry_changed); action!( self, "reverse-colors", clone!(@weak fg_entry, @weak bg_entry, @weak self as window => move |_, _| { - fg_entry.block_signal(&fg_handle); - bg_entry.block_signal(&bg_handle); + fg_entry.block_signal(&fg_handle_reverse); + bg_entry.block_signal(&bg_handle_reverse); let fg_colour = fg_entry.colour(); let bg_colour = bg_entry.colour(); fg_entry.set_colour(bg_colour); bg_entry.set_colour(fg_colour); - fg_entry.unblock_signal(&fg_handle); - bg_entry.unblock_signal(&bg_handle); + fg_entry.unblock_signal(&fg_handle_reverse); + bg_entry.unblock_signal(&bg_handle_reverse); window.colour_changed(fg_colour, bg_colour); }) ); + + action!( + self, + "reset-colors", + clone!(@weak fg_entry, @weak bg_entry, @weak self as window => move |_, _| { + fg_entry.block_signal(&fg_handle_reset); + bg_entry.block_signal(&bg_handle_reset); + let fg_colour = fg_entry.colour(); + let iv_colour = gdk::RGBA::builder().red(1.0-fg_colour.red()).green(1.0-fg_colour.green()).blue(1.0-fg_colour.blue()).build(); + fg_entry.set_colour(fg_colour); + bg_entry.set_colour(iv_colour); + fg_entry.unblock_signal(&fg_handle_reset); + bg_entry.unblock_signal(&bg_handle_reset); + + window.colour_changed(iv_colour, fg_colour); + }) + ); } }