[gnome-flashback] shell: fix level bar in OSD window
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-flashback] shell: fix level bar in OSD window
- Date: Sun, 25 Aug 2019 19:03:31 +0000 (UTC)
commit dc4598291601bdbb3cb7ffab6f3195728ddb0efd
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Sun Aug 25 21:50:23 2019 +0300
shell: fix level bar in OSD window
GNOME Settings Daemon now uses double type for level.
At the same time add support for max_level.
https://gitlab.gnome.org/GNOME/gnome-flashback/issues/22
data/theme/Adwaita/gnome-flashback-dark.css | 5 +++
data/theme/Adwaita/gnome-flashback.css | 5 +++
data/theme/HighContrast/gnome-flashback.css | 5 +++
gnome-flashback/libshell/flashback-osd.c | 10 ++++-
gnome-flashback/libshell/gf-osd-window.c | 61 +++++++++++++++++++++++------
gnome-flashback/libshell/gf-osd-window.h | 24 +++++++-----
6 files changed, 86 insertions(+), 24 deletions(-)
---
diff --git a/data/theme/Adwaita/gnome-flashback-dark.css b/data/theme/Adwaita/gnome-flashback-dark.css
index 0488183..e7e1317 100644
--- a/data/theme/Adwaita/gnome-flashback-dark.css
+++ b/data/theme/Adwaita/gnome-flashback-dark.css
@@ -55,5 +55,10 @@ gf-popup-window.solid {
#gf-osd-window {
}
+#gf-osd-window levelbar block.overdrive {
+ background-color: #e01b24;
+ border-color: #e01b24;
+}
+
#gf-bubble {
}
diff --git a/data/theme/Adwaita/gnome-flashback.css b/data/theme/Adwaita/gnome-flashback.css
index 6eda9ee..da9ee3c 100644
--- a/data/theme/Adwaita/gnome-flashback.css
+++ b/data/theme/Adwaita/gnome-flashback.css
@@ -55,5 +55,10 @@ gf-popup-window.solid {
#gf-osd-window {
}
+#gf-osd-window levelbar block.overdrive {
+ background-color: #e01b24;
+ border-color: #e01b24;
+}
+
#gf-bubble {
}
diff --git a/data/theme/HighContrast/gnome-flashback.css b/data/theme/HighContrast/gnome-flashback.css
index e32fb7b..653848d 100644
--- a/data/theme/HighContrast/gnome-flashback.css
+++ b/data/theme/HighContrast/gnome-flashback.css
@@ -55,5 +55,10 @@ gf-popup-window.solid {
#gf-osd-window {
}
+#gf-osd-window levelbar block.overdrive {
+ background-color: #ef2929;
+ border-color: #ef2929;
+}
+
#gf-bubble {
}
diff --git a/gnome-flashback/libshell/flashback-osd.c b/gnome-flashback/libshell/flashback-osd.c
index 3602261..188a9fa 100644
--- a/gnome-flashback/libshell/flashback-osd.c
+++ b/gnome-flashback/libshell/flashback-osd.c
@@ -122,7 +122,8 @@ flashback_osd_show (FlashbackOsd *osd,
const gchar *icon_name;
const gchar *label;
GIcon *icon;
- gint level;
+ gdouble level;
+ gdouble max_level;
const gchar *connector;
gint monitor;
gint i;
@@ -135,9 +136,12 @@ flashback_osd_show (FlashbackOsd *osd,
if (!g_variant_dict_lookup (&dict, "label", "&s", &label))
label = NULL;
- if (!g_variant_dict_lookup (&dict, "level", "i", &level))
+ if (!g_variant_dict_lookup (&dict, "level", "d", &level))
level = -1;
+ if (!g_variant_dict_lookup (&dict, "max_level", "d", &max_level))
+ max_level = 1.0;
+
if (!g_variant_dict_lookup (&dict, "connector", "&s", &connector))
connector = NULL;
@@ -158,6 +162,7 @@ flashback_osd_show (FlashbackOsd *osd,
gf_osd_window_set_icon (osd->windows[i], icon);
gf_osd_window_set_label (osd->windows[i], label);
gf_osd_window_set_level (osd->windows[i], level);
+ gf_osd_window_set_max_level (osd->windows[i], max_level);
gf_osd_window_show (osd->windows[i]);
}
else
@@ -173,6 +178,7 @@ flashback_osd_show (FlashbackOsd *osd,
gf_osd_window_set_icon (osd->windows[i], icon);
gf_osd_window_set_label (osd->windows[i], label);
gf_osd_window_set_level (osd->windows[i], level);
+ gf_osd_window_set_max_level (osd->windows[i], max_level);
gf_osd_window_show (osd->windows[i]);
}
}
diff --git a/gnome-flashback/libshell/gf-osd-window.c b/gnome-flashback/libshell/gf-osd-window.c
index 842739d..d67909b 100644
--- a/gnome-flashback/libshell/gf-osd-window.c
+++ b/gnome-flashback/libshell/gf-osd-window.c
@@ -30,16 +30,45 @@ struct _GfOsdWindow
guint hide_timeout_id;
+ gdouble max_level;
+ gdouble level;
+
GtkWidget *icon_image;
gint icon_size;
GtkWidget *label;
- GtkWidget *level;
+ GtkWidget *level_bar;
};
G_DEFINE_TYPE (GfOsdWindow, gf_osd_window, GF_TYPE_POPUP_WINDOW)
+static void
+update_level_bar (GfOsdWindow *window)
+{
+ gdouble level;
+ GtkLevelBar *level_bar;
+
+ if (window->level < 0.0)
+ {
+ gtk_widget_hide (window->level_bar);
+ return;
+ }
+
+ level = MAX (0.0, MIN (window->level, window->max_level));
+ level_bar = GTK_LEVEL_BAR (window->level_bar);
+
+ gtk_level_bar_set_max_value (level_bar, window->max_level);
+ gtk_level_bar_set_value (level_bar, level);
+
+ if (window->max_level > 1.0)
+ gtk_level_bar_add_offset_value (level_bar, "overdrive", window->max_level);
+ else
+ gtk_level_bar_remove_offset_value (level_bar, "overdrive");
+
+ gtk_widget_show (window->level_bar);
+}
+
static void
fade_finished_cb (GfPopupWindow *window)
{
@@ -128,6 +157,9 @@ gf_osd_window_init (GfOsdWindow *window)
gtk_container_add (GTK_CONTAINER (window), box);
gtk_widget_show (box);
+ window->max_level = 1.0;
+ window->level = -1;
+
window->icon_image = gtk_image_new ();
gtk_widget_set_halign (window->icon_image, GTK_ALIGN_CENTER);
gtk_widget_set_valign (window->icon_image, GTK_ALIGN_CENTER);
@@ -137,9 +169,9 @@ gf_osd_window_init (GfOsdWindow *window)
gtk_widget_set_halign (window->label, GTK_ALIGN_CENTER);
gtk_box_pack_start (GTK_BOX (box), window->label, FALSE, FALSE, 0);
- window->level = gtk_level_bar_new_for_interval (0, 100);
- gtk_widget_set_halign (window->level, GTK_ALIGN_FILL);
- gtk_box_pack_start (GTK_BOX (box), window->level, FALSE, FALSE, 0);
+ window->level_bar = gtk_level_bar_new_for_interval (0.0, window->max_level);
+ gtk_box_pack_start (GTK_BOX (box), window->level_bar, FALSE, FALSE, 0);
+ gtk_widget_set_halign (window->level_bar, GTK_ALIGN_FILL);
g_signal_connect (window, "fade-finished",
G_CALLBACK (fade_finished_cb), NULL);
@@ -209,17 +241,20 @@ gf_osd_window_set_label (GfOsdWindow *window,
void
gf_osd_window_set_level (GfOsdWindow *window,
- gint level)
+ gdouble level)
{
- if (level == -1)
- {
- gtk_widget_hide (window->level);
- return;
- }
+ window->level = level;
+
+ update_level_bar (window);
+}
+
+void
+gf_osd_window_set_max_level (GfOsdWindow *window,
+ gdouble max_level)
+{
+ window->max_level = max_level;
- level = MAX (0, MIN (level, 100));
- gtk_level_bar_set_value (GTK_LEVEL_BAR (window->level), level);
- gtk_widget_show (window->level);
+ update_level_bar (window);
}
void
diff --git a/gnome-flashback/libshell/gf-osd-window.h b/gnome-flashback/libshell/gf-osd-window.h
index 1443d74..5410d9b 100644
--- a/gnome-flashback/libshell/gf-osd-window.h
+++ b/gnome-flashback/libshell/gf-osd-window.h
@@ -26,17 +26,23 @@ G_BEGIN_DECLS
G_DECLARE_FINAL_TYPE (GfOsdWindow, gf_osd_window,
GF, OSD_WINDOW, GfPopupWindow)
-GfOsdWindow *gf_osd_window_new (gint monitor);
+GfOsdWindow *gf_osd_window_new (gint monitor);
-void gf_osd_window_set_icon (GfOsdWindow *window,
- GIcon *icon);
-void gf_osd_window_set_label (GfOsdWindow *window,
- const gchar *label);
-void gf_osd_window_set_level (GfOsdWindow *window,
- gint level);
+void gf_osd_window_set_icon (GfOsdWindow *window,
+ GIcon *icon);
-void gf_osd_window_show (GfOsdWindow *window);
-void gf_osd_window_hide (GfOsdWindow *window);
+void gf_osd_window_set_label (GfOsdWindow *window,
+ const gchar *label);
+
+void gf_osd_window_set_level (GfOsdWindow *window,
+ gdouble level);
+
+void gf_osd_window_set_max_level (GfOsdWindow *window,
+ gdouble max_level);
+
+void gf_osd_window_show (GfOsdWindow *window);
+
+void gf_osd_window_hide (GfOsdWindow *window);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]