[gtk/wip/otte/symbolic-paintable: 3/5] gtk: Port icontheme to GtkSymbolicPaintable
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/otte/symbolic-paintable: 3/5] gtk: Port icontheme to GtkSymbolicPaintable
- Date: Sun, 29 Aug 2021 02:29:59 +0000 (UTC)
commit 2808f9c75b79025cefdd70170e5bc05a76e8ca2a
Author: Benjamin Otte <otte redhat com>
Date: Sat Aug 28 00:23:29 2021 +0200
gtk: Port icontheme to GtkSymbolicPaintable
gtk/gtkcssimageicontheme.c | 16 +++++-----
gtk/gtkcssimageiconthemeprivate.h | 5 +---
gtk/gtkicontheme.c | 63 +++++++++++++++------------------------
gtk/gtkiconthemeprivate.h | 8 -----
gtk/gtkrendericon.c | 21 ++++++-------
5 files changed, 44 insertions(+), 69 deletions(-)
---
diff --git a/gtk/gtkcssimageicontheme.c b/gtk/gtkcssimageicontheme.c
index 109b0abd83..b9096b1006 100644
--- a/gtk/gtkcssimageicontheme.c
+++ b/gtk/gtkcssimageicontheme.c
@@ -27,6 +27,7 @@
#include "gtksettingsprivate.h"
#include "gtksnapshot.h"
#include "gtkstyleproviderprivate.h"
+#include "gtksymbolicpaintable.h"
#include "gtkiconthemeprivate.h"
G_DEFINE_TYPE (GtkCssImageIconTheme, _gtk_css_image_icon_theme, GTK_TYPE_CSS_IMAGE)
@@ -88,13 +89,12 @@ gtk_css_image_icon_theme_snapshot (GtkCssImage *image,
gtk_snapshot_save (snapshot);
gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (x, y));
}
- gtk_icon_paintable_snapshot_with_colors (icon, snapshot,
- icon_width,
- icon_height,
- &icon_theme->color,
- &icon_theme->success,
- &icon_theme->warning,
- &icon_theme->error);
+ gtk_symbolic_paintable_snapshot_symbolic (GTK_SYMBOLIC_PAINTABLE (icon),
+ snapshot,
+ icon_width,
+ icon_height,
+ icon_theme->colors,
+ G_N_ELEMENTS (icon_theme->colors));
if (x != 0 || y != 0)
gtk_snapshot_restore (snapshot);
}
@@ -156,7 +156,7 @@ gtk_css_image_icon_theme_compute (GtkCssImage *image,
copy->icon_theme = gtk_icon_theme_get_for_display (display);
copy->serial = gtk_icon_theme_get_serial (copy->icon_theme);
copy->scale = gtk_style_provider_get_scale (provider);
- gtk_icon_theme_lookup_symbolic_colors (style, ©->color, ©->success, ©->warning, ©->error);
+ gtk_icon_theme_lookup_symbolic_colors (style, ©->colors[0], ©->colors[3], ©->colors[2],
©->colors[1]);
return GTK_CSS_IMAGE (copy);
}
diff --git a/gtk/gtkcssimageiconthemeprivate.h b/gtk/gtkcssimageiconthemeprivate.h
index 5b1540d413..b0b4d09794 100644
--- a/gtk/gtkcssimageiconthemeprivate.h
+++ b/gtk/gtkcssimageiconthemeprivate.h
@@ -40,10 +40,7 @@ struct _GtkCssImageIconTheme
GtkCssImage parent;
GtkIconTheme *icon_theme;
- GdkRGBA color;
- GdkRGBA success;
- GdkRGBA warning;
- GdkRGBA error;
+ GdkRGBA colors[4];
int serial;
int scale;
char *name;
diff --git a/gtk/gtkicontheme.c b/gtk/gtkicontheme.c
index 52a57bd69f..eb6b7285d3 100644
--- a/gtk/gtkicontheme.c
+++ b/gtk/gtkicontheme.c
@@ -45,11 +45,12 @@
#include "gtkiconcacheprivate.h"
#include "gtkintl.h"
#include "gtkmain.h"
+#include "gtkprivate.h"
#include "gtksettingsprivate.h"
+#include "gtksnapshot.h"
#include "gtkstylecontextprivate.h"
#include "gtkstyleproviderprivate.h"
-#include "gtkprivate.h"
-#include "gtksnapshot.h"
+#include "gtksymbolicpaintable.h"
#include "gtkwidgetprivate.h"
#include "gdkpixbufutilsprivate.h"
#include "gdk/gdktextureprivate.h"
@@ -3481,6 +3482,7 @@ theme_subdir_load (GtkIconTheme *self,
*/
static void icon_paintable_init (GdkPaintableInterface *iface);
+static void icon_symbolic_paintable_init (GtkSymbolicPaintableInterface *iface);
enum
{
@@ -3492,7 +3494,9 @@ enum
G_DEFINE_TYPE_WITH_CODE (GtkIconPaintable, gtk_icon_paintable, G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE (GDK_TYPE_PAINTABLE,
- icon_paintable_init))
+ icon_paintable_init)
+ G_IMPLEMENT_INTERFACE (GTK_TYPE_SYMBOLIC_PAINTABLE,
+ icon_symbolic_paintable_init))
static void
gtk_icon_paintable_init (GtkIconPaintable *icon)
@@ -3954,43 +3958,18 @@ icon_paintable_snapshot (GdkPaintable *paintable,
double width,
double height)
{
- GtkIconPaintable *icon = GTK_ICON_PAINTABLE (paintable);
-
- gtk_icon_paintable_snapshot_with_colors (icon, snapshot, width, height,
- NULL, NULL, NULL, NULL);
+ gtk_symbolic_paintable_snapshot_symbolic (GTK_SYMBOLIC_PAINTABLE (paintable), snapshot, width, height,
NULL, 0);
}
-/**
- * gtk_icon_paintable_snapshot_with_colors:
- * @icon: a `GtkIconPaintable`
- * @snapshot: a `GdkSnapshot` to snapshot to
- * @width: width to snapshot in
- * @height: height to snapshot in
- * @foreground_color: (nullable): a `GdkRGBA` representing the foreground color
- * of the icon or %NULL to use the default color.
- * @success_color: (nullable): a `GdkRGBA` representing the warning color
- * of the icon or %NULL to use the default color
- * @warning_color: (nullable): a `GdkRGBA` representing the warning color
- * of the icon or %NULL to use the default color
- * @error_color: (nullable): a `GdkRGBA` representing the error color
- * of the icon or %NULL to use the default color
- *
- * Snapshots the `GtkIconPaintable`.
- *
- * This is similar to the implementation of [method@Gdk.Paintable.snapshot],
- * but if the icon is symbolic it will be recolored with the specified colors
- * (which usually comes from the theme).
- */
-void
-gtk_icon_paintable_snapshot_with_colors (GtkIconPaintable *icon,
- GtkSnapshot *snapshot,
- double width,
- double height,
- const GdkRGBA *foreground_color,
- const GdkRGBA *success_color,
- const GdkRGBA *warning_color,
- const GdkRGBA *error_color)
+static void
+gtk_icon_paintable_snapshot_symbolic (GtkSymbolicPaintable *paintable,
+ GtkSnapshot *snapshot,
+ double width,
+ double height,
+ const GdkRGBA *colors,
+ gsize n_colors)
{
+ GtkIconPaintable *icon = GTK_ICON_PAINTABLE (paintable);
GdkTexture *texture;
int texture_width, texture_height;
double render_width;
@@ -4006,8 +3985,8 @@ gtk_icon_paintable_snapshot_with_colors (GtkIconPaintable *icon,
graphene_vec4_t offset;
init_color_matrix (&matrix, &offset,
- foreground_color, success_color,
- warning_color, error_color);
+ &colors[0], &colors[3],
+ &colors[2], &colors[1]);
gtk_snapshot_push_color_matrix (snapshot, &matrix, &offset);
}
@@ -4068,6 +4047,12 @@ icon_paintable_init (GdkPaintableInterface *iface)
iface->get_intrinsic_height = icon_paintable_get_intrinsic_height;
}
+static void
+icon_symbolic_paintable_init (GtkSymbolicPaintableInterface *iface)
+{
+ iface->snapshot_symbolic = gtk_icon_paintable_snapshot_symbolic;
+}
+
/**
* gtk_icon_paintable_new_for_file:
* @file: a `GFile`
diff --git a/gtk/gtkiconthemeprivate.h b/gtk/gtkiconthemeprivate.h
index 44225fb57a..bab1011d69 100644
--- a/gtk/gtkiconthemeprivate.h
+++ b/gtk/gtkiconthemeprivate.h
@@ -32,14 +32,6 @@ void gtk_icon_theme_lookup_symbolic_colors (GtkCssStyle *style,
GdkRGBA *success_out,
GdkRGBA *warning_out,
GdkRGBA *error_out);
-void gtk_icon_paintable_snapshot_with_colors (GtkIconPaintable *icon,
- GtkSnapshot *snapshot,
- double width,
- double height,
- const GdkRGBA *foreground_color,
- const GdkRGBA *success_color,
- const GdkRGBA *warning_color,
- const GdkRGBA *error_color);
int gtk_icon_theme_get_serial (GtkIconTheme *self);
diff --git a/gtk/gtkrendericon.c b/gtk/gtkrendericon.c
index a434c73010..2cd601aa34 100644
--- a/gtk/gtkrendericon.c
+++ b/gtk/gtkrendericon.c
@@ -28,6 +28,7 @@
#include "gtkcsstransformvalueprivate.h"
#include "gtkiconthemeprivate.h"
#include "gtksnapshot.h"
+#include "gtksymbolicpaintable.h"
#include "gsktransform.h"
#include <math.h>
@@ -97,8 +98,8 @@ gtk_css_style_snapshot_icon_paintable (GtkCssStyle *style,
{
GskTransform *transform;
gboolean has_shadow;
- gboolean is_icon_paintable;
- GdkRGBA fg, sc, wc, ec;
+ gboolean is_symbolic_paintable;
+ GdkRGBA colors[4];
g_return_if_fail (GTK_IS_CSS_STYLE (style));
g_return_if_fail (snapshot != NULL);
@@ -112,19 +113,19 @@ gtk_css_style_snapshot_icon_paintable (GtkCssStyle *style,
has_shadow = gtk_css_shadow_value_push_snapshot (style->icon->icon_shadow, snapshot);
- is_icon_paintable = GTK_IS_ICON_PAINTABLE (paintable);
- if (is_icon_paintable)
+ is_symbolic_paintable = GTK_IS_SYMBOLIC_PAINTABLE (paintable);
+ if (is_symbolic_paintable)
{
- gtk_icon_theme_lookup_symbolic_colors (style, &fg, &sc, &wc, &ec);
+ gtk_icon_theme_lookup_symbolic_colors (style, &colors[0], &colors[3], &colors[2], &colors[1]);
- if (fg.alpha == 0.0f)
+ if (gdk_rgba_is_clear (&colors[0]))
goto transparent;
}
if (transform == NULL)
{
- if (is_icon_paintable)
- gtk_icon_paintable_snapshot_with_colors (GTK_ICON_PAINTABLE (paintable), snapshot, width, height,
&fg, &sc, &wc, &ec);
+ if (is_symbolic_paintable)
+ gtk_symbolic_paintable_snapshot_symbolic (GTK_SYMBOLIC_PAINTABLE (paintable), snapshot, width,
height, colors, G_N_ELEMENTS (colors));
else
gdk_paintable_snapshot (paintable, snapshot, width, height);
}
@@ -137,8 +138,8 @@ gtk_css_style_snapshot_icon_paintable (GtkCssStyle *style,
gtk_snapshot_transform (snapshot, transform);
gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (- width / 2.0, - height / 2.0));
- if (is_icon_paintable)
- gtk_icon_paintable_snapshot_with_colors (GTK_ICON_PAINTABLE (paintable), snapshot, width, height,
&fg, &sc, &wc, &ec);
+ if (is_symbolic_paintable)
+ gtk_symbolic_paintable_snapshot_symbolic (GTK_SYMBOLIC_PAINTABLE (paintable), snapshot, width,
height, colors, G_N_ELEMENTS (colors));
else
gdk_paintable_snapshot (paintable, snapshot, width, height);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]