[gnome-clocks] Add high-contrast theme



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]