static void load_pixbuf_thread (GSimpleAsyncResult *result, GObject *object, GCancellable *cancellable) { GdkPixbuf *pixbuf; AsyncTextureLoadData *data; GError *error = NULL; data = g_async_result_get_user_data (G_ASYNC_RESULT (result)); g_assert (data != NULL); g_assert (data->file != NULL); pixbuf = impl_load_pixbuf_file (data->file, data->width, data->height, data->scale, &error); if (error != NULL) { g_simple_async_result_set_from_error (result, error); return; } if (pixbuf) g_simple_async_result_set_op_res_gpointer (result, g_object_ref (pixbuf), g_object_unref); }
static CoglTexture * st_texture_cache_load_uri_sync_to_cogl_texture (StTextureCache *cache, StTextureCachePolicy policy, const gchar *uri, int available_width, int available_height, GError **error) { CoglTexture *texdata; GdkPixbuf *pixbuf; char *key; int width = available_width == -1 ? -1 : available_width * cache->priv->scale; int height = available_height == -1 ? -1 : available_height * cache->priv->scale; key = g_strconcat (CACHE_PREFIX_URI, uri, NULL); texdata = g_hash_table_lookup (cache->priv->keyed_cache, key); if (texdata == NULL) { pixbuf = impl_load_pixbuf_file (uri, width, height, error); if (!pixbuf) goto out; texdata = pixbuf_to_cogl_texture (pixbuf); g_object_unref (pixbuf); if (!texdata) goto out; if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER) { cogl_object_ref (texdata); g_hash_table_insert (cache->priv->keyed_cache, g_strdup (key), texdata); } } else cogl_object_ref (texdata); ensure_monitor_for_uri (cache, uri); out: free (key); return texdata; }
static void load_pixbuf_thread (GSimpleAsyncResult *result, GObject *object, GCancellable *cancellable) { GdkPixbuf *pixbuf; AsyncIconLookupData *data; GError *error = NULL; data = g_object_get_data (G_OBJECT (result), "load_pixbuf_async"); g_assert (data != NULL); if (data->thumbnail) { const char *uri; const char *mimetype; if (data->recent_info) { uri = gtk_recent_info_get_uri (data->recent_info); mimetype = gtk_recent_info_get_mime_type (data->recent_info); } else { uri = data->uri; mimetype = data->mimetype; } pixbuf = impl_load_thumbnail (data->cache, uri, mimetype, data->width, &error); } else if (data->uri) pixbuf = impl_load_pixbuf_file (data->uri, data->width, data->height, &error); else if (data->icon) pixbuf = impl_load_pixbuf_gicon (data->icon, data->icon_info, data->width, &error); else g_assert_not_reached (); if (error != NULL) { g_simple_async_result_set_from_error (result, error); return; } if (pixbuf) g_simple_async_result_set_op_res_gpointer (result, g_object_ref (pixbuf), g_object_unref); }
static cairo_surface_t * st_texture_cache_load_uri_sync_to_cairo_surface (StTextureCache *cache, StTextureCachePolicy policy, const gchar *uri, int available_width, int available_height, GError **error) { cairo_surface_t *surface; GdkPixbuf *pixbuf; char *key; int width = available_width == -1 ? -1 : available_width * cache->priv->scale; int height = available_height == -1 ? -1 : available_height * cache->priv->scale; key = g_strconcat (CACHE_PREFIX_URI_FOR_CAIRO, uri, NULL); surface = g_hash_table_lookup (cache->priv->keyed_surface_cache, key); if (surface == NULL) { pixbuf = impl_load_pixbuf_file (uri, width, height, error); if (!pixbuf) goto out; surface = pixbuf_to_cairo_surface (pixbuf); g_object_unref (pixbuf); if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER) { cairo_surface_reference (surface); g_hash_table_insert (cache->priv->keyed_surface_cache, g_strdup (key), surface); } } else cairo_surface_reference (surface); ensure_monitor_for_uri (cache, uri); out: free (key); return surface; }
static cairo_surface_t * st_texture_cache_load_file_sync_to_cairo_surface (StTextureCache *cache, StTextureCachePolicy policy, GFile *file, int available_width, int available_height, int scale, GError **error) { cairo_surface_t *surface; GdkPixbuf *pixbuf; char *key; key = g_strdup_printf (CACHE_PREFIX_FILE_FOR_CAIRO "%u", g_file_hash (file)); surface = g_hash_table_lookup (cache->priv->keyed_cache, key); if (surface == NULL) { pixbuf = impl_load_pixbuf_file (file, available_width, available_height, scale, error); if (!pixbuf) goto out; surface = pixbuf_to_cairo_surface (pixbuf); g_object_unref (pixbuf); if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER) { cairo_surface_reference (surface); g_hash_table_insert (cache->priv->keyed_cache, g_strdup (key), surface); } } else cairo_surface_reference (surface); ensure_monitor_for_file (cache, file); out: g_free (key); return surface; }
static CoglTexture * st_texture_cache_load_file_sync_to_cogl_texture (StTextureCache *cache, StTextureCachePolicy policy, GFile *file, int available_width, int available_height, int scale, GError **error) { CoglTexture *texdata; GdkPixbuf *pixbuf; char *key; key = g_strdup_printf (CACHE_PREFIX_FILE "%u", g_file_hash (file)); texdata = g_hash_table_lookup (cache->priv->keyed_cache, key); if (texdata == NULL) { pixbuf = impl_load_pixbuf_file (file, available_width, available_height, scale, error); if (!pixbuf) goto out; texdata = pixbuf_to_cogl_texture (pixbuf); g_object_unref (pixbuf); if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER) { cogl_object_ref (texdata); g_hash_table_insert (cache->priv->keyed_cache, g_strdup (key), texdata); } } else cogl_object_ref (texdata); ensure_monitor_for_file (cache, file); out: g_free (key); return texdata; }
static void load_pixbuf_thread (GTask *result, gpointer source, gpointer task_data, GCancellable *cancellable) { GdkPixbuf *pixbuf; AsyncTextureLoadData *data = task_data; GError *error = NULL; g_assert (data != NULL); g_assert (data->file != NULL); pixbuf = impl_load_pixbuf_file (data->file, data->width, data->height, data->scale, &error); if (error != NULL) g_task_return_error (result, error); else if (pixbuf) g_task_return_pointer (result, g_object_ref (pixbuf), g_object_unref); g_clear_object (&pixbuf); }
static CoglHandle st_texture_cache_load_uri_sync_to_cogl_texture (StTextureCache *cache, StTextureCachePolicy policy, const gchar *uri, int available_width, int available_height, GError **error) { CoglHandle texdata; GdkPixbuf *pixbuf; char *key; key = g_strconcat (CACHE_PREFIX_URI, uri, NULL); texdata = g_hash_table_lookup (cache->priv->keyed_cache, key); if (texdata == NULL) { pixbuf = impl_load_pixbuf_file (uri, available_width, available_height, error); if (!pixbuf) goto out; texdata = pixbuf_to_cogl_handle (pixbuf, FALSE); g_object_unref (pixbuf); if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER) { cogl_handle_ref (texdata); g_hash_table_insert (cache->priv->keyed_cache, g_strdup (key), texdata); } } else cogl_handle_ref (texdata); out: g_free (key); return texdata; }