From 5a419e83132124e99b2112a6533ab018297bc19c Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Wed, 13 Oct 2010 16:05:51 +0100 Subject: basic border around album art instead of rounded corners - boo --- src/metadata-widget.c | 126 +++++++++++++------------------------------------- 1 file changed, 31 insertions(+), 95 deletions(-) (limited to 'src/metadata-widget.c') diff --git a/src/metadata-widget.c b/src/metadata-widget.c index cbbaeff..fd36c01 100644 --- a/src/metadata-widget.c +++ b/src/metadata-widget.c @@ -62,12 +62,10 @@ static void metadata_widget_property_update (DbusmenuMenuitem* item, gchar* property, GValue* value, gpointer userdata); -static void metadata_widget_style_labels(MetadataWidget* self, - GtkLabel* label); -static void image_set_from_pixbuf (GtkWidget *widget, - MetadataWidget* metadata, - GdkPixbuf *source); -static void draw_album_art_placeholder(GtkWidget *metadata); +static void metadata_widget_style_labels ( MetadataWidget* self, + GtkLabel* label); +static void draw_album_art_placeholder ( GtkWidget *metadata); +static void draw_album_border ( GtkWidget *metadata); G_DEFINE_TYPE (MetadataWidget, metadata_widget, GTK_TYPE_MENU_ITEM); @@ -183,7 +181,8 @@ metadata_image_expose (GtkWidget *metadata, GdkEventExpose *event, gpointer user { g_return_val_if_fail(IS_METADATA_WIDGET(user_data), FALSE); MetadataWidget* widget = METADATA_WIDGET(user_data); - MetadataWidgetPrivate * priv = METADATA_WIDGET_GET_PRIVATE(widget); + MetadataWidgetPrivate * priv = METADATA_WIDGET_GET_PRIVATE(widget); + draw_album_border(metadata); if(priv->image_path->len > 0){ if(g_string_equal(priv->image_path, priv->old_image_path) == FALSE || priv->theme_change_occured == TRUE){ @@ -196,9 +195,9 @@ metadata_image_expose (GtkWidget *metadata, GdkEventExpose *event, gpointer user //g_debug("problem loading the downloaded image just use the placeholder instead"); draw_album_art_placeholder(metadata); return TRUE; - } + } pixbuf = gdk_pixbuf_scale_simple(pixbuf,60, 60, GDK_INTERP_BILINEAR); - image_set_from_pixbuf (metadata, widget, pixbuf); + gtk_image_set_from_pixbuf(GTK_IMAGE(priv->album_art), pixbuf); g_string_erase(priv->old_image_path, 0, -1); g_string_overwrite(priv->old_image_path, 0, priv->image_path->str); @@ -211,8 +210,8 @@ metadata_image_expose (GtkWidget *metadata, GdkEventExpose *event, gpointer user } static void -draw_album_art_placeholder(GtkWidget *metadata) -{ +draw_album_border(GtkWidget *metadata) +{ cairo_t *cr; cr = gdk_cairo_create (metadata->window); GtkStyle *style; @@ -220,7 +219,13 @@ draw_album_art_placeholder(GtkWidget *metadata) GtkAllocation alloc; gtk_widget_get_allocation (metadata, &alloc); - + gint offset = 2; + + alloc.width = alloc.width + (offset * 2); + alloc.height = alloc.height + (offset * 2); + alloc.x = alloc.x - offset; + alloc.y = alloc.y - offset; + cairo_rectangle (cr, alloc.x, alloc.y, alloc.width, alloc.height); @@ -234,6 +239,7 @@ draw_album_art_placeholder(GtkWidget *metadata) 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, @@ -243,8 +249,20 @@ draw_album_art_placeholder(GtkWidget *metadata) 0.6); cairo_set_line_width (cr, 2.0); - cairo_stroke (cr); + cairo_stroke (cr); +} +static void +draw_album_art_placeholder(GtkWidget *metadata) +{ + cairo_t *cr; + cr = gdk_cairo_create (metadata->window); + GtkStyle *style; + style = gtk_widget_get_style (metadata); + + GtkAllocation alloc; + gtk_widget_get_allocation (metadata, &alloc); + // Draw the eight note PangoLayout *layout; PangoFontDescription *desc; @@ -405,87 +423,6 @@ rounded_rectangle (cairo_t *cr, cairo_close_path (cr); } -static void -image_set_from_pixbuf (GtkWidget *widget, - MetadataWidget* metadata, - GdkPixbuf *source) -{ - cairo_t *cr; - cairo_t *cr_mask; - cairo_surface_t *surface; - GdkPixmap *pixmap; - GdkPixmap *bitmask; - int w; - int h; - int frame_width; - double radius; - GdkColor color; - double r; - double g; - double b; - - MetadataWidgetPrivate* priv = METADATA_WIDGET_GET_PRIVATE(metadata); - GtkImage* image = GTK_IMAGE(priv->album_art); - frame_width = 3; - - w = gdk_pixbuf_get_width (source) + frame_width * 2; - h = gdk_pixbuf_get_height (source) + frame_width * 2; - - radius = 10; - - pixmap = gdk_pixmap_new (gtk_widget_get_window (widget), w, h, -1); - bitmask = gdk_pixmap_new (gtk_widget_get_window (widget), w, h, 1); - - if (gtk_widget_get_window (widget) == NULL) - return; - - cr = gdk_cairo_create (pixmap); - cr_mask = gdk_cairo_create (bitmask); - - /* setup mask */ - cairo_rectangle (cr_mask, 0, 0, w, h); - cairo_set_operator (cr_mask, CAIRO_OPERATOR_CLEAR); - cairo_fill (cr_mask); - - rounded_rectangle (cr_mask, 1.0, 0.5, 0.5, radius, w - 1, h - 1); - cairo_set_operator (cr_mask, CAIRO_OPERATOR_OVER); - cairo_set_source_rgb (cr_mask, 1, 1, 1); - cairo_fill (cr_mask); - - color = gtk_widget_get_style (GTK_WIDGET (image))->bg [GTK_STATE_NORMAL]; - r = (float)color.red / 65535.0; - g = (float)color.green / 65535.0; - b = (float)color.blue / 65535.0; - - /* set up image */ - cairo_rectangle (cr, 0, 0, w, h); - cairo_set_source_rgb (cr, r, g, b); - cairo_fill (cr); - - rounded_rectangle (cr, - 1.0, - frame_width + 0.5, - frame_width + 0.5, - radius, - w - frame_width * 2 - 1, - h - frame_width * 2 - 1); - cairo_set_source_rgba (cr, 0.5, 0.5, 0.5, 0.3); - cairo_fill_preserve (cr); - - surface = surface_from_pixbuf (source); - cairo_set_source_surface (cr, surface, frame_width, frame_width); - cairo_fill (cr); - - gtk_image_set_from_pixmap (image, pixmap, bitmask); - - cairo_surface_destroy (surface); - - g_object_unref (bitmask); - g_object_unref (pixmap); - - cairo_destroy (cr_mask); - cairo_destroy (cr); -} static void metadata_widget_style_labels(MetadataWidget* self, GtkLabel* label) @@ -517,7 +454,6 @@ metadata_widget_set_twin_item(MetadataWidget* self, G_CALLBACK(metadata_widget_property_update), self); } - /** * transport_new: * @returns: a new #MetadataWidget. -- cgit v1.2.3 From 65eeb5213f9c74b33595f085d20b5d14e7b8026b Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Fri, 22 Oct 2010 11:08:17 -0400 Subject: push new background work --- src/metadata-widget.c | 84 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 78 insertions(+), 6 deletions(-) (limited to 'src/metadata-widget.c') diff --git a/src/metadata-widget.c b/src/metadata-widget.c index fd36c01..52716ae 100644 --- a/src/metadata-widget.c +++ b/src/metadata-widget.c @@ -3,6 +3,7 @@ Copyright 2010 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 @@ -26,7 +27,7 @@ with this program. If not, see . #include "common-defs.h" #include #include - +#include "transport-widget.h" typedef struct _MetadataWidgetPrivate MetadataWidgetPrivate; @@ -41,6 +42,7 @@ struct _MetadataWidgetPrivate GtkWidget* piece_label; GtkWidget* container_label; DbusmenuMenuitem* twin_item; + gint artwork_offset; }; #define METADATA_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), METADATA_WIDGET_TYPE, MetadataWidgetPrivate)) @@ -99,6 +101,7 @@ metadata_widget_init (MetadataWidget *self) priv->album_art = gtk_image_new(); priv->image_path = g_string_new(dbusmenu_menuitem_property_get(priv->twin_item, DBUSMENU_METADATA_MENUITEM_ARTURL)); priv->old_image_path = g_string_new(""); + priv->artwork_offset = 2; //g_debug("Metadata::At startup and image path = %s", priv->image_path->str); g_signal_connect(priv->album_art, "expose-event", @@ -106,7 +109,11 @@ metadata_widget_init (MetadataWidget *self) GTK_WIDGET(self)); gtk_widget_set_size_request(GTK_WIDGET(priv->album_art), 60, 60); - gtk_box_pack_start (GTK_BOX (priv->hbox), priv->album_art, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (priv->hbox), + priv->album_art, + FALSE, + FALSE, + priv->artwork_offset * 2); priv->theme_change_occured = FALSE; @@ -156,7 +163,7 @@ metadata_widget_init (MetadataWidget *self) g_signal_connect(self, "style-set", G_CALLBACK(metadata_widget_set_style), GTK_WIDGET(self)); gtk_widget_set_size_request(GTK_WIDGET(self), 200, 65); - gtk_container_add (GTK_CONTAINER (self), hbox); + gtk_container_add (GTK_CONTAINER (self), hbox); } static void @@ -209,6 +216,56 @@ metadata_image_expose (GtkWidget *metadata, GdkEventExpose *event, gpointer user return TRUE; } + +static void +draw_gradient (cairo_t* cr, + GtkAllocation alloc, + double* rgba_start, + double* rgba_end) +{ + cairo_pattern_t* pattern = NULL; + cairo_rectangle (cr, + alloc.x, alloc.y, + alloc.width, alloc.height); + + 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_line_width (cr, 3.0); + CairoColorRGB darkened_top_color; + + _color_shade (&rgba_end, 0.8, &color_button[2]); + + pattern = cairo_pattern_create_linear (alloc.x, + alloc.y, + alloc.x, + alloc.y + alloc.height); + cairo_pattern_add_color_stop_rgba (pattern, + 0.0f, + rgba_start[0], + rgba_start[1], + rgba_start[2], + rgba_start[3]); + cairo_pattern_add_color_stop_rgba (pattern, + 1.0f, + rgba_end[0], + rgba_end[1], + rgba_end[2], + rgba_end[3]); + cairo_set_source (cr, pattern); + cairo_stroke (cr); + cairo_pattern_destroy (pattern); +} + static void draw_album_border(GtkWidget *metadata) { @@ -225,8 +282,23 @@ draw_album_border(GtkWidget *metadata) alloc.height = alloc.height + (offset * 2); alloc.x = alloc.x - offset; alloc.y = alloc.y - offset; - - cairo_rectangle (cr, + + double start_colour[] = { style->bg[0].red/65535.0, + style->bg[0].green/65535.0, + style->bg[0].blue/65535.0, + 1.0f }; + + double end_colour[] = { style->fg[0].red/65535.0, + style->fg[0].green/65535.0, + style->fg[0].blue/65535.0, + 1.0f}; + + draw_gradient(cr, + alloc, + start_colour, + end_colour); + + /*cairo_rectangle (cr, alloc.x, alloc.y, alloc.width, alloc.height); cairo_clip(cr); @@ -249,7 +321,7 @@ draw_album_border(GtkWidget *metadata) 0.6); cairo_set_line_width (cr, 2.0); - cairo_stroke (cr); + cairo_stroke (cr);*/ } static void -- cgit v1.2.3 From 79ecf263348fa4da51d3ac014f8cf796a520de06 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Fri, 22 Oct 2010 16:09:55 -0400 Subject: metadata album art border done --- src/metadata-widget.c | 169 ++++++++++++-------------------------------------- 1 file changed, 40 insertions(+), 129 deletions(-) (limited to 'src/metadata-widget.c') diff --git a/src/metadata-widget.c b/src/metadata-widget.c index 52716ae..911b35a 100644 --- a/src/metadata-widget.c +++ b/src/metadata-widget.c @@ -42,7 +42,6 @@ struct _MetadataWidgetPrivate GtkWidget* piece_label; GtkWidget* container_label; DbusmenuMenuitem* twin_item; - gint artwork_offset; }; #define METADATA_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), METADATA_WIDGET_TYPE, MetadataWidgetPrivate)) @@ -99,10 +98,9 @@ metadata_widget_init (MetadataWidget *self) // image priv->album_art = gtk_image_new(); - priv->image_path = g_string_new(dbusmenu_menuitem_property_get(priv->twin_item, DBUSMENU_METADATA_MENUITEM_ARTURL)); + priv->image_path = g_string_new(dbusmenu_menuitem_property_get(priv->twin_item, + DBUSMENU_METADATA_MENUITEM_ARTURL)); priv->old_image_path = g_string_new(""); - priv->artwork_offset = 2; - //g_debug("Metadata::At startup and image path = %s", priv->image_path->str); g_signal_connect(priv->album_art, "expose-event", G_CALLBACK(metadata_image_expose), @@ -113,10 +111,8 @@ metadata_widget_init (MetadataWidget *self) priv->album_art, FALSE, FALSE, - priv->artwork_offset * 2); - + 1); priv->theme_change_occured = FALSE; - GtkWidget* vbox = gtk_vbox_new(FALSE, 0); // artist @@ -135,7 +131,7 @@ metadata_widget_init (MetadataWidget *self) piece = gtk_label_new(dbusmenu_menuitem_property_get( priv->twin_item, DBUSMENU_METADATA_MENUITEM_TITLE) ); gtk_misc_set_alignment(GTK_MISC(piece), (gfloat)0, (gfloat)0); - gtk_misc_set_padding (GTK_MISC(piece), (gfloat)10, (gfloat)0); + gtk_misc_set_padding (GTK_MISC(piece), (gfloat)10, (gfloat)-5); gtk_widget_set_size_request (piece, 140, 15); gtk_label_set_ellipsize(GTK_LABEL(piece), PANGO_ELLIPSIZE_MIDDLE); metadata_widget_style_labels(self, GTK_LABEL(piece)); @@ -158,11 +154,9 @@ metadata_widget_init (MetadataWidget *self) gtk_box_pack_start (GTK_BOX (priv->hbox), vbox, FALSE, FALSE, 0); - gtk_widget_show_all (priv->hbox); - g_signal_connect(self, "style-set", G_CALLBACK(metadata_widget_set_style), GTK_WIDGET(self)); - gtk_widget_set_size_request(GTK_WIDGET(self), 200, 65); + gtk_widget_set_size_request(GTK_WIDGET(self), 200, 75); gtk_container_add (GTK_CONTAINER (self), hbox); } @@ -201,12 +195,12 @@ metadata_image_expose (GtkWidget *metadata, GdkEventExpose *event, gpointer user if(GDK_IS_PIXBUF(pixbuf) == FALSE){ //g_debug("problem loading the downloaded image just use the placeholder instead"); draw_album_art_placeholder(metadata); - return TRUE; - } + return TRUE; + } pixbuf = gdk_pixbuf_scale_simple(pixbuf,60, 60, GDK_INTERP_BILINEAR); gtk_image_set_from_pixbuf(GTK_IMAGE(priv->album_art), pixbuf); g_string_erase(priv->old_image_path, 0, -1); - g_string_overwrite(priv->old_image_path, 0, priv->image_path->str); + g_string_overwrite(priv->old_image_path, 0, priv->image_path->str); g_object_unref(pixbuf); } @@ -220,8 +214,8 @@ metadata_image_expose (GtkWidget *metadata, GdkEventExpose *event, gpointer user static void draw_gradient (cairo_t* cr, GtkAllocation alloc, - double* rgba_start, - double* rgba_end) + CairoColorRGB rgba_start, + CairoColorRGB rgba_end) { cairo_pattern_t* pattern = NULL; cairo_rectangle (cr, @@ -242,25 +236,28 @@ draw_gradient (cairo_t* cr, cairo_set_line_width (cr, 3.0); CairoColorRGB darkened_top_color; + CairoColorRGB light_bottom_color; - _color_shade (&rgba_end, 0.8, &color_button[2]); + _color_shade (&rgba_start, 0.6, &darkened_top_color); + _color_shade (&rgba_end, 0.7, &light_bottom_color); pattern = cairo_pattern_create_linear (alloc.x, alloc.y, alloc.x, alloc.y + alloc.height); + cairo_pattern_add_color_stop_rgba (pattern, - 0.0f, - rgba_start[0], - rgba_start[1], - rgba_start[2], - rgba_start[3]); + 0.4f, + darkened_top_color.r, + darkened_top_color.g, + darkened_top_color.b, + 1.0f); cairo_pattern_add_color_stop_rgba (pattern, 1.0f, - rgba_end[0], - rgba_end[1], - rgba_end[2], - rgba_end[3]); + light_bottom_color.r, + light_bottom_color.g, + light_bottom_color.b, + 1.0f); cairo_set_source (cr, pattern); cairo_stroke (cr); cairo_pattern_destroy (pattern); @@ -276,52 +273,28 @@ draw_album_border(GtkWidget *metadata) GtkAllocation alloc; gtk_widget_get_allocation (metadata, &alloc); - gint offset = 2; + gint offset = 1; alloc.width = alloc.width + (offset * 2); - alloc.height = alloc.height + (offset * 2); + alloc.height = alloc.height + (offset * 2) - 7; alloc.x = alloc.x - offset; - alloc.y = alloc.y - offset; - - double start_colour[] = { style->bg[0].red/65535.0, - style->bg[0].green/65535.0, - style->bg[0].blue/65535.0, - 1.0f }; + alloc.y = alloc.y - offset + 3; - double end_colour[] = { style->fg[0].red/65535.0, - style->fg[0].green/65535.0, - style->fg[0].blue/65535.0, - 1.0f}; - - draw_gradient(cr, - alloc, - start_colour, - end_colour); - - /*cairo_rectangle (cr, - alloc.x, alloc.y, - alloc.width, alloc.height); - cairo_clip(cr); + CairoColorRGB bg_normal, fg_normal; - 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); + 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; + fg_normal.r = style->fg[0].red/65535.0; + fg_normal.g = style->fg[0].green/65535.0; + fg_normal.b = style->fg[0].blue/65535.0; - cairo_close_path (cr); - cairo_set_source_rgba (cr, - style->fg[0].red/65535.0, - style->fg[0].green/65535.0, - style->fg[0].blue/65535.0, - 0.6); - cairo_set_line_width (cr, 2.0); - - cairo_stroke (cr);*/ + draw_gradient(cr, + alloc, + bg_normal, + fg_normal); } static void @@ -334,9 +307,8 @@ draw_album_art_placeholder(GtkWidget *metadata) GtkAllocation alloc; gtk_widget_get_allocation (metadata, &alloc); - - // Draw the eight note - PangoLayout *layout; + + PangoLayout *layout; PangoFontDescription *desc; layout = pango_cairo_create_layout(cr); PangoContext* pcontext = pango_cairo_create_context(cr); @@ -359,7 +331,7 @@ draw_album_art_placeholder(GtkWidget *metadata) 0.8); pango_cairo_update_layout(cr, layout); - cairo_move_to (cr, alloc.x + alloc.width/6, alloc.y); + cairo_move_to (cr, alloc.x + alloc.width/6, alloc.y + alloc.height/8); pango_cairo_show_layout(cr, layout); g_object_unref(layout); @@ -434,67 +406,6 @@ metadata_widget_property_update(DbusmenuMenuitem* item, gchar* property, } -static cairo_surface_t * -surface_from_pixbuf (GdkPixbuf *pixbuf) -{ - cairo_surface_t *surface; - cairo_t *cr; - - surface = cairo_image_surface_create (gdk_pixbuf_get_has_alpha (pixbuf) ? - CAIRO_FORMAT_ARGB32 : CAIRO_FORMAT_RGB24, - gdk_pixbuf_get_width (pixbuf), - gdk_pixbuf_get_height (pixbuf)); - cr = cairo_create (surface); - gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0); - cairo_paint (cr); - cairo_destroy (cr); - - return surface; -} - -static void -rounded_rectangle (cairo_t *cr, - gdouble aspect, - gdouble x, - gdouble y, - gdouble corner_radius, - gdouble width, - gdouble height) -{ - gdouble radius; - gdouble degrees; - - radius = corner_radius / aspect; - degrees = G_PI / 180.0; - cairo_new_sub_path (cr); - cairo_arc (cr, - x + width - radius, - y + radius, - radius, - -90 * degrees, - 0 * degrees); - cairo_arc (cr, - x + width - radius, - y + height - radius, - radius, - 0 * degrees, - 90 * degrees); - cairo_arc (cr, - x + radius, - y + height - radius, - radius, - 90 * degrees, - 180 * degrees); - cairo_arc (cr, - x + radius, - y + radius, - radius, - 180 * degrees, - 270 * degrees); - - cairo_close_path (cr); -} - static void metadata_widget_style_labels(MetadataWidget* self, GtkLabel* label) -- cgit v1.2.3 From 2f409b95c5c1c0c7107f4503c01687b3a913780f Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Wed, 27 Oct 2010 11:48:29 -0400 Subject: more tweaks --- src/metadata-widget.c | 45 ++++++++++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 13 deletions(-) (limited to 'src/metadata-widget.c') diff --git a/src/metadata-widget.c b/src/metadata-widget.c index 911b35a..38f2c4c 100644 --- a/src/metadata-widget.c +++ b/src/metadata-widget.c @@ -66,8 +66,11 @@ static void metadata_widget_property_update (DbusmenuMenuitem* item, static void metadata_widget_style_labels ( MetadataWidget* self, GtkLabel* label); static void draw_album_art_placeholder ( GtkWidget *metadata); -static void draw_album_border ( GtkWidget *metadata); - +static void draw_album_border ( GtkWidget *metadata, gboolean selected); +static void metadata_widget_selection_received_event_callback( GtkWidget *widget, + GtkSelectionData *data, + guint time, + gpointer user_data); G_DEFINE_TYPE (MetadataWidget, metadata_widget, GTK_TYPE_MENU_ITEM); @@ -154,8 +157,11 @@ metadata_widget_init (MetadataWidget *self) gtk_box_pack_start (GTK_BOX (priv->hbox), vbox, FALSE, FALSE, 0); - g_signal_connect(self, "style-set", G_CALLBACK(metadata_widget_set_style), GTK_WIDGET(self)); - + g_signal_connect(self, "style-set", + G_CALLBACK(metadata_widget_set_style), GTK_WIDGET(self)); + g_signal_connect (self, "selection-received", + G_CALLBACK(metadata_widget_selection_received_event_callback), + GTK_WIDGET(self)); gtk_widget_set_size_request(GTK_WIDGET(self), 200, 75); gtk_container_add (GTK_CONTAINER (self), hbox); } @@ -183,7 +189,7 @@ metadata_image_expose (GtkWidget *metadata, GdkEventExpose *event, gpointer user g_return_val_if_fail(IS_METADATA_WIDGET(user_data), FALSE); MetadataWidget* widget = METADATA_WIDGET(user_data); MetadataWidgetPrivate * priv = METADATA_WIDGET_GET_PRIVATE(widget); - draw_album_border(metadata); + draw_album_border(metadata, FALSE); if(priv->image_path->len > 0){ if(g_string_equal(priv->image_path, priv->old_image_path) == FALSE || priv->theme_change_occured == TRUE){ @@ -211,6 +217,7 @@ metadata_image_expose (GtkWidget *metadata, GdkEventExpose *event, gpointer user } + static void draw_gradient (cairo_t* cr, GtkAllocation alloc, @@ -264,7 +271,7 @@ draw_gradient (cairo_t* cr, } static void -draw_album_border(GtkWidget *metadata) +draw_album_border(GtkWidget *metadata, gboolean selected) { cairo_t *cr; cr = gdk_cairo_create (metadata->window); @@ -286,10 +293,11 @@ draw_album_border(GtkWidget *metadata) bg_normal.g = style->bg[0].green/65535.0; bg_normal.b = style->bg[0].blue/65535.0; - fg_normal.r = style->fg[0].red/65535.0; - fg_normal.g = style->fg[0].green/65535.0; - fg_normal.b = style->fg[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; draw_gradient(cr, alloc, @@ -341,6 +349,20 @@ draw_album_art_placeholder(GtkWidget *metadata) } +static void +metadata_widget_selection_received_event_callback ( GtkWidget *widget, + GtkSelectionData *data, + guint time, + gpointer user_data ) + +{ + //g_return_val_if_fail(IS_METADATA_WIDGET(user_data), FALSE); + //MetadataWidget* widget = METADATA_WIDGET(user_data); + //MetadataWidgetPrivate * priv = METADATA_WIDGET_GET_PRIVATE(widget); + g_debug("metadata_widget_selection_request_event_callback"); + draw_album_border(widget, TRUE); +} + /* Suppress/consume keyevents */ static gboolean metadata_widget_button_press_event (GtkWidget *menuitem, @@ -357,7 +379,6 @@ metadata_widget_button_press_event (GtkWidget *menuitem, DBUSMENU_METADATA_MENUITEM_TITLE), dbusmenu_menuitem_property_get(priv->twin_item, DBUSMENU_METADATA_MENUITEM_ALBUM)); - //g_debug("contents to be copied will be : %s", contents); gtk_clipboard_set_text (board, contents, -1); gtk_clipboard_store (board); g_free(contents); @@ -405,8 +426,6 @@ metadata_widget_property_update(DbusmenuMenuitem* item, gchar* property, } } - - static void metadata_widget_style_labels(MetadataWidget* self, GtkLabel* label) { -- cgit v1.2.3