diff options
author | Conor Curran <conor.curran@canonical.com> | 2010-10-22 16:09:55 -0400 |
---|---|---|
committer | Conor Curran <conor.curran@canonical.com> | 2010-10-22 16:09:55 -0400 |
commit | 79ecf263348fa4da51d3ac014f8cf796a520de06 (patch) | |
tree | c07b66108bfbb56e43ae48d6b6572baef4298627 /src | |
parent | 65eeb5213f9c74b33595f085d20b5d14e7b8026b (diff) | |
download | ayatana-indicator-sound-79ecf263348fa4da51d3ac014f8cf796a520de06.tar.gz ayatana-indicator-sound-79ecf263348fa4da51d3ac014f8cf796a520de06.tar.bz2 ayatana-indicator-sound-79ecf263348fa4da51d3ac014f8cf796a520de06.zip |
metadata album art border done
Diffstat (limited to 'src')
-rw-r--r-- | src/metadata-widget.c | 169 |
1 files changed, 40 insertions, 129 deletions
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) |