diff --git a/src/gcal-edit-dialog.c b/src/gcal-edit-dialog.c index f6494550..59fc74a4 100644 --- a/src/gcal-edit-dialog.c +++ b/src/gcal-edit-dialog.c @@ -153,13 +153,15 @@ fill_sources_menu (GcalEditDialog *dialog) ESource *source; GMenuItem *item; GdkRGBA color; + cairo_surface_t *surface; GdkPixbuf *pix; source = E_SOURCE (aux->data); /* retrieve color */ get_color_name_from_source (source, &color); - pix = get_circle_pixbuf_from_color (&color, 16);; + surface = get_circle_surface_from_color (&color, 16); + pix = gdk_pixbuf_get_from_surface (surface, 0, 0, 16, 16); /* menu item */ item = g_menu_item_new (e_source_get_display_name (source), "select-calendar"); @@ -178,6 +180,7 @@ fill_sources_menu (GcalEditDialog *dialog) g_menu_append_item (dialog->sources_menu, item); + g_clear_pointer (&surface, cairo_surface_destroy); g_object_unref (pix); g_object_unref (item); } @@ -217,18 +220,19 @@ on_calendar_selected (GSimpleAction *action, if (g_strcmp0 (e_source_get_uid (source), uid) == 0) { GdkRGBA color; - GdkPixbuf *pix; + cairo_surface_t *surface; /* retrieve color */ get_color_name_from_source (source, &color); - pix = get_circle_pixbuf_from_color (&color, 16); - gtk_image_set_from_pixbuf (GTK_IMAGE (self->source_image), pix); - g_object_unref (pix); + surface = get_circle_surface_from_color (&color, 16); + gtk_image_set_from_surface (GTK_IMAGE (self->source_image), surface); self->selected_source = source; gtk_label_set_label (GTK_LABEL (self->subtitle_label), e_source_get_display_name (source)); + + g_clear_pointer (&surface, cairo_surface_destroy); break; } } @@ -1062,7 +1066,7 @@ gcal_edit_dialog_set_event (GcalEditDialog *dialog, { GDateTime *date_start; GDateTime *date_end; - GdkPixbuf *pix; + cairo_surface_t *surface; ESource *source; const gchar *summary; gboolean all_day; @@ -1095,9 +1099,9 @@ gcal_edit_dialog_set_event (GcalEditDialog *dialog, gtk_entry_set_text (GTK_ENTRY (dialog->summary_entry), summary); /* dialog titlebar's title & subtitle */ - pix = get_circle_pixbuf_from_color (gcal_event_get_color (event), 16); - gtk_image_set_from_pixbuf (GTK_IMAGE (dialog->source_image), pix); - g_object_unref (pix); + surface = get_circle_surface_from_color (gcal_event_get_color (event), 16); + gtk_image_set_from_surface (GTK_IMAGE (dialog->source_image), surface); + g_clear_pointer (&surface, cairo_surface_destroy); gtk_label_set_label (GTK_LABEL (dialog->subtitle_label), e_source_get_display_name (source)); diff --git a/src/gcal-quick-add-popover.c b/src/gcal-quick-add-popover.c index a319274b..479420c1 100644 --- a/src/gcal-quick-add-popover.c +++ b/src/gcal-quick-add-popover.c @@ -73,8 +73,8 @@ create_row_for_source (GcalManager *manager, ESource *source, gboolean writable) { + cairo_surface_t *surface; GtkWidget *row, *box, *icon, *label, *selected_icon; - GdkPixbuf *circle_pixbuf; GdkRGBA color; gchar *tooltip, *parent_name; @@ -87,8 +87,8 @@ create_row_for_source (GcalManager *manager, /* The icon with the source color */ get_color_name_from_source (source, &color); - circle_pixbuf = get_circle_pixbuf_from_color (&color, 16); - icon = gtk_image_new_from_pixbuf (circle_pixbuf); + surface = get_circle_surface_from_color (&color, 16); + icon = gtk_image_new_from_surface (surface); gtk_container_add (GTK_CONTAINER (box), icon); @@ -135,7 +135,7 @@ create_row_for_source (GcalManager *manager, gtk_widget_show (box); gtk_widget_show (row); - g_clear_object (&circle_pixbuf); + g_clear_pointer (&surface, cairo_surface_destroy); g_free (parent_name); g_free (tooltip); @@ -176,8 +176,8 @@ static void select_row (GcalQuickAddPopover *self, GtkListBoxRow *row) { + cairo_surface_t *surface; GtkWidget *icon; - GdkPixbuf *circle_pixbuf; ESource *source; GdkRGBA color; @@ -200,8 +200,8 @@ select_row (GcalQuickAddPopover *self, gtk_label_set_label (GTK_LABEL (self->calendar_name_label), e_source_get_display_name (source)); get_color_name_from_source (source, &color); - circle_pixbuf = get_circle_pixbuf_from_color (&color, 16); - gtk_image_set_from_pixbuf (GTK_IMAGE (self->color_image), circle_pixbuf); + surface = get_circle_surface_from_color (&color, 16); + gtk_image_set_from_surface (GTK_IMAGE (self->color_image), surface); /* Return to the events page */ gtk_stack_set_visible_child_name (GTK_STACK (self->stack), "events"); @@ -210,7 +210,7 @@ select_row (GcalQuickAddPopover *self, if (gtk_widget_get_visible (GTK_WIDGET (self))) gtk_entry_grab_focus_without_selecting (GTK_ENTRY (self->summary_entry)); - g_clear_object (&circle_pixbuf); + g_clear_pointer (&surface, cairo_surface_destroy); } static void @@ -348,8 +348,8 @@ on_source_changed (GcalManager *manager, ESource *source, GcalQuickAddPopover *self) { + cairo_surface_t *surface; GtkWidget *row, *color_icon, *name_label; - GdkPixbuf *circle_pixbuf; GdkRGBA color; row = get_row_for_source (self, source); @@ -378,10 +378,10 @@ on_source_changed (GcalManager *manager, /* Setup the source color, in case it changed */ get_color_name_from_source (source, &color); - circle_pixbuf = get_circle_pixbuf_from_color (&color, 16); - gtk_image_set_from_pixbuf (GTK_IMAGE (color_icon), circle_pixbuf); + surface = get_circle_surface_from_color (&color, 16); + gtk_image_set_from_surface (GTK_IMAGE (color_icon), surface); - g_clear_object (&circle_pixbuf); + g_clear_pointer (&surface, cairo_surface_destroy); /* Also setup the row name, in case we just changed the source name */ gtk_label_set_text (GTK_LABEL (name_label), e_source_get_display_name (source)); diff --git a/src/gcal-search-view.c b/src/gcal-search-view.c index 8ef05fb0..efc5e07e 100644 --- a/src/gcal-search-view.c +++ b/src/gcal-search-view.c @@ -297,7 +297,7 @@ make_row_for_event (GcalSearchView *view, { GDateTime *local_datetime; GDateTime *date_start; - GdkPixbuf *pixbuf; + cairo_surface_t *surface; GtkWidget *row; GtkWidget *grid; @@ -311,10 +311,10 @@ make_row_for_event (GcalSearchView *view, GtkWidget *image; /* get event color */ - pixbuf = gcal_get_pixbuf_from_color (gcal_event_get_color (event), 16); + surface = gcal_get_surface_from_color (gcal_event_get_color (event), 16); /* make an image of the color */ - image = gtk_image_new_from_pixbuf (pixbuf); + image = gtk_image_new_from_surface (surface); /* grid & box*/ row = gtk_list_box_row_new (); @@ -397,7 +397,7 @@ make_row_for_event (GcalSearchView *view, gtk_widget_show_all (row); g_clear_pointer (&local_datetime, g_date_time_unref); - g_object_unref (pixbuf); + g_clear_pointer (&surface, cairo_surface_destroy); return row; } diff --git a/src/gcal-shell-search-provider.c b/src/gcal-shell-search-provider.c index 5429c62b..9e08a946 100644 --- a/src/gcal-shell-search-provider.c +++ b/src/gcal-shell-search-provider.c @@ -203,6 +203,8 @@ get_result_metas_cb (GcalShellSearchProvider *search_provider, g_variant_builder_init (&abuilder, G_VARIANT_TYPE ("aa{sv}")); for (i = 0; i < g_strv_length (results); i++) { + cairo_surface_t *surface; + uuid = results[i]; event = g_hash_table_lookup (priv->events, uuid); @@ -210,7 +212,8 @@ get_result_metas_cb (GcalShellSearchProvider *search_provider, g_variant_builder_add (&builder, "{sv}", "id", g_variant_new_string (uuid)); g_variant_builder_add (&builder, "{sv}", "name", g_variant_new_string (gcal_event_get_summary (event))); - gicon = get_circle_pixbuf_from_color (gcal_event_get_color (event), 128); + surface = get_circle_surface_from_color (gcal_event_get_color (event), 96); + gicon = gdk_pixbuf_get_from_surface (surface, 0, 0, 96, 96); icon_variant = g_icon_serialize (G_ICON (gicon)); g_variant_builder_add (&builder, "{sv}", "icon", icon_variant); g_object_unref (gicon); @@ -228,6 +231,8 @@ get_result_metas_cb (GcalShellSearchProvider *search_provider, g_variant_builder_add (&builder, "{sv}", "description", g_variant_new_string (desc)); g_variant_builder_add_value (&abuilder, g_variant_builder_end (&builder)); + + g_clear_pointer (&surface, cairo_surface_destroy); } g_dbus_method_invocation_return_value (invocation, g_variant_new ("(aa{sv})", &abuilder)); diff --git a/src/gcal-source-dialog.c b/src/gcal-source-dialog.c index 3a68359a..67f1144a 100644 --- a/src/gcal-source-dialog.c +++ b/src/gcal-source-dialog.c @@ -569,7 +569,7 @@ source_color_changed (GObject *source, GtkImage *icon) { ESourceSelectable *extension; - GdkPixbuf *pixbuf; + cairo_surface_t *surface; GdkRGBA out_color; extension = E_SOURCE_SELECTABLE (source); @@ -582,9 +582,9 @@ source_color_changed (GObject *source, if (gdk_rgba_parse (&out_color, e_source_selectable_get_color (extension))) { - pixbuf = get_circle_pixbuf_from_color (&out_color, 24); - gtk_image_set_from_pixbuf (GTK_IMAGE (icon), pixbuf); - g_object_unref (pixbuf); + surface = get_circle_surface_from_color (&out_color, 24); + gtk_image_set_from_surface (GTK_IMAGE (icon), surface); + g_clear_pointer (&surface, cairo_surface_destroy); } } @@ -610,10 +610,10 @@ static GtkWidget* make_row_from_source (GcalSourceDialog *dialog, ESource *source) { + cairo_surface_t *surface; GtkBuilder *builder; GtkWidget *bottom_label; GtkWidget *top_label; - GdkPixbuf *pixbuf; GtkWidget *icon; GtkWidget *row; GdkRGBA color; @@ -632,9 +632,9 @@ make_row_from_source (GcalSourceDialog *dialog, /* source color icon */ get_color_name_from_source (source, &color); - pixbuf = get_circle_pixbuf_from_color (&color, 24); + surface = get_circle_surface_from_color (&color, 24); icon = GTK_WIDGET (gtk_builder_get_object (builder, "icon")); - gtk_image_set_from_pixbuf (GTK_IMAGE (icon), pixbuf); + gtk_image_set_from_surface (GTK_IMAGE (icon), surface); /* source name label */ top_label = GTK_WIDGET (gtk_builder_get_object (builder, "title")); @@ -650,8 +650,8 @@ make_row_from_source (GcalSourceDialog *dialog, bottom_label = GTK_WIDGET (gtk_builder_get_object (builder, "subtitle")); gtk_label_set_label (GTK_LABEL (bottom_label), parent_name); + g_clear_pointer (&surface, cairo_surface_destroy); g_object_unref (builder); - g_object_unref (pixbuf); g_free (parent_name); return row; diff --git a/src/gcal-utils.c b/src/gcal-utils.c index cbcdb7ec..ddec389a 100644 --- a/src/gcal-utils.c +++ b/src/gcal-utils.c @@ -187,13 +187,12 @@ gcal_get_month_name (gint i) * * Returns: (Transfer full): An instance of {@link GdkPixbuf} to be freed with g_object_unref() **/ -GdkPixbuf* -gcal_get_pixbuf_from_color (GdkRGBA *color, - gint size) +cairo_surface_t* +gcal_get_surface_from_color (GdkRGBA *color, + gint size) { cairo_surface_t *surface; cairo_t *cr; - GdkPixbuf *pix; /* TODO: review size here, maybe not hardcoded */ surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, size, size); @@ -207,22 +206,17 @@ gcal_get_pixbuf_from_color (GdkRGBA *color, cairo_rectangle (cr, 0, 0, size, size); cairo_fill (cr); cairo_destroy (cr); - pix = gdk_pixbuf_get_from_surface (surface, - 0, 0, - size, size); - cairo_surface_destroy (surface); - return pix; + + return surface; } -GdkPixbuf* -get_circle_pixbuf_from_color (GdkRGBA *color, - gint size) +cairo_surface_t* +get_circle_surface_from_color (GdkRGBA *color, + gint size) { cairo_surface_t *surface; cairo_t *cr; - GdkPixbuf *pix; - /* TODO: review size here, maybe not hardcoded */ surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, size, size); cr = cairo_create (surface); @@ -234,11 +228,8 @@ get_circle_pixbuf_from_color (GdkRGBA *color, cairo_arc (cr, size / 2.0, size / 2.0, size / 2.0, 0., 2 * M_PI); cairo_fill (cr); cairo_destroy (cr); - pix = gdk_pixbuf_get_from_surface (surface, - 0, 0, - size, size); - cairo_surface_destroy (surface); - return pix; + + return surface; } void diff --git a/src/gcal-utils.h b/src/gcal-utils.h index 8c3a249f..c39f3552 100644 --- a/src/gcal-utils.h +++ b/src/gcal-utils.h @@ -73,10 +73,10 @@ gchar* gcal_get_weekday (gint gchar* gcal_get_month_name (gint i); -GdkPixbuf* gcal_get_pixbuf_from_color (GdkRGBA *color, +cairo_surface_t*gcal_get_surface_from_color (GdkRGBA *color, gint size); -GdkPixbuf* get_circle_pixbuf_from_color (GdkRGBA *color, +cairo_surface_t*get_circle_surface_from_color (GdkRGBA *color, gint size); void get_color_name_from_source (ESource *source, diff --git a/src/gcal-window.c b/src/gcal-window.c index 49edcf17..eaf9132e 100644 --- a/src/gcal-window.c +++ b/src/gcal-window.c @@ -888,7 +888,7 @@ make_row_from_source (GcalWindow *window, { GtkWidget *label, *icon, *checkbox, *box, *row; GtkStyleContext *context; - GdkPixbuf *pixbuf; + cairo_surface_t *surface; GdkRGBA color; row = gtk_list_box_row_new (); @@ -905,8 +905,8 @@ make_row_from_source (GcalWindow *window, /* source color icon */ get_color_name_from_source (source, &color); - pixbuf = get_circle_pixbuf_from_color (&color, 16); - icon = gtk_image_new_from_pixbuf (pixbuf); + surface = get_circle_surface_from_color (&color, 16); + icon = gtk_image_new_from_surface (surface); gtk_style_context_add_class (gtk_widget_get_style_context (icon), "calendar-color-image"); @@ -930,7 +930,7 @@ make_row_from_source (GcalWindow *window, gtk_widget_show_all (row); - g_object_unref (pixbuf); + g_clear_pointer (&surface, cairo_surface_destroy); return row; }