mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-11 11:20:12 +00:00
cssimage: Store the URI we're loaded from
I'd like to use it when printing the value, but I haven't found a way to do that sanely yet, as I'd need to be able to print relative paths for make check to work (otherwise the srcdir would blow things up). And we use a GString to output to, so there's no way to attach a base dir to that. If anyone has an idea how to achieve that, poke me. Having the real filename in debug prints sounds like a very good idea to me. https://bugzilla.gnome.org/show_bug.cgi?id=692934
This commit is contained in:
parent
5607a2125f
commit
6348ded15d
@ -66,21 +66,20 @@ gtk_css_image_url_parse (GtkCssImage *image,
|
||||
{
|
||||
GtkCssImageUrl *url = GTK_CSS_IMAGE_URL (image);
|
||||
GdkPixbuf *pixbuf;
|
||||
GFile *file;
|
||||
cairo_t *cr;
|
||||
GError *error = NULL;
|
||||
GFileInputStream *input;
|
||||
|
||||
file = _gtk_css_parser_read_url (parser);
|
||||
if (file == NULL)
|
||||
url->file = _gtk_css_parser_read_url (parser);
|
||||
if (url->file == NULL)
|
||||
return FALSE;
|
||||
|
||||
/* We special case resources here so we can use
|
||||
gdk_pixbuf_new_from_resource, which in turn has some special casing
|
||||
for GdkPixdata files to avoid duplicating the memory for the pixbufs */
|
||||
if (g_file_has_uri_scheme (file, "resource"))
|
||||
if (g_file_has_uri_scheme (url->file, "resource"))
|
||||
{
|
||||
char *uri = g_file_get_uri (file);
|
||||
char *uri = g_file_get_uri (url->file);
|
||||
char *resource_path = g_uri_unescape_string (uri + strlen ("resource://"), NULL);
|
||||
|
||||
pixbuf = gdk_pixbuf_new_from_resource (resource_path, &error);
|
||||
@ -89,7 +88,7 @@ gtk_css_image_url_parse (GtkCssImage *image,
|
||||
}
|
||||
else
|
||||
{
|
||||
input = g_file_read (file, NULL, &error);
|
||||
input = g_file_read (url->file, NULL, &error);
|
||||
if (input == NULL)
|
||||
{
|
||||
_gtk_css_parser_take_error (parser, error);
|
||||
@ -99,7 +98,6 @@ gtk_css_image_url_parse (GtkCssImage *image,
|
||||
pixbuf = gdk_pixbuf_new_from_stream (G_INPUT_STREAM (input), NULL, &error);
|
||||
g_object_unref (input);
|
||||
}
|
||||
g_object_unref (file);
|
||||
|
||||
if (pixbuf == NULL)
|
||||
{
|
||||
@ -158,6 +156,8 @@ gtk_css_image_url_dispose (GObject *object)
|
||||
{
|
||||
GtkCssImageUrl *url = GTK_CSS_IMAGE_URL (object);
|
||||
|
||||
g_clear_object (&url->file);
|
||||
|
||||
if (url->surface)
|
||||
{
|
||||
cairo_surface_destroy (url->surface);
|
||||
|
@ -38,6 +38,7 @@ struct _GtkCssImageUrl
|
||||
{
|
||||
GtkCssImage parent;
|
||||
|
||||
GFile *file; /* the file we're loading from */
|
||||
cairo_surface_t *surface; /* the surface we render - guaranteed to be an image surface */
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user