static gboolean _cd_do_fill_bookmark_entry (CDEntry *pEntry) { if (pEntry->cIconName != NULL && pEntry->pIconSurface == NULL) { cairo_t* pSourceContext = cairo_dock_create_context_from_container (CAIRO_CONTAINER (g_pMainDock)); GdkPixbuf *pixbuf = gdk_pixbuf_new_from_data (const guchar *data, GDK_COLORSPACE_RGB, FALSE, // has_alpha 8, // bits_per_sample 16, 16, // width, height 16*3, // rowstride NULL, NULL); double fImageWidth=0, fImageHeight=0; double fZoomX=0, fZoomY=0; pEntry->pIconSurface = cairo_dock_create_surface_from_pixbuf (pixbuf, pSourceContext, 1., myDialogs.dialogTextDescription.iSize, myDialogs.dialogTextDescription.iSize, 0, &fImageWidth, &fImageHeight, &fZoomX, &fZoomY); g_object_unref (pixbuf); g_free (pEntry->cIconName); pEntry->cIconName = NULL; cairo_destroy (pSourceContext); return TRUE; }
static gboolean _cd_do_fill_bookmark_entry (CDEntry *pEntry) { if (pEntry->pIconSurface != NULL || pEntry->cIconName == NULL) return FALSE; gsize out_len = 0; //g_print ("icon : %s\n", pEntry->cIconName); guchar *icon = g_base64_decode (pEntry->cIconName, &out_len); //g_print ("-> out_len : %d\n", out_len); g_return_val_if_fail (icon != NULL, FALSE); //g_print ("-> data : %d\n", icon); GInputStream * is = g_memory_input_stream_new_from_data (icon, out_len, NULL); GdkPixbuf *pixbuf = gdk_pixbuf_new_from_stream (is, NULL, NULL); g_object_unref (is); double fImageWidth=0, fImageHeight=0; double fZoomX=0, fZoomY=0; pEntry->pIconSurface = cairo_dock_create_surface_from_pixbuf (pixbuf, 1., myDialogsParam.dialogTextDescription.iSize, myDialogsParam.dialogTextDescription.iSize, 0, &fImageWidth, &fImageHeight, &fZoomX, &fZoomY); g_object_unref (pixbuf); g_free (icon); return TRUE; }