[gnome-clocks] Add high-contrast theme
- From: Paolo Borelli <pborelli src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-clocks] Add high-contrast theme
- Date: Sat, 6 Feb 2016 14:06:50 +0000 (UTC)
commit 1d8e3e34fb430a5c100ded420b5660046ff9da00
Author: Paolo Borelli <pborelli gnome org>
Date: Sat Feb 6 12:38:24 2016 +0100
Add high-contrast theme
Load theme-specific css and use it to improve how things look in
High Contrast
data/css/gnome-clocks.css | 4 +-
data/css/gnome-clocks.highcontrast.css | 73 ++++++++++++++++++++++++++++++++
data/gnome-clocks.gresource.xml | 1 +
src/application.vala | 19 ++++++--
src/utils.vala | 23 ++++++++--
src/widgets.vala | 9 +++-
6 files changed, 115 insertions(+), 14 deletions(-)
---
diff --git a/data/css/gnome-clocks.css b/data/css/gnome-clocks.css
index 3b095a3..9dd322e 100644
--- a/data/css/gnome-clocks.css
+++ b/data/css/gnome-clocks.css
@@ -57,7 +57,7 @@ window > stack:backdrop {
center center, 0,
center bottom, 1.0,
from(shade(@theme_selected_bg_color, 1.4)),
to(@theme_selected_bg_color));
- text-shadow: 0 2px 2px rgba(0,0,0,0.5)
+ text-shadow: 0 2px 2px rgba(0,0,0,0.5);
}
.clocks-digital-renderer.snoozing {
@@ -75,7 +75,7 @@ window > stack:backdrop {
center center, 0,
center bottom, 1.0,
from(shade(@warning_color,1.1)), to(shade(@warning_color,0.99)));
- text-shadow: 0 2px 2px rgba(0,0,0,0.5)
+ text-shadow: 0 2px 2px rgba(0,0,0,0.5);
}
.clocks-digital-renderer.inactive {
diff --git a/data/css/gnome-clocks.highcontrast.css b/data/css/gnome-clocks.highcontrast.css
new file mode 100644
index 0000000..c91b399
--- /dev/null
+++ b/data/css/gnome-clocks.highcontrast.css
@@ -0,0 +1,73 @@
+window > stack {
+ background-color: @theme_bg_color;
+ box-shadow: none;
+}
+
+window > stack:backdrop {
+ background-color: @theme_unfocused_bg_color;
+ box-shadow: none;
+}
+
+.clocks-digital-renderer {
+ border: 2px solid rgb(141, 141, 141);
+}
+
+.clocks-digital-renderer.stripe {
+ background-color: transparent;
+ border: none;
+}
+
+/* world */
+
+.clocks-digital-renderer.light.stripe,
+.clocks-digital-renderer.light.stripe:hover {
+ background-color: white;
+ color: black;
+}
+
+.clocks-digital-renderer.dark.stripe,
+.clocks-digital-renderer.dark.stripe:hover {
+ background-color: black;
+ color: white;
+}
+
+.check.clocks-digital-renderer-check.light {
+ color: black;
+}
+
+.check.clocks-digital-renderer-check.dark {
+ color: white;
+}
+
+/* alarms */
+
+.clocks-digital-renderer.active,
+.clocks-digital-renderer.active:hover {
+ background-image: none;
+ background-color: @theme_selected_bg_color;
+ color: @theme_selected_fg_color;
+}
+
+.clocks-digital-renderer.snoozing,
+.clocks-digital-renderer.snoozing:hover {
+ background-image: none;
+ background-color: @warning_color;
+ color: @theme_fg_color;
+ text-shadow: none;
+}
+
+.clocks-digital-renderer.inactive,
+.clocks-digital-renderer.inactive:hover {
+ background-image: none;
+ background-color: @theme_bg_color;
+ color: @theme_fg_color;
+}
+
+.check.clocks-digital-renderer-check.active {
+ color: @theme_selected_fg_color;
+}
+
+.check.clocks-digital-renderer-check.inactive,
+.check.clocks-digital-renderer-check.snoozing {
+ color: @theme_fg_color;
+}
diff --git a/data/gnome-clocks.gresource.xml b/data/gnome-clocks.gresource.xml
index adee346..c2390e8 100644
--- a/data/gnome-clocks.gresource.xml
+++ b/data/gnome-clocks.gresource.xml
@@ -2,6 +2,7 @@
<gresources>
<gresource prefix="/org/gnome/clocks">
<file>css/gnome-clocks.css</file>
+ <file>css/gnome-clocks.highcontrast.css</file>
<file preprocess="xml-stripblanks">gtk/menus.ui</file>
<file preprocess="xml-stripblanks">gtk/help-overlay.ui</file>
<file preprocess="xml-stripblanks">ui/window.ui</file>
diff --git a/src/application.vala b/src/application.vala
index 6f5518f..9a85d76 100644
--- a/src/application.vala
+++ b/src/application.vala
@@ -84,14 +84,23 @@ public class Application : Gtk.Application {
window.present ();
}
+ private void update_theme (Gtk.Settings settings) {
+ string theme_name;
+
+ settings.get("gtk-theme-name", out theme_name);
+ Utils.load_theme_css (theme_name);
+ }
+
protected override void startup () {
base.startup ();
- // FIXME: move the css in gnome-theme-extras
- var css_provider = Utils.load_css ("gnome-clocks.css");
- Gtk.StyleContext.add_provider_for_screen (Gdk.Screen.get_default(),
- css_provider,
- Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
+ Utils.load_main_css ();
+
+ var settings = Gtk.Settings.get_default ();
+ settings.notify["gtk-theme-name"].connect(() => {
+ update_theme (settings);
+ });
+ update_theme (settings);
add_accelerator ("<Primary>n", "win.new", null);
add_accelerator ("<Primary>a", "win.select-all", null);
diff --git a/src/utils.vala b/src/utils.vala
index 306bd71..bfba72e 100644
--- a/src/utils.vala
+++ b/src/utils.vala
@@ -21,15 +21,30 @@ extern int clocks_cutils_get_week_start ();
namespace Clocks {
namespace Utils {
-public Gtk.CssProvider load_css (string css) {
+private void load_css (string css, bool required) {
var provider = new Gtk.CssProvider ();
try {
- var file = File.new_for_uri("resource:///org/gnome/clocks/css/" + css);
+ var file = File.new_for_uri("resource:///org/gnome/clocks/css/" + css + ".css");
provider.load_from_file (file);
} catch (Error e) {
- warning ("loading css: %s", e.message);
+ if (required) {
+ warning ("loading css: %s", e.message);
+ }
+
+ return;
}
- return provider;
+
+ Gtk.StyleContext.add_provider_for_screen (Gdk.Screen.get_default(),
+ provider,
+ Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
+}
+
+public void load_main_css () {
+ load_css ("gnome-clocks", true);
+}
+
+public void load_theme_css (string theme_name) {
+ load_css ("gnome-clocks." + theme_name.down (), false);
}
public Gdk.Pixbuf? load_image (string image) {
diff --git a/src/widgets.vala b/src/widgets.vala
index 6e54f52..8e31d10 100644
--- a/src/widgets.vala
+++ b/src/widgets.vala
@@ -168,11 +168,12 @@ private class DigitalClockRenderer : Gtk.CellRendererPixbuf {
Gdk.Rectangle area = {margin, margin, TILE_SIZE, TILE_SIZE};
base.render (cr, widget, area, area, flags);
} else {
- context.render_frame (cr, margin, margin, TILE_SIZE, TILE_SIZE);
context.render_background (cr, margin, margin, TILE_SIZE, TILE_SIZE);
}
+ context.render_frame (cr, margin, margin, TILE_SIZE, TILE_SIZE);
- int w = cell_area.width - 2 * margin;
+ var border = context.get_border(context.get_state ());
+ int w = cell_area.width - 2 * margin - border.left - border.right;
// create the layouts so that we can measure them
var layout = widget.create_pango_layout ("");
@@ -202,7 +203,7 @@ private class DigitalClockRenderer : Gtk.CellRendererPixbuf {
// draw the stripe background
int stripe_h = 128;
- int x = margin;
+ int x = margin + border.left;
int y = (cell_area.height - stripe_h) / 2;
context.add_class ("stripe");
@@ -235,6 +236,8 @@ private class DigitalClockRenderer : Gtk.CellRendererPixbuf {
context.save ();
context.add_class (Gtk.STYLE_CLASS_CHECK);
+ context.add_class ("clocks-digital-renderer-check");
+ context.add_class (css_class);
if (checked) {
context.set_state (Gtk.StateFlags.CHECKED);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]