gboolean xfwmPixmapIsLoadable (const gchar * dir, const gchar * file, xfwmColorSymbol * cs) { gchar *filename; gchar *filexpm; GdkPixbuf *pixbuf; TRACE ("entering xfwmPixmapIsLoadable(%s)", file); g_return_val_if_fail (dir != NULL, FALSE); g_return_val_if_fail (file != NULL, FALSE); filexpm = g_strdup_printf ("%s.%s", file, "xpm"); filename = g_build_filename (dir, filexpm, NULL); g_free (filexpm); pixbuf = xpm_image_load (filename, cs); g_free (filename); /* Compose with other image formats, if any available. */ pixbuf = xfwmPixmapCompose (pixbuf, dir, file); if (!pixbuf) { return FALSE; } g_object_unref (pixbuf); return TRUE; }
gboolean xfwmPixmapLoad (ScreenInfo * screen_info, xfwmPixmap * pm, const gchar * dir, const gchar * file, xfwmColorSymbol * cs) { gchar *filename; gchar *filexpm; GdkPixbuf *pixbuf; TRACE ("entering xfwmPixmapLoad"); g_return_val_if_fail (pm != NULL, FALSE); g_return_val_if_fail (dir != NULL, FALSE); g_return_val_if_fail (file != NULL, FALSE); xfwmPixmapInit (screen_info, pm); /* * Always try to load the XPM first, using our own routine * that supports XPM color symbol susbstitution (used to * apply the gtk+ colors to the pixmaps). */ filexpm = g_strdup_printf ("%s.%s", file, "xpm"); filename = g_build_filename (dir, filexpm, NULL); g_free (filexpm); pixbuf = xpm_image_load (filename, cs); g_free (filename); /* Compose with other image formats, if any available. */ pixbuf = xfwmPixmapCompose (pixbuf, dir, file); if (!pixbuf) { /* * Cannot find a suitable image format for some part, * it's not critical though as most themes are missing * buttons */ return FALSE; } xfwmPixmapCreate (screen_info, pm, gdk_pixbuf_get_width (pixbuf), gdk_pixbuf_get_height (pixbuf)); xfwmPixmapDrawFromGdkPixbuf (pm, pixbuf); #ifdef HAVE_RENDER xfwmPixmapRefreshPict (pm); #endif g_object_unref (pixbuf); return TRUE; }