[gtk/wip/baedert/icontheme2] icontheme: Return paintables from more API
- From: Timm Bäder <baedert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/baedert/icontheme2] icontheme: Return paintables from more API
- Date: Fri, 30 Aug 2019 20:11:10 +0000 (UTC)
commit 3a3d0dd1a910d474851ea23c97776c1c167cba04
Author: Timm Bäder <mail baedert org>
Date: Fri Aug 30 21:26:21 2019 +0200
icontheme: Return paintables from more API
demos/gtk-demo/foreigndrawing.c | 9 +---
demos/icon-browser/iconbrowserwin.c | 5 +-
gtk/gtkicontheme.c | 91 +++++++++++++++++++++++++------------
gtk/gtkicontheme.h | 60 ++++++++++++------------
tests/testicontheme.c | 12 ++---
testsuite/gtk/icontheme.c | 29 ++++++------
6 files changed, 120 insertions(+), 86 deletions(-)
---
diff --git a/demos/gtk-demo/foreigndrawing.c b/demos/gtk-demo/foreigndrawing.c
index 3f662fde76..98384f19ff 100644
--- a/demos/gtk-demo/foreigndrawing.c
+++ b/demos/gtk-demo/foreigndrawing.c
@@ -829,7 +829,6 @@ draw_spinbutton (GtkWidget *widget,
GtkStyleContext *down_context;
GtkIconTheme *icon_theme;
GtkIconInfo *icon_info;
- GdkPixbuf *pixbuf;
GdkTexture *texture;
gint icon_width, icon_height, icon_size;
gint button_width;
@@ -857,26 +856,22 @@ draw_spinbutton (GtkWidget *widget,
"min-width", &icon_width, "min-height", &icon_height, NULL);
icon_size = MIN (icon_width, icon_height);
icon_info = gtk_icon_theme_lookup_icon (icon_theme, "list-add-symbolic", icon_size, 0);
- pixbuf = gtk_icon_info_load_symbolic_for_context (icon_info, up_context, NULL, NULL);
- texture = gdk_texture_new_for_pixbuf (pixbuf);
+ texture = GDK_TEXTURE (gtk_icon_info_load_symbolic_for_context (icon_info, up_context, NULL, NULL));
g_object_unref (icon_info);
draw_style_common (up_context, cr, x + width - button_width, y, button_width, *height,
&contents_x, &contents_y, &contents_width, &contents_height);
gtk_render_icon (up_context, cr, texture, contents_x, contents_y + (contents_height - icon_size) / 2);
- g_object_unref (pixbuf);
g_object_unref (texture);
gtk_style_context_get (down_context,
"min-width", &icon_width, "min-height", &icon_height, NULL);
icon_size = MIN (icon_width, icon_height);
icon_info = gtk_icon_theme_lookup_icon (icon_theme, "list-remove-symbolic", icon_size, 0);
- pixbuf = gtk_icon_info_load_symbolic_for_context (icon_info, down_context, NULL, NULL);
- texture = gdk_texture_new_for_pixbuf (pixbuf);
+ texture = GDK_TEXTURE (gtk_icon_info_load_symbolic_for_context (icon_info, down_context, NULL, NULL));
g_object_unref (icon_info);
draw_style_common (down_context, cr, x + width - 2 * button_width, y, button_width, *height,
&contents_x, &contents_y, &contents_width, &contents_height);
gtk_render_icon (down_context, cr, texture, contents_x, contents_y + (contents_height - icon_size) / 2);
- g_object_unref (pixbuf);
g_object_unref (texture);
g_object_unref (down_context);
diff --git a/demos/icon-browser/iconbrowserwin.c b/demos/icon-browser/iconbrowserwin.c
index da795cc112..593c8cf917 100644
--- a/demos/icon-browser/iconbrowserwin.c
+++ b/demos/icon-browser/iconbrowserwin.c
@@ -81,11 +81,14 @@ get_icon (GtkWidget *image, const gchar *name, gint size)
{
GtkIconInfo *info;
GtkStyleContext *context;
+ GdkTexture *texture;
GdkPixbuf *pixbuf;
context = gtk_widget_get_style_context (image);
info = gtk_icon_theme_lookup_icon (gtk_icon_theme_get_default (), name, size, 0);
- pixbuf = gtk_icon_info_load_symbolic_for_context (info, context, NULL, NULL);
+ texture = GDK_TEXTURE (gtk_icon_info_load_symbolic_for_context (info, context, NULL, NULL));
+ pixbuf = gdk_pixbuf_get_from_texture (texture);
+ g_object_unref (texture);
g_object_unref (info);
return pixbuf;
diff --git a/gtk/gtkicontheme.c b/gtk/gtkicontheme.c
index 46fd37ba84..4695dfdfb8 100644
--- a/gtk/gtkicontheme.c
+++ b/gtk/gtkicontheme.c
@@ -3942,13 +3942,14 @@ gtk_icon_info_load_icon_async (GtkIconInfo *icon_info,
* not modify the icon. Use g_object_unref() to release your reference
* to the icon.
*/
-GdkPixbuf *
+GdkPaintable *
gtk_icon_info_load_icon_finish (GtkIconInfo *icon_info,
GAsyncResult *result,
GError **error)
{
GTask *task = G_TASK (result);
GtkIconInfo *dup;
+ GdkTexture *texture;
g_return_val_if_fail (g_task_is_valid (result, icon_info), NULL);
@@ -3974,7 +3975,12 @@ gtk_icon_info_load_icon_finish (GtkIconInfo *icon_info,
g_assert (icon_info_get_pixbuf_ready (icon_info));
/* This is now guaranteed to not block */
- return gtk_icon_info_load_icon (icon_info, error);
+ texture = gtk_icon_info_load_texture (icon_info, error);
+
+ if (texture)
+ return GDK_PAINTABLE (texture);
+
+ return NULL;
}
static void
@@ -4382,7 +4388,7 @@ gtk_icon_info_load_symbolic_internal (GtkIconInfo *icon_info,
*
* Returns: (transfer full): a #GdkPixbuf representing the loaded icon
*/
-GdkPixbuf *
+GdkPaintable *
gtk_icon_info_load_symbolic (GtkIconInfo *icon_info,
const GdkRGBA *fg,
const GdkRGBA *success_color,
@@ -4391,6 +4397,7 @@ gtk_icon_info_load_symbolic (GtkIconInfo *icon_info,
gboolean *was_symbolic,
GError **error)
{
+ GdkPixbuf *pixbuf;
gboolean is_symbolic;
g_return_val_if_fail (icon_info != NULL, NULL);
@@ -4402,13 +4409,23 @@ gtk_icon_info_load_symbolic (GtkIconInfo *icon_info,
*was_symbolic = is_symbolic;
if (!is_symbolic)
- return gtk_icon_info_load_icon (icon_info, error);
+ return (GdkPaintable *)gtk_icon_info_load_texture (icon_info, error);
+
+ pixbuf = gtk_icon_info_load_symbolic_internal (icon_info,
+ fg, success_color,
+ warning_color, error_color,
+ TRUE,
+ error);
- return gtk_icon_info_load_symbolic_internal (icon_info,
- fg, success_color,
- warning_color, error_color,
- TRUE,
- error);
+ if (pixbuf)
+ {
+ GdkTexture *texture = gdk_texture_new_for_pixbuf (pixbuf);
+ g_object_unref (pixbuf);
+
+ return GDK_PAINTABLE (texture);
+ }
+
+ return NULL;
}
void
@@ -4467,7 +4484,7 @@ gtk_icon_theme_lookup_symbolic_colors (GtkCssStyle *style,
*
* Returns: (transfer full): a #GdkPixbuf representing the loaded icon
*/
-GdkPixbuf *
+GdkPaintable *
gtk_icon_info_load_symbolic_for_context (GtkIconInfo *icon_info,
GtkStyleContext *context,
gboolean *was_symbolic,
@@ -4478,6 +4495,7 @@ gtk_icon_info_load_symbolic_for_context (GtkIconInfo *icon_info,
GdkRGBA warning_color;
GdkRGBA error_color;
gboolean is_symbolic;
+ GdkPixbuf *pixbuf;
g_return_val_if_fail (icon_info != NULL, NULL);
g_return_val_if_fail (context != NULL, NULL);
@@ -4488,17 +4506,27 @@ gtk_icon_info_load_symbolic_for_context (GtkIconInfo *icon_info,
*was_symbolic = is_symbolic;
if (!is_symbolic)
- return gtk_icon_info_load_icon (icon_info, error);
+ return (GdkPaintable *)gtk_icon_info_load_texture (icon_info, error);
gtk_icon_theme_lookup_symbolic_colors (gtk_style_context_lookup_style (context),
&fg, &success_color,
&warning_color, &error_color);
- return gtk_icon_info_load_symbolic_internal (icon_info,
- &fg, &success_color,
- &warning_color, &error_color,
- TRUE,
- error);
+ pixbuf = gtk_icon_info_load_symbolic_internal (icon_info,
+ &fg, &success_color,
+ &warning_color, &error_color,
+ TRUE,
+ error);
+
+ if (pixbuf)
+ {
+ GdkTexture *texture = gdk_texture_new_for_pixbuf (pixbuf);
+ g_object_unref (pixbuf);
+
+ return GDK_PAINTABLE (texture);
+ }
+
+ return NULL;
}
typedef struct {
@@ -4530,13 +4558,13 @@ async_load_no_symbolic_cb (GObject *source_object,
GtkIconInfo *icon_info = GTK_ICON_INFO (source_object);
GTask *task = user_data;
GError *error = NULL;
- GdkPixbuf *pixbuf;
+ GdkPaintable *paintable;
- pixbuf = gtk_icon_info_load_icon_finish (icon_info, res, &error);
- if (pixbuf == NULL)
+ paintable = gtk_icon_info_load_icon_finish (icon_info, res, &error);
+ if (paintable == NULL)
g_task_return_error (task, error);
else
- g_task_return_pointer (task, pixbuf, g_object_unref);
+ g_task_return_pointer (task, paintable, g_object_unref);
g_object_unref (task);
}
@@ -4669,12 +4697,11 @@ gtk_icon_info_load_symbolic_async (GtkIconInfo *icon_info,
*
* Finishes an async icon load, see gtk_icon_info_load_symbolic_async().
*
- * Returns: (transfer full): the rendered icon; this may be a newly
- * created icon or a new reference to an internal icon, so you must
- * not modify the icon. Use g_object_unref() to release your reference
- * to the icon.
+ * Returns: (transfer full): the rendered icon;
+ * Use g_object_unref() to release your reference
+ * to the icon.
*/
-GdkPixbuf *
+GdkPaintable *
gtk_icon_info_load_symbolic_finish (GtkIconInfo *icon_info,
GAsyncResult *result,
gboolean *was_symbolic,
@@ -4684,6 +4711,7 @@ gtk_icon_info_load_symbolic_finish (GtkIconInfo *icon_info,
AsyncSymbolicData *data = g_task_get_task_data (task);
SymbolicPixbufCache *symbolic_cache;
GdkPixbuf *pixbuf;
+ GdkTexture *texture;
if (was_symbolic)
*was_symbolic = data->is_symbolic;
@@ -4713,10 +4741,17 @@ gtk_icon_info_load_symbolic_finish (GtkIconInfo *icon_info,
g_object_unref (pixbuf);
- return symbolic_cache_get_proxy (symbolic_cache, icon_info);
+ pixbuf = symbolic_cache_get_proxy (symbolic_cache, icon_info);
}
+ else
+ {
+ pixbuf = g_task_propagate_pointer (task, error);
+ }
+
+ texture = gdk_texture_new_for_pixbuf (pixbuf);
+ g_object_unref (pixbuf);
- return g_task_propagate_pointer (task, error);
+ return GDK_PAINTABLE (texture);
}
/**
@@ -4777,7 +4812,7 @@ gtk_icon_info_load_symbolic_for_context_async (GtkIconInfo *icon_info,
* not modify the icon. Use g_object_unref() to release your reference
* to the icon.
*/
-GdkPixbuf *
+GdkPaintable *
gtk_icon_info_load_symbolic_for_context_finish (GtkIconInfo *icon_info,
GAsyncResult *result,
gboolean *was_symbolic,
diff --git a/gtk/gtkicontheme.h b/gtk/gtkicontheme.h
index bf4588ff2b..ee55cc120c 100644
--- a/gtk/gtkicontheme.h
+++ b/gtk/gtkicontheme.h
@@ -230,15 +230,15 @@ GdkTexture * gtk_icon_info_load_texture (GtkIconInfo *icon_info
GDK_AVAILABLE_IN_ALL
void gtk_icon_info_load_icon_async (GtkIconInfo *icon_info,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
GDK_AVAILABLE_IN_ALL
-GdkPixbuf * gtk_icon_info_load_icon_finish (GtkIconInfo *icon_info,
- GAsyncResult *res,
- GError **error);
+GdkPaintable * gtk_icon_info_load_icon_finish (GtkIconInfo *icon_info,
+ GAsyncResult *res,
+ GError **error);
GDK_AVAILABLE_IN_ALL
-GdkPixbuf * gtk_icon_info_load_symbolic (GtkIconInfo *icon_info,
+GdkPaintable * gtk_icon_info_load_symbolic (GtkIconInfo *icon_info,
const GdkRGBA *fg,
const GdkRGBA *success_color,
const GdkRGBA *warning_color,
@@ -247,34 +247,34 @@ GdkPixbuf * gtk_icon_info_load_symbolic (GtkIconInfo *icon_info
GError **error);
GDK_AVAILABLE_IN_ALL
void gtk_icon_info_load_symbolic_async (GtkIconInfo *icon_info,
- const GdkRGBA *fg,
- const GdkRGBA *success_color,
- const GdkRGBA *warning_color,
- const GdkRGBA *error_color,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
-GDK_AVAILABLE_IN_ALL
-GdkPixbuf * gtk_icon_info_load_symbolic_finish (GtkIconInfo *icon_info,
- GAsyncResult *res,
- gboolean *was_symbolic,
- GError **error);
-GDK_AVAILABLE_IN_ALL
-GdkPixbuf * gtk_icon_info_load_symbolic_for_context (GtkIconInfo *icon_info,
+ const GdkRGBA *fg,
+ const GdkRGBA *success_color,
+ const GdkRGBA *warning_color,
+ const GdkRGBA *error_color,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+GDK_AVAILABLE_IN_ALL
+GdkPaintable * gtk_icon_info_load_symbolic_finish (GtkIconInfo *icon_info,
+ GAsyncResult *res,
+ gboolean *was_symbolic,
+ GError **error);
+GDK_AVAILABLE_IN_ALL
+GdkPaintable * gtk_icon_info_load_symbolic_for_context (GtkIconInfo *icon_info,
GtkStyleContext *context,
gboolean *was_symbolic,
GError **error);
GDK_AVAILABLE_IN_ALL
-void gtk_icon_info_load_symbolic_for_context_async (GtkIconInfo *icon_info,
- GtkStyleContext *context,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
+void gtk_icon_info_load_symbolic_for_context_async (GtkIconInfo *icon_info,
+ GtkStyleContext *context,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
GDK_AVAILABLE_IN_ALL
-GdkPixbuf * gtk_icon_info_load_symbolic_for_context_finish (GtkIconInfo *icon_info,
- GAsyncResult *res,
- gboolean *was_symbolic,
- GError **error);
+GdkPaintable * gtk_icon_info_load_symbolic_for_context_finish (GtkIconInfo *icon_info,
+ GAsyncResult *res,
+ gboolean *was_symbolic,
+ GError **error);
G_END_DECLS
diff --git a/tests/testicontheme.c b/tests/testicontheme.c
index 44a9599aaf..96cf65c1ff 100644
--- a/tests/testicontheme.c
+++ b/tests/testicontheme.c
@@ -39,21 +39,21 @@ icon_loaded_cb (GObject *source_object,
GAsyncResult *res,
gpointer user_data)
{
- GdkPixbuf *pixbuf;
+ GdkPaintable *paintable;
GError *error;
error = NULL;
- pixbuf = gtk_icon_info_load_icon_finish (GTK_ICON_INFO (source_object),
- res, &error);
+ paintable = gtk_icon_info_load_icon_finish (GTK_ICON_INFO (source_object),
+ res, &error);
- if (pixbuf == NULL)
+ if (paintable == NULL)
{
g_print ("%s\n", error->message);
exit (1);
}
- gtk_image_set_from_pixbuf (GTK_IMAGE (user_data), pixbuf);
- g_object_unref (pixbuf);
+ gtk_image_set_from_paintable (GTK_IMAGE (user_data), paintable);
+ g_object_unref (paintable);
}
diff --git a/testsuite/gtk/icontheme.c b/testsuite/gtk/icontheme.c
index 21e482477f..a2d091d56e 100644
--- a/testsuite/gtk/icontheme.c
+++ b/testsuite/gtk/icontheme.c
@@ -598,12 +598,12 @@ load_icon (GObject *source,
{
GtkIconInfo *info = (GtkIconInfo *)source;
GError *error = NULL;
- GdkPixbuf *pixbuf;
+ GdkPaintable *paintable;
- pixbuf = gtk_icon_info_load_icon_finish (info, res, &error);
- g_assert (pixbuf != NULL);
+ paintable = gtk_icon_info_load_icon_finish (info, res, &error);
+ g_assert (paintable != NULL);
g_assert_no_error (error);
- g_object_unref (pixbuf);
+ g_object_unref (paintable);
loaded++;
}
@@ -616,12 +616,12 @@ load_symbolic (GObject *source,
GtkIconInfo *info = (GtkIconInfo *)source;
GError *error = NULL;
gboolean symbolic;
- GdkPixbuf *pixbuf;
+ GdkPaintable *paintable;
- pixbuf = gtk_icon_info_load_symbolic_finish (info, res, &symbolic, &error);
- g_assert (pixbuf != NULL);
+ paintable = gtk_icon_info_load_symbolic_finish (info, res, &symbolic, &error);
+ g_assert (paintable != NULL);
g_assert_no_error (error);
- g_object_unref (pixbuf);
+ g_object_unref (paintable);
loaded++;
}
@@ -711,6 +711,7 @@ test_nonsquare_symbolic (void)
GdkRGBA black = { 0.0, 0.0, 0.0, 1.0 };
gboolean was_symbolic = FALSE;
GError *error = NULL;
+ GdkTexture *texture;
gchar *path = g_build_filename (g_test_get_dir (G_TEST_DIST),
"icons",
"scalable",
@@ -735,20 +736,20 @@ test_nonsquare_symbolic (void)
g_assert_nonnull (info);
g_object_unref (pixbuf);
- pixbuf = gtk_icon_info_load_symbolic (info, &black, NULL, NULL, NULL,
- &was_symbolic, &error);
+ texture = GDK_TEXTURE (gtk_icon_info_load_symbolic (info, &black, NULL, NULL, NULL,
+ &was_symbolic, &error));
/* we are loaded successfully */
g_assert_no_error (error);
- g_assert_nonnull (pixbuf);
+ g_assert_nonnull (texture);
g_assert_true (was_symbolic);
/* the original dimensions have been preserved */
- g_assert_cmpint (gdk_pixbuf_get_width (pixbuf), ==, width);
- g_assert_cmpint (gdk_pixbuf_get_height (pixbuf), ==, height);
+ g_assert_cmpint (gdk_texture_get_width (texture), ==, width);
+ g_assert_cmpint (gdk_texture_get_height (texture), ==, height);
g_free (path);
- g_object_unref (pixbuf);
+ g_object_unref (texture);
g_object_unref (file);
g_object_unref (icon);
g_object_unref (info);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]