static void update_display_preview (CcBackgroundPanel *panel, GtkWidget *widget, CcBackgroundItem *current_background) { CcBackgroundPanelPrivate *priv = panel->priv; GtkAllocation allocation; const gint preview_width = 309; const gint preview_height = 168; gint scale_factor; GdkPixbuf *pixbuf; cairo_t *cr; gtk_widget_get_allocation (widget, &allocation); if (!current_background) return; scale_factor = gtk_widget_get_scale_factor (widget); pixbuf = cc_background_item_get_frame_thumbnail (current_background, priv->thumb_factory, preview_width, preview_height, scale_factor, -2, TRUE); cr = gdk_cairo_create (gtk_widget_get_window (widget)); gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0); cairo_paint (cr); g_object_unref (pixbuf); pixbuf = NULL; if (current_background == priv->current_background && panel->priv->display_screenshot != NULL) { pixbuf = gdk_pixbuf_scale_simple (panel->priv->display_screenshot, preview_width, preview_height, GDK_INTERP_BILINEAR); } if (pixbuf) { gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0); cairo_paint (cr); g_object_unref (pixbuf); } cairo_destroy (cr); }
static void update_display_preview (CcBackgroundPanel *panel) { CcBackgroundPanelPrivate *priv = panel->priv; GtkWidget *widget; GtkAllocation allocation; const gint preview_width = 416; const gint preview_height = 248; GdkPixbuf *pixbuf; GIcon *icon; cairo_t *cr; widget = WID ("background-desktop-drawingarea"); gtk_widget_get_allocation (widget, &allocation); if (!priv->current_background) return; icon = cc_background_item_get_frame_thumbnail (priv->current_background, priv->thumb_factory, preview_width, preview_height, -2, TRUE); pixbuf = GDK_PIXBUF (icon); cr = gdk_cairo_create (gtk_widget_get_window (widget)); gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0); cairo_paint (cr); g_object_unref (pixbuf); pixbuf = NULL; if (panel->priv->display_screenshot != NULL) pixbuf = gdk_pixbuf_scale_simple (panel->priv->display_screenshot, preview_width, preview_height, GDK_INTERP_BILINEAR); if (pixbuf) { gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0); cairo_paint (cr); } cairo_destroy (cr); }
static gboolean preview_draw_cb (GtkWidget *widget, cairo_t *cr, CcBackgroundPanel *panel) { GtkAllocation allocation; CcBackgroundPanelPrivate *priv = panel->priv; GdkPixbuf *pixbuf = NULL; const gint preview_width = 416; const gint preview_height = 248; const gint preview_x = 45; const gint preview_y = 84; GdkPixbuf *preview, *temp; gint size; gtk_widget_get_allocation (widget, &allocation); if (priv->current_background) { GIcon *icon; icon = cc_background_item_get_frame_thumbnail (priv->current_background, priv->thumb_factory, preview_width, preview_height, -2, TRUE); pixbuf = GDK_PIXBUF (icon); } if (!priv->display_base) return FALSE; preview = gdk_pixbuf_copy (priv->display_base); if (pixbuf) { gdk_pixbuf_composite (pixbuf, preview, preview_x, preview_y, preview_width, preview_height, preview_x, preview_y, 1, 1, GDK_INTERP_BILINEAR, 255); g_object_unref (pixbuf); } if (priv->display_overlay) { gdk_pixbuf_composite (priv->display_overlay, preview, 0, 0, 512, 512, 0, 0, 1, 1, GDK_INTERP_BILINEAR, 255); } if (allocation.width < allocation.height) size = allocation.width; else size = allocation.height; temp = gdk_pixbuf_scale_simple (preview, size, size, GDK_INTERP_BILINEAR); gdk_cairo_set_source_pixbuf (cr, temp, allocation.width / 2 - (size / 2), allocation.height / 2 - (size / 2)); cairo_paint (cr); g_object_unref (temp); g_object_unref (preview); return TRUE; }