[simple-scan] Support dark preference
- From: Bartosz <bkosiorek src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [simple-scan] Support dark preference
- Date: Wed, 12 Jan 2022 10:59:38 +0000 (UTC)
commit 06c9e608c17ce9a9121051b582310081ccab0ebf
Author: Alexander Mikhaylenko <alexm gnome org>
Date: Wed Jan 12 10:59:38 2022 +0000
Support dark preference
meson.build | 4 ++--
src/app-window.vala | 34 +-------------------------
src/book-view.vala | 13 ++++------
src/page-icon.vala | 68 ++++++++++++++++++++++++++++++++++++++++++----------
src/page-view.vala | 15 +++++-------
src/simple-scan.vala | 1 +
6 files changed, 69 insertions(+), 66 deletions(-)
---
diff --git a/meson.build b/meson.build
index c4a3bac2..81aabbda 100644
--- a/meson.build
+++ b/meson.build
@@ -7,7 +7,7 @@ project ('simple-scan', ['vala', 'c'],
],
meson_version: '>= 0.37.1')
-# FIXME Disable --disable-since-check after libhandy 1.2 is released
+# FIXME Disable --disable-since-check after libhandy 1.6 is released
add_project_arguments (
'--disable-since-check',
language: 'vala'
@@ -29,7 +29,7 @@ glib_dep = dependency ('glib-2.0', version: '>= 2.38')
gtk_dep = dependency ('gtk+-3.0', version: '>=3.24')
gmodule_dep = dependency ('gmodule-export-2.0')
gthread_dep = dependency ('gthread-2.0')
-libhandy_dep = dependency ('libhandy-1', version: '>= 1.1.90', required: false)
+libhandy_dep = dependency ('libhandy-1', version: '>= 1.5.0', required: false)
zlib_dep = dependency ('zlib')
cairo_dep = dependency ('cairo')
gdk_pixbuf_dep = dependency ('gdk-pixbuf-2.0')
diff --git a/src/app-window.vala b/src/app-window.vala
index f7a45bd2..59d421cb 100644
--- a/src/app-window.vala
+++ b/src/app-window.vala
@@ -1399,39 +1399,7 @@ public class AppWindow : Hdy.ApplicationWindow
box.add (page_box);
}
- /* Get colours for each page (from Tango palette) */
- var r = 1.0;
- var g = 1.0;
- var b = 1.0;
- switch (side)
- {
- case 'F':
- /* Plum */
- r = 0x75 / 255.0;
- g = 0x50 / 255.0;
- b = 0x7B / 255.0;
- break;
- case 'B':
- /* Orange */
- r = 0xF5 / 255.0;
- g = 0x79 / 255.0;
- b = 0.0;
- break;
- case 'C':
- /* Butter to Scarlet Red */
- var p = (items[i] - '1') / 5.0;
- r = (0xED / 255.0) * (1 - p) + 0xCC * p;
- g = (0xD4 / 255.0) * (1 - p);
- b = 0;
- break;
- }
-
- /* Mix with white to look more paper like */
- r = r + (1.0 - r) * 0.7;
- g = g + (1.0 - g) * 0.7;
- b = b + (1.0 - b) * 0.7;
-
- var icon = new PageIcon ("%c".printf (items[i]), r, g, b);
+ var icon = new PageIcon (side, items[i] - '1');
icon.visible = true;
page_box.add (icon);
}
diff --git a/src/book-view.vala b/src/book-view.vala
index 59e24694..df2beb4c 100644
--- a/src/book-view.vala
+++ b/src/book-view.vala
@@ -189,14 +189,7 @@ public class BookView : Gtk.Box
private void add_cb (Book book, Page page)
{
- Gdk.RGBA page_ruler_color;
- if (!get_style_context ().lookup_color ("theme_fg_color", out page_ruler_color))
- {
- warning ("Couldn't get theme_fg_color from GTK theme, needed to draw the page view ruler");
- /* Use a bright color so that theme makers notice it. */
- page_ruler_color.parse ("#00ff00");
- }
- var page_view = new PageView (page, page_ruler_color);
+ var page_view = new PageView (page);
page_view.changed.connect (page_view_changed_cb);
page_view.size_changed.connect (page_view_size_changed_cb);
page_data.insert (page, page_view);
@@ -450,6 +443,8 @@ public class BookView : Gtk.Box
for (var i = 0; i < book.n_pages; i++)
pages.append (get_nth_page (i));
+ var ruler_color = get_style_context ().get_color (get_state_flags ());
+
/* Render each page */
foreach (var page in pages)
{
@@ -462,7 +457,7 @@ public class BookView : Gtk.Box
context.save ();
context.translate (-x_offset, 0);
- page.render (context);
+ page.render (context, ruler_color);
context.restore ();
if (page.selected)
diff --git a/src/page-icon.vala b/src/page-icon.vala
index 793ca5bb..f1a25ead 100644
--- a/src/page-icon.vala
+++ b/src/page-icon.vala
@@ -12,18 +12,14 @@
public class PageIcon : Gtk.DrawingArea
{
- private string text;
- private double r;
- private double g;
- private double b;
+ private char side;
+ private int position;
private const int MINIMUM_WIDTH = 20;
- public PageIcon (string text, double r = 1.0, double g = 1.0, double b = 1.0)
+ public PageIcon (char side, int position)
{
- this.text = text;
- this.r = r;
- this.g = g;
- this.b = b;
+ this.side = side;
+ this.position = position;
}
public override void get_preferred_width (out int minimum_width, out int natural_width)
@@ -57,15 +53,61 @@ public class PageIcon : Gtk.DrawingArea
c.translate ((get_allocated_width () - w) / 2, (get_allocated_height () - h) / 2);
- c.rectangle (0.5, 0.5, w - 1, h - 1);
+ bool dark = Hdy.StyleManager.get_default ().dark;
+ bool hc = Hdy.StyleManager.get_default ().high_contrast;
+
+ if (dark && !hc)
+ c.rectangle (1, 1, w - 2, h - 2);
+ else
+ c.rectangle (0, 0, w, h);
+
+ Gdk.RGBA rgba = {};
+
+ switch (side)
+ {
+ case 'F':
+ /* Purple 2 */
+ rgba.parse ("#c061cb");
+ break;
+ case 'B':
+ /* Orange 3 */
+ rgba.parse ("#ff7800");
+ break;
+ default:
+ /* Yellow 3 to Red 2 */
+ Gdk.RGBA start = {}, end = {};
+ start.parse ("#f6d32d");
+ end.parse ("#ed333b");
+
+ double progress = position / 5.0;
+ rgba.red = start.red + (end.red - start.red) * progress;
+ rgba.green = start.green + (end.green - start.green) * progress;
+ rgba.blue = start.blue + (end.blue - start.blue) * progress;
+ break;
+ }
- c.set_source_rgb (r, g, b);
- c.fill_preserve ();
+ rgba.alpha = 0.3;
+
+ Gdk.cairo_set_source_rgba (c, rgba);
+ c.fill ();
c.set_line_width (1.0);
- c.set_source_rgb (0.0, 0.0, 0.0);
+ if (hc && dark)
+ c.set_source_rgba (1, 1, 1, 0.5);
+ else if (hc)
+ c.set_source_rgba (0, 0, 0, 0.5);
+ else
+ c.set_source_rgba (0, 0, 0, 0.15);
+
+ c.rectangle (0.5, 0.5, w - 1, h - 1);
c.stroke ();
+ if (dark)
+ c.set_source_rgb (1, 1, 1);
+ else
+ c.set_source_rgb (0, 0, 0);
+
+ var text = @"$(position + 1)";
Cairo.TextExtents extents;
c.text_extents (text, out extents);
c.translate ((w - extents.width) * 0.5 - 0.5, (h + extents.height) * 0.5 - 0.5);
diff --git a/src/page-view.vala b/src/page-view.vala
index 342df278..148dcca7 100644
--- a/src/page-view.vala
+++ b/src/page-view.vala
@@ -45,8 +45,6 @@ public class PageView : Object
}
}
- private Gdk.RGBA ruler_color;
-
private int ruler_width = 8;
private int border_width = 2;
@@ -86,13 +84,9 @@ public class PageView : Object
public signal void size_changed ();
public signal void changed ();
- /* It is necessary to ask the ruler color since it is themed with the GTK */
- /* theme foreground color, and this class doesn't have any GTK widget */
- /* available to lookup the color. */
- public PageView (Page page, Gdk.RGBA ruler_color)
+ public PageView (Page page)
{
this.page = page;
- this.ruler_color = ruler_color;
page.pixels_changed.connect (page_pixels_changed_cb);
page.size_changed.connect (page_size_changed_cb);
page.crop_changed.connect (page_overlay_changed_cb);
@@ -828,7 +822,10 @@ public class PageView : Object
}
}
- public void render (Cairo.Context context)
+ /* It is necessary to ask the ruler color since it is themed with the GTK */
+ /* theme foreground color, and this class doesn't have any GTK widget */
+ /* available to lookup the color. */
+ public void render (Cairo.Context context, Gdk.RGBA ruler_color)
{
update_animation ();
update_page_view ();
@@ -845,7 +842,7 @@ public class PageView : Object
context.paint ();
/* Draw page border */
- context.set_source_rgb (ruler_color.red, ruler_color.green, ruler_color.blue);
+ Gdk.cairo_set_source_rgba (context, ruler_color);
context.set_line_width (border_width);
context.rectangle (0,
diff --git a/src/simple-scan.vala b/src/simple-scan.vala
index 71f32de9..5deedcfa 100644
--- a/src/simple-scan.vala
+++ b/src/simple-scan.vala
@@ -51,6 +51,7 @@ public class SimpleScan : Gtk.Application
base.startup ();
Hdy.init ();
+ Hdy.StyleManager.get_default ().color_scheme = PREFER_LIGHT;
app = new AppWindow ();
book = app.book;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]