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
+
+
+
+
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 @@
+
+
+
+
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);
+ })
+ );
}
}