From 3dff82bd5a24664d4121e81150631e35fb14f059 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Mon, 7 May 2012 16:30:01 -0700 Subject: remove gtk2 support --- src/user-widget.c | 4 ---- 1 file changed, 4 deletions(-) (limited to 'src/user-widget.c') diff --git a/src/user-widget.c b/src/user-widget.c index 33b9e40..e99bd50 100644 --- a/src/user-widget.c +++ b/src/user-widget.c @@ -137,11 +137,7 @@ user_widget_init (UserWidget *self) priv->user_name = gtk_label_new (""); -#if HAVE_GTK3 priv->container = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); -#else - priv->container = gtk_hbox_new (FALSE, 0); -#endif priv->tick_icon = gtk_image_new_from_icon_name ("account-logged-in", GTK_ICON_SIZE_MENU); -- cgit v1.2.3 From d625fd824b9dea8138180e1a68563a6bd5014adb Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Sat, 2 Jun 2012 18:10:50 -0500 Subject: In user-widget.c, remove the GTK2-specific code. --- src/user-widget.c | 88 ------------------------------------------------------- 1 file changed, 88 deletions(-) (limited to 'src/user-widget.c') diff --git a/src/user-widget.c b/src/user-widget.c index e99bd50..8ba25ca 100644 --- a/src/user-widget.c +++ b/src/user-widget.c @@ -78,7 +78,6 @@ static void _color_shade (const CairoColorRGB *a, static void draw_album_border (GtkWidget *widget, gboolean selected); -#if GTK_CHECK_VERSION(3, 0, 0) static gboolean user_widget_primitive_draw_cb_gtk_3 (GtkWidget *image, cairo_t* cr, gpointer user_data); @@ -86,16 +85,6 @@ static gboolean user_widget_draw_usericon_gtk_3 (GtkWidget *widget, cairo_t* cr, gpointer user_data); -#else -static gboolean user_widget_primitive_draw_cb (GtkWidget *image, - GdkEventExpose *event, - gpointer user_data); -static gboolean user_widget_draw_usericon_gtk_2 (GtkWidget *widget, - GdkEventExpose *event, - gpointer user_data); - -#endif - G_DEFINE_TYPE (UserWidget, user_widget, GTK_TYPE_MENU_ITEM); static void @@ -167,7 +156,6 @@ user_widget_init (UserWidget *self) // Fetch the drawing context. - #if GTK_CHECK_VERSION(3, 0, 0) g_signal_connect_after (GTK_WIDGET(self), "draw", G_CALLBACK(user_widget_primitive_draw_cb_gtk_3), GTK_WIDGET(self)); @@ -175,15 +163,6 @@ user_widget_init (UserWidget *self) g_signal_connect_after (GTK_WIDGET(priv->user_image), "draw", G_CALLBACK(user_widget_draw_usericon_gtk_3), GTK_WIDGET(self)); - - #else - g_signal_connect_after (GTK_WIDGET(self), "expose-event", - G_CALLBACK(user_widget_primitive_draw_cb), - GTK_WIDGET(self)); - g_signal_connect_after (GTK_WIDGET(priv->user_image), "expose-event", - G_CALLBACK(user_widget_draw_usericon_gtk_2), - GTK_WIDGET(self)); - #endif } static void @@ -202,8 +181,6 @@ user_widget_finalize (GObject *object) /*****************************************************************/ -#if GTK_CHECK_VERSION(3, 0, 0) - // TODO handle drawing of green check mark static gboolean user_widget_primitive_draw_cb_gtk_3 (GtkWidget *widget, @@ -255,79 +232,14 @@ user_widget_draw_usericon_gtk_3 (GtkWidget *widget, draw_album_border (widget, FALSE); return FALSE; } -/** - * TODO: - * Sort out gtk2 - */ -// GTK 2 Expose handler -#else - -static gboolean -user_widget_draw_usericon_gtk_2 (GtkWidget *widget, - GdkEventExpose *event, - gpointer user_data) -{ - g_return_val_if_fail(IS_USER_WIDGET(user_data), FALSE); - UserWidget* meta = USER_WIDGET(user_data); - UserWidgetPrivate * priv = USER_WIDGET_GET_PRIVATE(meta); - - if (priv->using_personal_icon == FALSE) - return FALSE; - - draw_album_border (widget, FALSE); - return FALSE; -} - -static gboolean -user_widget_primitive_draw_cb (GtkWidget *widget, - GdkEventExpose *event, - gpointer user_data) -{ - g_return_val_if_fail(IS_USER_WIDGET(user_data), FALSE); - UserWidget* meta = USER_WIDGET(user_data); - UserWidgetPrivate * priv = USER_WIDGET_GET_PRIVATE(meta); - - // Draw dot only when user is the current user. - if (!dbusmenu_menuitem_property_get_bool (priv->twin_item, - USER_ITEM_PROP_IS_CURRENT_USER)){ - return FALSE; - } - - GtkStyle *style; - cairo_t *cr; - cr = (cairo_t*) gdk_cairo_create (gtk_widget_get_window (widget)); - - gdouble x, y; - style = gtk_widget_get_style (widget); - - GtkAllocation allocation; - - gtk_widget_get_allocation (widget, &allocation); - x = allocation.x + 13; - y = allocation.y + allocation.height/2; - - cairo_arc (cr, x, y, 3.0, 0.0, 2 * G_PI);; - - cairo_set_source_rgb (cr, style->fg[gtk_widget_get_state(widget)].red/65535.0, - style->fg[gtk_widget_get_state(widget)].green/65535.0, - style->fg[gtk_widget_get_state(widget)].blue/65535.0); - cairo_fill (cr); - cairo_destroy (cr); - - return FALSE; -} -#endif - static void draw_album_border(GtkWidget *widg, gboolean selected) { cairo_t *cr; cr = gdk_cairo_create (gtk_widget_get_window (widg)); - #if GTK_CHECK_VERSION(3, 0, 0) gtk_style_context_add_class (gtk_widget_get_style_context (widg), "menu"); - #endif GtkStyle *style; style = gtk_widget_get_style (widg); -- cgit v1.2.3 From f7f945beb6353195c84d5d897a20fcc26d243058 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 12 Jun 2012 00:07:34 -0500 Subject: properly respond to changes in the menuitem's USER_ITEM_PROP_LOGGED_IN property --- src/user-widget.c | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) (limited to 'src/user-widget.c') diff --git a/src/user-widget.c b/src/user-widget.c index 8ba25ca..f886660 100644 --- a/src/user-widget.c +++ b/src/user-widget.c @@ -65,12 +65,6 @@ static void user_widget_set_twin_item (UserWidget* self, // keyevent consumers static gboolean user_widget_button_release_event (GtkWidget *menuitem, GdkEventButton *event); -// Dbusmenuitem properties update callback -static void user_widget_property_update (DbusmenuMenuitem* item, - gchar* property, - GVariant* value, - gpointer userdata); - static void _color_shade (const CairoColorRGB *a, float k, @@ -484,7 +478,7 @@ _color_hls_to_rgb (gdouble *h, } } -void +static void _color_shade (const CairoColorRGB *a, float k, CairoColorRGB *b) { double red; @@ -535,20 +529,25 @@ user_widget_button_release_event (GtkWidget *menuitem, return FALSE; } - -/** - * TODO, be sensitive to UI updates - * */ static void -user_widget_property_update (DbusmenuMenuitem* item, gchar* property, - GVariant* value, gpointer userdata) +user_widget_property_update (DbusmenuMenuitem * item, + const gchar * property, + GVariant * value, + UserWidget * self) { - g_return_if_fail (IS_USER_WIDGET (userdata)); - //gtk_widget_queue_redraw (GTK_WIDGET(userdata)); -} - + g_return_if_fail (IS_USER_WIDGET (self)); + UserWidgetPrivate* priv = USER_WIDGET_GET_PRIVATE(self); + if (!g_strcmp0 (property, USER_ITEM_PROP_LOGGED_IN)) + { + gtk_widget_set_visible (priv->tick_icon, g_variant_get_boolean(value)); + } + else + { + g_debug ("%s FIXME: unhandled property change %s", G_STRFUNC, property); + } +} static void user_widget_set_twin_item (UserWidget* self, -- cgit v1.2.3 From 961c326fd07a11818c10cc827cd79caa83d2402c Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Wed, 13 Jun 2012 14:32:17 -0500 Subject: Have the user widget respond to changes in the LOGGED_IN and ICON properties --- src/user-widget.c | 161 ++++++++++++++++++++++++++++++------------------------ src/user-widget.h | 15 +++-- 2 files changed, 100 insertions(+), 76 deletions(-) (limited to 'src/user-widget.c') diff --git a/src/user-widget.c b/src/user-widget.c index f886660..9fac172 100644 --- a/src/user-widget.c +++ b/src/user-widget.c @@ -98,7 +98,9 @@ user_widget_class_init (UserWidgetClass *klass) static void user_widget_init (UserWidget *self) { - UserWidgetPrivate * priv = USER_WIDGET_GET_PRIVATE(self); + self->priv = USER_WIDGET_GET_PRIVATE(self); + + UserWidgetPrivate * priv = self->priv; gint padding = 0; gtk_widget_style_get (GTK_WIDGET(self), @@ -220,10 +222,11 @@ user_widget_draw_usericon_gtk_3 (GtkWidget *widget, UserWidget* meta = USER_WIDGET(user_data); UserWidgetPrivate * priv = USER_WIDGET_GET_PRIVATE(meta); - if (priv->using_personal_icon == FALSE) - return FALSE; + if (priv->using_personal_icon) + { + draw_album_border (widget, FALSE); + } - draw_album_border (widget, FALSE); return FALSE; } @@ -529,19 +532,91 @@ user_widget_button_release_event (GtkWidget *menuitem, return FALSE; } +/*** +**** +***/ + +static void +update_icon (UserWidget * self, DbusmenuMenuitem * mi) +{ + GdkPixbuf * pixbuf = NULL; + + /* first, try the menuitem's icon property */ + const gchar * icon_name = dbusmenu_menuitem_property_get (mi, USER_ITEM_PROP_ICON); + if (icon_name) + { + GError* error = NULL; + pixbuf = gdk_pixbuf_new_from_file_at_size (icon_name, 32, 32, &error); + if (error != NULL) + { + g_warning ("Couldn't load the image \"%s\": %s", icon_name, error->message); + g_clear_error (&error); + } + } + + /* as a fallback, try to use the default user icon */ + if (pixbuf != NULL) + { + self->priv->using_personal_icon = TRUE; + } + else + { + self->priv->using_personal_icon = FALSE; + + pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (), + USER_ITEM_ICON_DEFAULT, + 32, + GTK_ICON_LOOKUP_FORCE_SIZE, + NULL); + } + + if (pixbuf != NULL) + { + gtk_image_set_from_pixbuf (GTK_IMAGE(self->priv->user_image), pixbuf); + g_object_unref (pixbuf); + } +} + +static void +update_logged_in (UserWidget * self, DbusmenuMenuitem * mi) +{ + const gboolean b = dbusmenu_menuitem_property_get_bool (mi, USER_ITEM_PROP_LOGGED_IN); + + g_debug ("User \"%s\" %s active sessions", + dbusmenu_menuitem_property_get (mi, USER_ITEM_PROP_NAME), + b ? "has" : "doesn't have"); + + gtk_widget_set_visible (self->priv->tick_icon, b); +} + +static void +update_name (UserWidget * self, DbusmenuMenuitem * mi) +{ + gtk_label_set_label (GTK_LABEL(self->priv->user_name), + dbusmenu_menuitem_property_get (mi, USER_ITEM_PROP_NAME)); +} + static void -user_widget_property_update (DbusmenuMenuitem * item, +user_widget_property_update (DbusmenuMenuitem * mi, const gchar * property, GVariant * value, UserWidget * self) { g_return_if_fail (IS_USER_WIDGET (self)); - UserWidgetPrivate* priv = USER_WIDGET_GET_PRIVATE(self); +g_message ("user_widget_property_update: %s", property); if (!g_strcmp0 (property, USER_ITEM_PROP_LOGGED_IN)) { - gtk_widget_set_visible (priv->tick_icon, g_variant_get_boolean(value)); + update_logged_in (self, mi); + } + else if (!g_strcmp0 (property, USER_ITEM_PROP_ICON)) + { + update_icon (self, mi); + } + else if (!g_strcmp0 (property, USER_ITEM_PROP_NAME)) + { + update_name (self, mi); } else { @@ -550,72 +625,16 @@ user_widget_property_update (DbusmenuMenuitem * item, } static void -user_widget_set_twin_item (UserWidget* self, - DbusmenuMenuitem* twin_item) +user_widget_set_twin_item (UserWidget * self, DbusmenuMenuitem * mi) { - UserWidgetPrivate* priv = USER_WIDGET_GET_PRIVATE(self); - priv->twin_item = twin_item; - g_signal_connect( G_OBJECT(priv->twin_item), "property-changed", + self->priv->twin_item = mi; + + update_icon (self, mi); + update_name (self, mi); + update_logged_in (self, mi); + + g_signal_connect (G_OBJECT(mi), "property-changed", G_CALLBACK(user_widget_property_update), self); - - const gchar * icon_name = dbusmenu_menuitem_property_get (twin_item, - USER_ITEM_PROP_ICON); - gtk_label_set_label (GTK_LABEL (priv->user_name), - dbusmenu_menuitem_property_get (twin_item, USER_ITEM_PROP_NAME)); - - if (dbusmenu_menuitem_property_get_bool (twin_item, USER_ITEM_PROP_LOGGED_IN)) { - g_debug ("%s USER HAS ACTIVE SESSIONS", - dbusmenu_menuitem_property_get (twin_item, USER_ITEM_PROP_NAME)); - gtk_widget_show(priv->tick_icon); - } - else { - g_debug ("%s USER DOESN'T HAVE ACTIVE SESSIONS", - dbusmenu_menuitem_property_get (twin_item, USER_ITEM_PROP_NAME)); - gtk_widget_hide(priv->tick_icon); - } - - GdkPixbuf* pixbuf = NULL; - GError* error = NULL; - pixbuf = gdk_pixbuf_new_from_file_at_size(icon_name, 32, 32, NULL); - - if (pixbuf == NULL || error != NULL) { - g_warning ("Could not load the user image (%s) for some reason", - icon_name); - if (pixbuf != NULL){ - g_object_unref (pixbuf); - pixbuf = NULL; - } - if (error != NULL){ - g_error_free (error); - error = NULL; - } - - priv->using_personal_icon = FALSE; - - pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (), - USER_ITEM_ICON_DEFAULT, - 32, - GTK_ICON_LOOKUP_FORCE_SIZE, - &error); - } - else{ - priv->using_personal_icon = TRUE; - } - - if (pixbuf == NULL || error != NULL) { - g_warning ("Could not load the user image"); - if (error != NULL){ - g_error_free (error); - error = NULL; - } - } - else{ - gtk_image_set_from_pixbuf (GTK_IMAGE(priv->user_image), pixbuf); - } - if (pixbuf != NULL){ - g_object_unref (pixbuf); - pixbuf = NULL; - } } /** diff --git a/src/user-widget.h b/src/user-widget.h index 52a5e34..0953e6c 100644 --- a/src/user-widget.h +++ b/src/user-widget.h @@ -31,18 +31,23 @@ G_BEGIN_DECLS #define IS_USER_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), USER_WIDGET_TYPE)) #define USER_WIDGET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), USER_WIDGET_TYPE, UserWidgetClass)) -typedef struct _UserWidget UserWidget; -typedef struct _UserWidgetClass UserWidgetClass; +typedef struct _UserWidget UserWidget; +typedef struct _UserWidgetClass UserWidgetClass; +typedef struct _UserWidgetPrivate UserWidgetPrivate; -struct _UserWidgetClass { +struct _UserWidgetClass +{ GtkMenuItemClass parent_class; }; -struct _UserWidget { +struct _UserWidget +{ + /*< private >*/ GtkMenuItem parent; + UserWidgetPrivate * priv; }; -GType user_widget_get_type (void); +GType user_widget_get_type (void) G_GNUC_CONST; GtkWidget* user_widget_new(DbusmenuMenuitem *twin_item); G_END_DECLS -- cgit v1.2.3 From ba66f20cf47b078e65ec81cccdcaa39533823274 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Wed, 13 Jun 2012 18:27:51 -0500 Subject: in user-widget.c, remove unused function user_widget_button_release_event() --- src/user-widget.c | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) (limited to 'src/user-widget.c') diff --git a/src/user-widget.c b/src/user-widget.c index 9fac172..5d06a75 100644 --- a/src/user-widget.c +++ b/src/user-widget.c @@ -62,9 +62,6 @@ static void user_widget_finalize (GObject *object); static void user_widget_set_twin_item (UserWidget* self, DbusmenuMenuitem* twin_item); -// keyevent consumers -static gboolean user_widget_button_release_event (GtkWidget *menuitem, - GdkEventButton *event); static void _color_shade (const CairoColorRGB *a, float k, @@ -84,11 +81,8 @@ G_DEFINE_TYPE (UserWidget, user_widget, GTK_TYPE_MENU_ITEM); static void user_widget_class_init (UserWidgetClass *klass) { - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + GObjectClass * gobject_class = G_OBJECT_CLASS (klass); - widget_class->button_release_event = user_widget_button_release_event; - g_type_class_add_private (klass, sizeof (UserWidgetPrivate)); gobject_class->dispose = user_widget_dispose; @@ -521,17 +515,6 @@ _color_shade (const CairoColorRGB *a, float k, CairoColorRGB *b) b->b = blue; } - -/*****************************************************************/ - -/* Suppress/consume keyevents */ -static gboolean -user_widget_button_release_event (GtkWidget *menuitem, - GdkEventButton *event) -{ - return FALSE; -} - /*** **** ***/ -- cgit v1.2.3 From 9ecf166300d36c8446cb124aacb499712226606b Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Wed, 13 Jun 2012 18:28:33 -0500 Subject: in user_widget_init(), remove unused variable 'padding' --- src/user-widget.c | 6 ------ 1 file changed, 6 deletions(-) (limited to 'src/user-widget.c') diff --git a/src/user-widget.c b/src/user-widget.c index 5d06a75..65dac4c 100644 --- a/src/user-widget.c +++ b/src/user-widget.c @@ -96,12 +96,6 @@ user_widget_init (UserWidget *self) UserWidgetPrivate * priv = self->priv; - gint padding = 0; - gtk_widget_style_get (GTK_WIDGET(self), - "horizontal-padding", - &padding, - NULL); - priv->user_image = NULL; priv->user_name = NULL; priv->logged_in = FALSE; -- cgit v1.2.3 From 9e64d9ac0e796355361f9547da58398d2521fec2 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Thu, 14 Jun 2012 11:49:12 -0500 Subject: in user_widget_property_update(), remove a g_message() that shouldn't've been committed --- src/user-widget.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'src/user-widget.c') diff --git a/src/user-widget.c b/src/user-widget.c index 65dac4c..62a7911 100644 --- a/src/user-widget.c +++ b/src/user-widget.c @@ -581,8 +581,6 @@ user_widget_property_update (DbusmenuMenuitem * mi, { g_return_if_fail (IS_USER_WIDGET (self)); -g_message ("user_widget_property_update: %s", property); - if (!g_strcmp0 (property, USER_ITEM_PROP_LOGGED_IN)) { update_logged_in (self, mi); -- cgit v1.2.3 From 0e41b34b88a06bf0ff9e02df6052b5dff846d22b Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Thu, 14 Jun 2012 20:17:43 -0500 Subject: right-align the 'currently logged in' checkmark as per mpt's 12.10 spec --- src/user-widget.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'src/user-widget.c') diff --git a/src/user-widget.c b/src/user-widget.c index 62a7911..3804f61 100644 --- a/src/user-widget.c +++ b/src/user-widget.c @@ -105,16 +105,16 @@ user_widget_init (UserWidget *self) // Create the UI elements. priv->user_image = gtk_image_new (); - gtk_misc_set_alignment(GTK_MISC(priv->user_image), 0.0, 0.0); + gtk_misc_set_alignment(GTK_MISC(priv->user_image), 0.0, 0.0); gtk_misc_set_padding (GTK_MISC(priv->user_image),0, 4.0); priv->user_name = gtk_label_new (""); priv->container = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); - priv->tick_icon = gtk_image_new_from_icon_name ("account-logged-in", + priv->tick_icon = gtk_image_new_from_icon_name ("account-logged-in", GTK_ICON_SIZE_MENU); - gtk_misc_set_alignment(GTK_MISC(priv->tick_icon), 1.0, 0.5); + gtk_misc_set_alignment(GTK_MISC(priv->tick_icon), 1.0, 0.5); // Pack it together gtk_box_pack_start (GTK_BOX (priv->container), @@ -127,10 +127,10 @@ user_widget_init (UserWidget *self) FALSE, FALSE, 3); - gtk_box_pack_start (GTK_BOX(priv->container), - priv->tick_icon, - FALSE, - FALSE, 5); + gtk_box_pack_end (GTK_BOX(priv->container), + priv->tick_icon, + FALSE, + FALSE, 5); gtk_widget_show_all (priv->container); gtk_container_add (GTK_CONTAINER (self), priv->container); @@ -171,7 +171,6 @@ user_widget_primitive_draw_cb_gtk_3 (GtkWidget *widget, cairo_t* cr, gpointer user_data) { - g_return_val_if_fail(IS_USER_WIDGET(user_data), FALSE); UserWidget* meta = USER_WIDGET(user_data); UserWidgetPrivate * priv = USER_WIDGET_GET_PRIVATE(meta); -- cgit v1.2.3 From a8bf2f6f5c84909c70a890712bc8b27683a457d7 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Mon, 18 Jun 2012 12:18:25 -0500 Subject: copyediting: remove a lot of trailing spaces --- src/user-widget.c | 127 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 65 insertions(+), 62 deletions(-) (limited to 'src/user-widget.c') diff --git a/src/user-widget.c b/src/user-widget.c index 3804f61..a4095c1 100644 --- a/src/user-widget.c +++ b/src/user-widget.c @@ -4,17 +4,18 @@ Copyright 2011 Canonical Ltd. Authors: Conor Curran Mirco Müller - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License version 3, as published + Charles Kerr + +This program is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License version 3, as published by the Free Software Foundation. -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranties of -MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranties of +MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along +You should have received a copy of the GNU General Public License along with this program. If not, see . */ @@ -24,11 +25,13 @@ with this program. If not, see . #include #include -#include + #include + #include + +#include "shared-names.h" #include "user-widget.h" -#include "dbus-shared-names.h" typedef struct _UserWidgetPrivate UserWidgetPrivate; @@ -65,17 +68,17 @@ static void user_widget_set_twin_item (UserWidget* self, static void _color_shade (const CairoColorRGB *a, float k, - CairoColorRGB *b); + CairoColorRGB *b); static void draw_album_border (GtkWidget *widget, gboolean selected); - + static gboolean user_widget_primitive_draw_cb_gtk_3 (GtkWidget *image, cairo_t* cr, gpointer user_data); static gboolean user_widget_draw_usericon_gtk_3 (GtkWidget *widget, cairo_t* cr, gpointer user_data); - + G_DEFINE_TYPE (UserWidget, user_widget, GTK_TYPE_MENU_ITEM); static void @@ -95,19 +98,19 @@ user_widget_init (UserWidget *self) self->priv = USER_WIDGET_GET_PRIVATE(self); UserWidgetPrivate * priv = self->priv; - + priv->user_image = NULL; priv->user_name = NULL; priv->logged_in = FALSE; priv->sessions_active = FALSE; priv->container = NULL; priv->tick_icon = NULL; - - // Create the UI elements. + + // Create the UI elements. priv->user_image = gtk_image_new (); gtk_misc_set_alignment(GTK_MISC(priv->user_image), 0.0, 0.0); gtk_misc_set_padding (GTK_MISC(priv->user_image),0, 4.0); - + priv->user_name = gtk_label_new (""); priv->container = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); @@ -115,36 +118,36 @@ user_widget_init (UserWidget *self) priv->tick_icon = gtk_image_new_from_icon_name ("account-logged-in", GTK_ICON_SIZE_MENU); gtk_misc_set_alignment(GTK_MISC(priv->tick_icon), 1.0, 0.5); - + // Pack it together gtk_box_pack_start (GTK_BOX (priv->container), priv->user_image, FALSE, FALSE, - 0); + 0); gtk_box_pack_start (GTK_BOX (priv->container), priv->user_name, FALSE, FALSE, - 3); + 3); gtk_box_pack_end (GTK_BOX(priv->container), priv->tick_icon, FALSE, FALSE, 5); - - gtk_widget_show_all (priv->container); - gtk_container_add (GTK_CONTAINER (self), priv->container); + + gtk_widget_show_all (priv->container); + gtk_container_add (GTK_CONTAINER (self), priv->container); gtk_widget_show_all (priv->tick_icon); gtk_widget_set_no_show_all (priv->tick_icon, TRUE); gtk_widget_hide (priv->tick_icon); - - + + // Fetch the drawing context. - g_signal_connect_after (GTK_WIDGET(self), "draw", + g_signal_connect_after (GTK_WIDGET(self), "draw", G_CALLBACK(user_widget_primitive_draw_cb_gtk_3), GTK_WIDGET(self)); - g_signal_connect_after (GTK_WIDGET(priv->user_image), "draw", + g_signal_connect_after (GTK_WIDGET(priv->user_image), "draw", G_CALLBACK(user_widget_draw_usericon_gtk_3), GTK_WIDGET(self)); } @@ -173,31 +176,31 @@ user_widget_primitive_draw_cb_gtk_3 (GtkWidget *widget, { g_return_val_if_fail(IS_USER_WIDGET(user_data), FALSE); UserWidget* meta = USER_WIDGET(user_data); - UserWidgetPrivate * priv = USER_WIDGET_GET_PRIVATE(meta); + UserWidgetPrivate * priv = USER_WIDGET_GET_PRIVATE(meta); // Draw dot only when user is the current user. if (!dbusmenu_menuitem_property_get_bool (priv->twin_item, USER_ITEM_PROP_IS_CURRENT_USER)){ - return FALSE; + return FALSE; } - + GtkStyle *style; - gdouble x, y; + gdouble x, y; style = gtk_widget_get_style (widget); - + GtkAllocation allocation; gtk_widget_get_allocation (widget, &allocation); - x = allocation.x + 13; + x = allocation.x + 13; y = allocation.height / 2; - - cairo_arc (cr, x, y, 3.0, 0.0, 2 * G_PI);; - + + cairo_arc (cr, x, y, 3.0, 0.0, 2 * G_PI); + cairo_set_source_rgb (cr, style->fg[gtk_widget_get_state(widget)].red/65535.0, style->fg[gtk_widget_get_state(widget)].green/65535.0, style->fg[gtk_widget_get_state(widget)].blue/65535.0); - cairo_fill (cr); + cairo_fill (cr); - return FALSE; + return FALSE; } static gboolean @@ -207,32 +210,32 @@ user_widget_draw_usericon_gtk_3 (GtkWidget *widget, { g_return_val_if_fail(IS_USER_WIDGET(user_data), FALSE); UserWidget* meta = USER_WIDGET(user_data); - UserWidgetPrivate * priv = USER_WIDGET_GET_PRIVATE(meta); + UserWidgetPrivate * priv = USER_WIDGET_GET_PRIVATE(meta); if (priv->using_personal_icon) { - draw_album_border (widget, FALSE); + draw_album_border (widget, FALSE); } - + return FALSE; } static void draw_album_border(GtkWidget *widg, gboolean selected) { - cairo_t *cr; + cairo_t *cr; cr = gdk_cairo_create (gtk_widget_get_window (widg)); gtk_style_context_add_class (gtk_widget_get_style_context (widg), "menu"); - + GtkStyle *style; style = gtk_widget_get_style (widg); - + GtkAllocation alloc; gtk_widget_get_allocation (widg, &alloc); gint offset = 0; gint v_offset = 4; - + alloc.width = alloc.width + (offset * 2); alloc.height = alloc.height - v_offset - 2; alloc.x = alloc.x - offset; @@ -245,7 +248,7 @@ draw_album_border(GtkWidget *widg, gboolean selected) bg_normal.b = style->bg[0].blue/65535.0; gint state = selected ? 5 : 0; - + fg_normal.r = style->fg[state].red/65535.0; fg_normal.g = style->fg[state].green/65535.0; fg_normal.b = style->fg[state].blue/65535.0; @@ -253,17 +256,17 @@ draw_album_border(GtkWidget *widg, gboolean selected) CairoColorRGB dark_top_color; CairoColorRGB light_bottom_color; CairoColorRGB background_color; - + _color_shade ( &bg_normal, 0.93, &background_color ); _color_shade ( &bg_normal, 0.23, &dark_top_color ); _color_shade ( &fg_normal, 0.55, &light_bottom_color ); - + cairo_rectangle (cr, alloc.x, alloc.y, alloc.width, alloc.height); cairo_set_line_width (cr, 1.0); - + cairo_clip ( cr ); cairo_move_to (cr, alloc.x, alloc.y ); @@ -280,9 +283,9 @@ draw_album_border(GtkWidget *widg, gboolean selected) background_color.g, background_color.b, 1.0 ); - + cairo_stroke ( cr ); - + cairo_move_to (cr, alloc.x, alloc.y ); cairo_line_to (cr, alloc.x + alloc.width, alloc.y ); @@ -293,9 +296,9 @@ draw_album_border(GtkWidget *widg, gboolean selected) dark_top_color.g, dark_top_color.b, 1.0 ); - + cairo_stroke ( cr ); - + cairo_move_to ( cr, alloc.x + alloc.width, alloc.y + alloc.height ); cairo_line_to ( cr, alloc.x, alloc.y + alloc.height ); @@ -306,9 +309,9 @@ draw_album_border(GtkWidget *widg, gboolean selected) light_bottom_color.g, light_bottom_color.b, 1.0); - + cairo_stroke ( cr ); - cairo_destroy (cr); + cairo_destroy (cr); } static void @@ -368,7 +371,7 @@ _color_rgb_to_hls (gdouble *r, s = (max-min)/(2-max-min); delta = (max -min) != 0 ? (max -min) : 1; - + if(delta == 0) delta = 1; if (red == max) @@ -390,7 +393,7 @@ _color_rgb_to_hls (gdouble *r, static void _color_hls_to_rgb (gdouble *h, - gdouble *l, + gdouble *l, gdouble *s) { gdouble hue; @@ -572,13 +575,13 @@ update_name (UserWidget * self, DbusmenuMenuitem * mi) dbusmenu_menuitem_property_get (mi, USER_ITEM_PROP_NAME)); } -static void +static void user_widget_property_update (DbusmenuMenuitem * mi, - const gchar * property, + const gchar * property, GVariant * value, UserWidget * self) { - g_return_if_fail (IS_USER_WIDGET (self)); + g_return_if_fail (IS_USER_WIDGET (self)); if (!g_strcmp0 (property, USER_ITEM_PROP_LOGGED_IN)) { @@ -607,7 +610,7 @@ user_widget_set_twin_item (UserWidget * self, DbusmenuMenuitem * mi) update_name (self, mi); update_logged_in (self, mi); - g_signal_connect (G_OBJECT(mi), "property-changed", + g_signal_connect (G_OBJECT(mi), "property-changed", G_CALLBACK(user_widget_property_update), self); } @@ -615,10 +618,10 @@ user_widget_set_twin_item (UserWidget * self, DbusmenuMenuitem * mi) * transport_new: * @returns: a new #UserWidget. **/ -GtkWidget* +GtkWidget* user_widget_new(DbusmenuMenuitem *item) { GtkWidget* widget = g_object_new(USER_WIDGET_TYPE, NULL); user_widget_set_twin_item ( USER_WIDGET(widget), item ); - return widget; + return widget; } -- cgit v1.2.3 From d1de164d33646a28599eab72cdbd857c823f2958 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Thu, 5 Jul 2012 09:45:27 -0500 Subject: reduce the user icon size from 32 to 24 pixels as per mpt's request. --- src/user-widget.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/user-widget.c') diff --git a/src/user-widget.c b/src/user-widget.c index a4095c1..8f7fbfc 100644 --- a/src/user-widget.c +++ b/src/user-widget.c @@ -515,6 +515,8 @@ _color_shade (const CairoColorRGB *a, float k, CairoColorRGB *b) **** ***/ +static const int ICON_SIZE = 24; + static void update_icon (UserWidget * self, DbusmenuMenuitem * mi) { @@ -525,7 +527,7 @@ update_icon (UserWidget * self, DbusmenuMenuitem * mi) if (icon_name) { GError* error = NULL; - pixbuf = gdk_pixbuf_new_from_file_at_size (icon_name, 32, 32, &error); + pixbuf = gdk_pixbuf_new_from_file_at_size (icon_name, ICON_SIZE, ICON_SIZE, &error); if (error != NULL) { g_warning ("Couldn't load the image \"%s\": %s", icon_name, error->message); @@ -544,7 +546,7 @@ update_icon (UserWidget * self, DbusmenuMenuitem * mi) pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (), USER_ITEM_ICON_DEFAULT, - 32, + ICON_SIZE, GTK_ICON_LOOKUP_FORCE_SIZE, NULL); } -- cgit v1.2.3 From d13ab8042569c4610e0af5f30f4a646a260a1867 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Thu, 5 Jul 2012 10:40:24 -0500 Subject: Remove the etched border effect for user icons. They looked good before, but look cluttered with the new reduced icon size, and lessening clutter was the reason for shrinking the icons in the first place. --- src/user-widget.c | 361 +++--------------------------------------------------- 1 file changed, 15 insertions(+), 346 deletions(-) (limited to 'src/user-widget.c') diff --git a/src/user-widget.c b/src/user-widget.c index 8f7fbfc..9ebaecf 100644 --- a/src/user-widget.c +++ b/src/user-widget.c @@ -40,7 +40,6 @@ struct _UserWidgetPrivate { DbusmenuMenuitem* twin_item; GtkWidget* user_image; - gboolean using_personal_icon; GtkWidget* user_name; GtkWidget* container; GtkWidget* tick_icon; @@ -66,18 +65,9 @@ static void user_widget_finalize (GObject *object); static void user_widget_set_twin_item (UserWidget* self, DbusmenuMenuitem* twin_item); -static void _color_shade (const CairoColorRGB *a, - float k, - CairoColorRGB *b); - -static void draw_album_border (GtkWidget *widget, gboolean selected); - static gboolean user_widget_primitive_draw_cb_gtk_3 (GtkWidget *image, cairo_t* cr, gpointer user_data); -static gboolean user_widget_draw_usericon_gtk_3 (GtkWidget *widget, - cairo_t* cr, - gpointer user_data); G_DEFINE_TYPE (UserWidget, user_widget, GTK_TYPE_MENU_ITEM); @@ -113,7 +103,7 @@ user_widget_init (UserWidget *self) priv->user_name = gtk_label_new (""); - priv->container = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + priv->container = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4); priv->tick_icon = gtk_image_new_from_icon_name ("account-logged-in", GTK_ICON_SIZE_MENU); @@ -146,10 +136,6 @@ user_widget_init (UserWidget *self) g_signal_connect_after (GTK_WIDGET(self), "draw", G_CALLBACK(user_widget_primitive_draw_cb_gtk_3), GTK_WIDGET(self)); - - g_signal_connect_after (GTK_WIDGET(priv->user_image), "draw", - G_CALLBACK(user_widget_draw_usericon_gtk_3), - GTK_WIDGET(self)); } static void @@ -179,338 +165,27 @@ user_widget_primitive_draw_cb_gtk_3 (GtkWidget *widget, UserWidgetPrivate * priv = USER_WIDGET_GET_PRIVATE(meta); // Draw dot only when user is the current user. - if (!dbusmenu_menuitem_property_get_bool (priv->twin_item, - USER_ITEM_PROP_IS_CURRENT_USER)){ - return FALSE; - } - - GtkStyle *style; - gdouble x, y; - style = gtk_widget_get_style (widget); - - GtkAllocation allocation; - gtk_widget_get_allocation (widget, &allocation); - x = allocation.x + 13; - y = allocation.height / 2; - - cairo_arc (cr, x, y, 3.0, 0.0, 2 * G_PI); + if (dbusmenu_menuitem_property_get_bool (priv->twin_item, USER_ITEM_PROP_IS_CURRENT_USER)) + { + gdouble x, y; + GtkStyle * style = gtk_widget_get_style (widget); - cairo_set_source_rgb (cr, style->fg[gtk_widget_get_state(widget)].red/65535.0, - style->fg[gtk_widget_get_state(widget)].green/65535.0, - style->fg[gtk_widget_get_state(widget)].blue/65535.0); - cairo_fill (cr); + GtkAllocation allocation; + gtk_widget_get_allocation (widget, &allocation); + x = allocation.x + 13; + y = allocation.height / 2; - return FALSE; -} + cairo_arc (cr, x, y, 3.0, 0.0, 2 * G_PI); -static gboolean -user_widget_draw_usericon_gtk_3 (GtkWidget *widget, - cairo_t* cr, - gpointer user_data) -{ - g_return_val_if_fail(IS_USER_WIDGET(user_data), FALSE); - UserWidget* meta = USER_WIDGET(user_data); - UserWidgetPrivate * priv = USER_WIDGET_GET_PRIVATE(meta); - - if (priv->using_personal_icon) - { - draw_album_border (widget, FALSE); + cairo_set_source_rgb (cr, style->fg[gtk_widget_get_state(widget)].red/65535.0, + style->fg[gtk_widget_get_state(widget)].green/65535.0, + style->fg[gtk_widget_get_state(widget)].blue/65535.0); + cairo_fill (cr); } return FALSE; } -static void -draw_album_border(GtkWidget *widg, gboolean selected) -{ - cairo_t *cr; - cr = gdk_cairo_create (gtk_widget_get_window (widg)); - gtk_style_context_add_class (gtk_widget_get_style_context (widg), - "menu"); - - GtkStyle *style; - style = gtk_widget_get_style (widg); - - GtkAllocation alloc; - gtk_widget_get_allocation (widg, &alloc); - gint offset = 0; - gint v_offset = 4; - - alloc.width = alloc.width + (offset * 2); - alloc.height = alloc.height - v_offset - 2; - alloc.x = alloc.x - offset; - alloc.y = alloc.y + v_offset/2 +1; - - CairoColorRGB bg_normal, fg_normal; - - bg_normal.r = style->bg[0].red/65535.0; - bg_normal.g = style->bg[0].green/65535.0; - bg_normal.b = style->bg[0].blue/65535.0; - - gint state = selected ? 5 : 0; - - fg_normal.r = style->fg[state].red/65535.0; - fg_normal.g = style->fg[state].green/65535.0; - fg_normal.b = style->fg[state].blue/65535.0; - - CairoColorRGB dark_top_color; - CairoColorRGB light_bottom_color; - CairoColorRGB background_color; - - _color_shade ( &bg_normal, 0.93, &background_color ); - _color_shade ( &bg_normal, 0.23, &dark_top_color ); - _color_shade ( &fg_normal, 0.55, &light_bottom_color ); - - cairo_rectangle (cr, - alloc.x, alloc.y, - alloc.width, alloc.height); - - cairo_set_line_width (cr, 1.0); - - cairo_clip ( cr ); - - cairo_move_to (cr, alloc.x, alloc.y ); - cairo_line_to (cr, alloc.x + alloc.width, - alloc.y ); - cairo_line_to ( cr, alloc.x + alloc.width, - alloc.y + alloc.height ); - cairo_line_to ( cr, alloc.x, alloc.y + alloc.height ); - cairo_line_to ( cr, alloc.x, alloc.y); - cairo_close_path (cr); - - cairo_set_source_rgba ( cr, - background_color.r, - background_color.g, - background_color.b, - 1.0 ); - - cairo_stroke ( cr ); - - cairo_move_to (cr, alloc.x, alloc.y ); - cairo_line_to (cr, alloc.x + alloc.width, - alloc.y ); - - cairo_close_path (cr); - cairo_set_source_rgba ( cr, - dark_top_color.r, - dark_top_color.g, - dark_top_color.b, - 1.0 ); - - cairo_stroke ( cr ); - - cairo_move_to ( cr, alloc.x + alloc.width, - alloc.y + alloc.height ); - cairo_line_to ( cr, alloc.x, alloc.y + alloc.height ); - - cairo_close_path (cr); - cairo_set_source_rgba ( cr, - light_bottom_color.r, - light_bottom_color.g, - light_bottom_color.b, - 1.0); - - cairo_stroke ( cr ); - cairo_destroy (cr); -} - -static void -_color_rgb_to_hls (gdouble *r, - gdouble *g, - gdouble *b) -{ - gdouble min; - gdouble max; - gdouble red; - gdouble green; - gdouble blue; - gdouble h = 0; - gdouble l; - gdouble s; - gdouble delta; - - red = *r; - green = *g; - blue = *b; - - if (red > green) - { - if (red > blue) - max = red; - else - max = blue; - - if (green < blue) - min = green; - else - min = blue; - } - else - { - if (green > blue) - max = green; - else - max = blue; - - if (red < blue) - min = red; - else - min = blue; - } - l = (max+min)/2; - if (fabs (max-min) < 0.0001) - { - h = 0; - s = 0; - } - else - { - if (l <= 0.5) - s = (max-min)/(max+min); - else - s = (max-min)/(2-max-min); - - delta = (max -min) != 0 ? (max -min) : 1; - - if(delta == 0) - delta = 1; - if (red == max) - h = (green-blue)/delta; - else if (green == max) - h = 2+(blue-red)/delta; - else if (blue == max) - h = 4+(red-green)/delta; - - h *= 60; - if (h < 0.0) - h += 360; - } - - *r = h; - *g = l; - *b = s; -} - -static void -_color_hls_to_rgb (gdouble *h, - gdouble *l, - gdouble *s) -{ - gdouble hue; - gdouble lightness; - gdouble saturation; - gdouble m1, m2; - gdouble r, g, b; - - lightness = *l; - saturation = *s; - - if (lightness <= 0.5) - m2 = lightness*(1+saturation); - else - m2 = lightness+saturation-lightness*saturation; - - m1 = 2*lightness-m2; - - if (saturation == 0) - { - *h = lightness; - *l = lightness; - *s = lightness; - } - else - { - hue = *h+120; - while (hue > 360) - hue -= 360; - while (hue < 0) - hue += 360; - - if (hue < 60) - r = m1+(m2-m1)*hue/60; - else if (hue < 180) - r = m2; - else if (hue < 240) - r = m1+(m2-m1)*(240-hue)/60; - else - r = m1; - - hue = *h; - while (hue > 360) - hue -= 360; - while (hue < 0) - hue += 360; - - if (hue < 60) - g = m1+(m2-m1)*hue/60; - else if (hue < 180) - g = m2; - else if (hue < 240) - g = m1+(m2-m1)*(240-hue)/60; - else - g = m1; - - hue = *h-120; - while (hue > 360) - hue -= 360; - while (hue < 0) - hue += 360; - - if (hue < 60) - b = m1+(m2-m1)*hue/60; - else if (hue < 180) - b = m2; - else if (hue < 240) - b = m1+(m2-m1)*(240-hue)/60; - else - b = m1; - - *h = r; - *l = g; - *s = b; - } -} - -static void -_color_shade (const CairoColorRGB *a, float k, CairoColorRGB *b) -{ - double red; - double green; - double blue; - - red = a->r; - green = a->g; - blue = a->b; - - if (k == 1.0) - { - b->r = red; - b->g = green; - b->b = blue; - return; - } - - _color_rgb_to_hls (&red, &green, &blue); - - green *= k; - if (green > 1.0) - green = 1.0; - else if (green < 0.0) - green = 0.0; - - blue *= k; - if (blue > 1.0) - blue = 1.0; - else if (blue < 0.0) - blue = 0.0; - - _color_hls_to_rgb (&red, &green, &blue); - - b->r = red; - b->g = green; - b->b = blue; -} - /*** **** ***/ @@ -536,14 +211,8 @@ update_icon (UserWidget * self, DbusmenuMenuitem * mi) } /* as a fallback, try to use the default user icon */ - if (pixbuf != NULL) + if (pixbuf == NULL) { - self->priv->using_personal_icon = TRUE; - } - else - { - self->priv->using_personal_icon = FALSE; - pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (), USER_ITEM_ICON_DEFAULT, ICON_SIZE, -- cgit v1.2.3 From 554f2f463835cabde413103416fcc49954224981 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Thu, 5 Jul 2012 10:45:10 -0500 Subject: copyediting --- src/user-widget.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/user-widget.c') diff --git a/src/user-widget.c b/src/user-widget.c index 9ebaecf..90dd811 100644 --- a/src/user-widget.c +++ b/src/user-widget.c @@ -286,11 +286,11 @@ user_widget_set_twin_item (UserWidget * self, DbusmenuMenuitem * mi) } /** - * transport_new: - * @returns: a new #UserWidget. - **/ + * user_widget_new: + * @returns: a new #UserWidget. + **/ GtkWidget* -user_widget_new(DbusmenuMenuitem *item) +user_widget_new (DbusmenuMenuitem *item) { GtkWidget* widget = g_object_new(USER_WIDGET_TYPE, NULL); user_widget_set_twin_item ( USER_WIDGET(widget), item ); -- cgit v1.2.3 From a578e5d5e3e0e8f2bcbdcdd5079af4f886d4dd4e Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Thu, 5 Jul 2012 10:46:44 -0500 Subject: copyediting --- src/user-widget.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) (limited to 'src/user-widget.c') diff --git a/src/user-widget.c b/src/user-widget.c index 90dd811..b0d2dd4 100644 --- a/src/user-widget.c +++ b/src/user-widget.c @@ -20,14 +20,11 @@ with this program. If not, see . */ #ifdef HAVE_CONFIG_H -#include "config.h" + #include "config.h" #endif -#include #include -#include - #include #include "shared-names.h" @@ -49,13 +46,6 @@ struct _UserWidgetPrivate #define USER_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), USER_WIDGET_TYPE, UserWidgetPrivate)) -typedef struct -{ - double r; - double g; - double b; -} CairoColorRGB; - /* Prototypes */ static void user_widget_class_init (UserWidgetClass *klass); static void user_widget_init (UserWidget *self); -- cgit v1.2.3