From 7262faed166f8187ad5cf7ee95cea61f641e1ed7 Mon Sep 17 00:00:00 2001 From: Jehan Date: Wed, 18 Jun 2025 04:57:38 +0200 Subject: [PATCH] app, pdb: allow rendering font previews with theme colors. This also depends on the same settings to render brushes with theme colors, because this is data, not user interface. Therefore following theme colors is not necessarily what creators would expect. --- app/core/gimpbrush.c | 6 +- app/core/gimpbuffer.c | 12 +- app/core/gimpcurve.c | 6 +- app/core/gimpdrawable-preview.c | 6 +- app/core/gimpdrawable-preview.h | 6 +- app/core/gimpgradient.c | 6 +- app/core/gimpimage-preview.c | 6 +- app/core/gimpimage-preview.h | 6 +- app/core/gimpimagefile.c | 8 +- app/core/gimpimageproxy.c | 12 +- app/core/gimppalette.c | 6 +- app/core/gimppattern.c | 6 +- app/core/gimpundo.c | 8 +- app/core/gimpviewable.c | 144 ++++++++++++++---- app/core/gimpviewable.h | 24 ++- app/dialogs/metadata-rotation-import-dialog.c | 2 +- app/dialogs/resize-dialog.c | 2 +- app/pdb/drawable-cmds.c | 2 +- app/pdb/image-cmds.c | 2 +- app/text/gimpfont.c | 42 ++++- app/vectors/gimppath-preview.c | 3 +- app/vectors/gimppath-preview.h | 3 +- app/widgets/gimpclipboard.c | 4 +- app/widgets/gimpcontainericonview.c | 18 ++- app/widgets/gimpcontainertreeview.c | 2 +- app/widgets/gimpfontfactoryview.c | 1 + app/widgets/gimpview.c | 2 +- app/widgets/gimpviewrenderer-frame.c | 4 +- app/widgets/gimpviewrenderer.c | 51 ++++++- app/widgets/gimpviewrendererbrush.c | 23 ++- app/widgets/gimpviewrendererbuffer.c | 4 +- app/widgets/gimpviewrendererimage.c | 4 +- pdb/groups/drawable.pdb | 2 +- pdb/groups/image.pdb | 2 +- 34 files changed, 329 insertions(+), 106 deletions(-) diff --git a/app/core/gimpbrush.c b/app/core/gimpbrush.c index fc72fc3ba8..24218daf88 100644 --- a/app/core/gimpbrush.c +++ b/app/core/gimpbrush.c @@ -80,7 +80,8 @@ static GimpTempBuf * gimp_brush_get_new_preview (GimpViewable *vie GimpContext *context, gint width, gint height, - GeglColor *color); + GeglColor *color, + GeglColor *background); static gchar * gimp_brush_get_description (GimpViewable *viewable, gchar **tooltip); @@ -274,7 +275,8 @@ gimp_brush_get_new_preview (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color) + GeglColor *color, + GeglColor *background) { GimpBrush *brush = GIMP_BRUSH (viewable); const GimpTempBuf *mask_buf = brush->priv->mask; diff --git a/app/core/gimpbuffer.c b/app/core/gimpbuffer.c index eb25f8b306..20057baaad 100644 --- a/app/core/gimpbuffer.c +++ b/app/core/gimpbuffer.c @@ -62,12 +62,14 @@ static GimpTempBuf * gimp_buffer_get_new_preview (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color); + GeglColor *color, + GeglColor *background); static GdkPixbuf * gimp_buffer_get_new_pixbuf (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color); + GeglColor *color, + GeglColor *background); static gchar * gimp_buffer_get_description (GimpViewable *viewable, gchar **tooltip); @@ -227,7 +229,8 @@ gimp_buffer_get_new_preview (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color G_GNUC_UNUSED) + GeglColor *color G_GNUC_UNUSED, + GeglColor *background G_GNUC_UNUSED) { GimpBuffer *buffer = GIMP_BUFFER (viewable); const Babl *format = gimp_buffer_get_format (buffer); @@ -262,7 +265,8 @@ gimp_buffer_get_new_pixbuf (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color G_GNUC_UNUSED) + GeglColor *color G_GNUC_UNUSED, + GeglColor *background G_GNUC_UNUSED) { GimpBuffer *buffer = GIMP_BUFFER (viewable); GdkPixbuf *pixbuf; diff --git a/app/core/gimpcurve.c b/app/core/gimpcurve.c index bca8a30b64..1e1647e0b9 100644 --- a/app/core/gimpcurve.c +++ b/app/core/gimpcurve.c @@ -87,7 +87,8 @@ static GimpTempBuf * gimp_curve_get_new_preview (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color); + GeglColor *color, + GeglColor *background); static gchar * gimp_curve_get_description (GimpViewable *viewable, gchar **tooltip); @@ -523,7 +524,8 @@ gimp_curve_get_new_preview (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color G_GNUC_UNUSED) + GeglColor *color G_GNUC_UNUSED, + GeglColor *background G_GNUC_UNUSED) { return NULL; } diff --git a/app/core/gimpdrawable-preview.c b/app/core/gimpdrawable-preview.c index a00db1fcb3..2e1d7ca585 100644 --- a/app/core/gimpdrawable-preview.c +++ b/app/core/gimpdrawable-preview.c @@ -113,7 +113,8 @@ gimp_drawable_get_new_preview (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color G_GNUC_UNUSED) + GeglColor *color G_GNUC_UNUSED, + GeglColor *background G_GNUC_UNUSED) { GimpItem *item = GIMP_ITEM (viewable); GimpImage *image = gimp_item_get_image (item); @@ -134,7 +135,8 @@ gimp_drawable_get_new_pixbuf (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color G_GNUC_UNUSED) + GeglColor *color G_GNUC_UNUSED, + GeglColor *background G_GNUC_UNUSED) { GimpItem *item = GIMP_ITEM (viewable); GimpImage *image = gimp_item_get_image (item); diff --git a/app/core/gimpdrawable-preview.h b/app/core/gimpdrawable-preview.h index de3b2de193..3b95dee34a 100644 --- a/app/core/gimpdrawable-preview.h +++ b/app/core/gimpdrawable-preview.h @@ -26,12 +26,14 @@ GimpTempBuf * gimp_drawable_get_new_preview (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color); + GeglColor *color, + GeglColor *background); GdkPixbuf * gimp_drawable_get_new_pixbuf (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color); + GeglColor *color, + GeglColor *background); /* * normal functions (no virtuals) diff --git a/app/core/gimpgradient.c b/app/core/gimpgradient.c index 624af4b460..88009032ba 100644 --- a/app/core/gimpgradient.c +++ b/app/core/gimpgradient.c @@ -61,7 +61,8 @@ static GimpTempBuf * gimp_gradient_get_new_preview (GimpViewable *viewa GimpContext *context, gint width, gint height, - GeglColor *color); + GeglColor *color, + GeglColor *background); static const gchar * gimp_gradient_get_extension (GimpData *data); static void gimp_gradient_copy (GimpData *data, @@ -215,7 +216,8 @@ gimp_gradient_get_new_preview (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color G_GNUC_UNUSED) + GeglColor *color G_GNUC_UNUSED, + GeglColor *background G_GNUC_UNUSED) { GimpGradient *gradient = GIMP_GRADIENT (viewable); GimpGradientSegment *seg = NULL; diff --git a/app/core/gimpimage-preview.c b/app/core/gimpimage-preview.c index 809eb84b9e..0eb5d26ad5 100644 --- a/app/core/gimpimage-preview.c +++ b/app/core/gimpimage-preview.c @@ -122,7 +122,8 @@ gimp_image_get_new_preview (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color G_GNUC_UNUSED) + GeglColor *color G_GNUC_UNUSED, + GeglColor *background G_GNUC_UNUSED) { GimpImage *image = GIMP_IMAGE (viewable); const Babl *format; @@ -152,7 +153,8 @@ gimp_image_get_new_pixbuf (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color G_GNUC_UNUSED) + GeglColor *color G_GNUC_UNUSED, + GeglColor *background G_GNUC_UNUSED) { GimpImage *image = GIMP_IMAGE (viewable); GdkPixbuf *pixbuf; diff --git a/app/core/gimpimage-preview.h b/app/core/gimpimage-preview.h index 7c36365c4d..c5f2c35fd0 100644 --- a/app/core/gimpimage-preview.h +++ b/app/core/gimpimage-preview.h @@ -42,12 +42,14 @@ GimpTempBuf * gimp_image_get_new_preview (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color); + GeglColor *color, + GeglColor *background); GdkPixbuf * gimp_image_get_new_pixbuf (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color); + GeglColor *color, + GeglColor *background); #endif /* __GIMP_IMAGE_PREVIEW_H__ */ diff --git a/app/core/gimpimagefile.c b/app/core/gimpimagefile.c index 04aa04b873..d1128d1a0f 100644 --- a/app/core/gimpimagefile.c +++ b/app/core/gimpimagefile.c @@ -85,7 +85,8 @@ static GdkPixbuf * gimp_imagefile_get_new_pixbuf (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color); + GeglColor *color, + GeglColor *background); static gchar * gimp_imagefile_get_description (GimpViewable *viewable, gchar **tooltip); @@ -226,7 +227,8 @@ gimp_imagefile_get_new_pixbuf (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color G_GNUC_UNUSED) + GeglColor *color G_GNUC_UNUSED, + GeglColor *background G_GNUC_UNUSED) { GimpImagefile *imagefile = GIMP_IMAGEFILE (viewable); @@ -1063,7 +1065,7 @@ gimp_imagefile_save_thumb (GimpImagefile *imagefile, pixbuf = gimp_viewable_get_new_pixbuf (GIMP_VIEWABLE (image), /* random context, unused */ gimp_get_user_context (image->gimp), - width, height, NULL); + width, height, NULL, NULL); /* when layer previews are disabled, we won't get a pixbuf */ if (! pixbuf) diff --git a/app/core/gimpimageproxy.c b/app/core/gimpimageproxy.c index 7f159c8f58..329d2325c6 100644 --- a/app/core/gimpimageproxy.c +++ b/app/core/gimpimageproxy.c @@ -94,12 +94,14 @@ static GimpTempBuf * gimp_image_proxy_get_new_preview (GimpViewabl GimpContext *context, gint width, gint height, - GeglColor *color); + GeglColor *color, + GeglColor *background); static GdkPixbuf * gimp_image_proxy_get_new_pixbuf (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color); + GeglColor *color, + GeglColor *background); static gchar * gimp_image_proxy_get_description (GimpViewable *viewable, gchar **tooltip); @@ -376,7 +378,8 @@ gimp_image_proxy_get_new_preview (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color G_GNUC_UNUSED) + GeglColor *color G_GNUC_UNUSED, + GeglColor *background G_GNUC_UNUSED) { GimpImageProxy *image_proxy = GIMP_IMAGE_PROXY (viewable); GimpImage *image = image_proxy->priv->image; @@ -418,7 +421,8 @@ gimp_image_proxy_get_new_pixbuf (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color G_GNUC_UNUSED) + GeglColor *color G_GNUC_UNUSED, + GeglColor *background G_GNUC_UNUSED) { GimpImageProxy *image_proxy = GIMP_IMAGE_PROXY (viewable); GimpImage *image = image_proxy->priv->image; diff --git a/app/core/gimppalette.c b/app/core/gimppalette.c index e178fbd5a9..70017ab172 100644 --- a/app/core/gimppalette.c +++ b/app/core/gimppalette.c @@ -76,7 +76,8 @@ static GimpTempBuf * gimp_palette_get_new_preview (GimpViewable *vie GimpContext *context, gint width, gint height, - GeglColor *color); + GeglColor *color, + GeglColor *background); static gchar * gimp_palette_get_description (GimpViewable *viewable, gchar **tooltip); static const gchar * gimp_palette_get_extension (GimpData *data); @@ -241,7 +242,8 @@ gimp_palette_get_new_preview (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color G_GNUC_UNUSED) + GeglColor *color G_GNUC_UNUSED, + GeglColor *background G_GNUC_UNUSED) { GimpPalette *palette = GIMP_PALETTE (viewable); GimpTempBuf *temp_buf; diff --git a/app/core/gimppattern.c b/app/core/gimppattern.c index 076e6932b3..cab953f0ee 100644 --- a/app/core/gimppattern.c +++ b/app/core/gimppattern.c @@ -50,7 +50,8 @@ static GimpTempBuf * gimp_pattern_get_new_preview (GimpViewable *viewa GimpContext *context, gint width, gint height, - GeglColor *color); + GeglColor *color, + GeglColor *background); static gchar * gimp_pattern_get_description (GimpViewable *viewable, gchar **tooltip); @@ -143,7 +144,8 @@ gimp_pattern_get_new_preview (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color G_GNUC_UNUSED) + GeglColor *color G_GNUC_UNUSED, + GeglColor *background G_GNUC_UNUSED) { GimpPattern *pattern = GIMP_PATTERN (viewable); GimpTempBuf *temp_buf; diff --git a/app/core/gimpundo.c b/app/core/gimpundo.c index d04b578d50..a87e24cdfe 100644 --- a/app/core/gimpundo.c +++ b/app/core/gimpundo.c @@ -83,7 +83,8 @@ static GimpTempBuf * gimp_undo_get_new_preview (GimpViewable *viewabl GimpContext *context, gint width, gint height, - GeglColor *color); + GeglColor *color, + GeglColor *background); static void gimp_undo_real_pop (GimpUndo *undo, GimpUndoMode undo_mode, @@ -303,7 +304,8 @@ gimp_undo_get_new_preview (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color) + GeglColor *color G_GNUC_UNUSED, + GeglColor *background G_GNUC_UNUSED) { GimpUndo *undo = GIMP_UNDO (viewable); @@ -493,7 +495,7 @@ gimp_undo_create_preview_private (GimpUndo *undo, } undo->preview = gimp_viewable_get_new_preview (preview_viewable, context, - width, height, NULL); + width, height, NULL, NULL); gimp_viewable_invalidate_preview (GIMP_VIEWABLE (undo)); } diff --git a/app/core/gimpviewable.c b/app/core/gimpviewable.c index 5b267c738b..890cda9fea 100644 --- a/app/core/gimpviewable.c +++ b/app/core/gimpviewable.c @@ -74,6 +74,10 @@ struct _GimpViewablePrivate GimpTempBuf *preview_temp_buf; GdkPixbuf *preview_pixbuf; + GeglColor *preview_pixbuf_color; + GeglColor *preview_pixbuf_background; + GeglColor *preview_temp_buf_color; + GeglColor *preview_temp_buf_background; }; #define GET_PRIVATE(viewable) ((GimpViewablePrivate *) gimp_viewable_get_instance_private ((GimpViewable *) (viewable))) @@ -101,7 +105,8 @@ static GdkPixbuf * gimp_viewable_real_get_new_pixbuf (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color); + GeglColor *color, + GeglColor *background); static void gimp_viewable_real_get_preview_size (GimpViewable *viewable, gint size, gboolean popup, @@ -249,6 +254,10 @@ gimp_viewable_finalize (GObject *object) g_clear_object (&private->icon_pixbuf); g_clear_pointer (&private->preview_temp_buf, gimp_temp_buf_unref); g_clear_object (&private->preview_pixbuf); + g_clear_object (&private->preview_pixbuf_color); + g_clear_object (&private->preview_pixbuf_background); + g_clear_object (&private->preview_temp_buf_color); + g_clear_object (&private->preview_temp_buf_background); G_OBJECT_CLASS (parent_class)->finalize (object); } @@ -335,6 +344,10 @@ gimp_viewable_real_invalidate_preview (GimpViewable *viewable) g_clear_pointer (&private->preview_temp_buf, gimp_temp_buf_unref); g_clear_object (&private->preview_pixbuf); + g_clear_object (&private->preview_pixbuf_color); + g_clear_object (&private->preview_pixbuf_background); + g_clear_object (&private->preview_temp_buf_color); + g_clear_object (&private->preview_temp_buf_background); } static void @@ -404,13 +417,14 @@ gimp_viewable_real_get_new_pixbuf (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color) + GeglColor *color, + GeglColor *background) { GimpViewablePrivate *private = GET_PRIVATE (viewable); GdkPixbuf *pixbuf = NULL; GimpTempBuf *temp_buf; - temp_buf = gimp_viewable_get_preview (viewable, context, width, height, color); + temp_buf = gimp_viewable_get_preview (viewable, context, width, height, color, background); if (temp_buf) { @@ -831,6 +845,8 @@ gimp_viewable_get_popup_size (GimpViewable *viewable, * @height: desired height for the preview * @color: desired foreground color for the preview when the type of * @viewable support recolorization. + * @background: desired background color for the preview when the type + * of @viewable supports recolorization. * * Gets a preview for a viewable object, by running through a variety * of methods until it finds one that works. First, if an @@ -856,7 +872,8 @@ gimp_viewable_get_preview (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color) + GeglColor *color, + GeglColor *background) { GimpViewablePrivate *private = GET_PRIVATE (viewable); GimpViewableClass *viewable_class; @@ -866,6 +883,8 @@ gimp_viewable_get_preview (GimpViewable *viewable, g_return_val_if_fail (context == NULL || GIMP_IS_CONTEXT (context), NULL); g_return_val_if_fail (width > 0, NULL); g_return_val_if_fail (height > 0, NULL); + g_return_val_if_fail ((color == NULL && background == NULL) || + (color != NULL && background != NULL), NULL); if (G_UNLIKELY (context == NULL)) g_warning ("%s: context is NULL", G_STRFUNC); @@ -873,27 +892,58 @@ gimp_viewable_get_preview (GimpViewable *viewable, viewable_class = GIMP_VIEWABLE_GET_CLASS (viewable); if (viewable_class->get_preview) - temp_buf = viewable_class->get_preview (viewable, context, width, height, color); + temp_buf = viewable_class->get_preview (viewable, context, width, height, color, background); if (temp_buf) return temp_buf; - if (private->preview_temp_buf) + if (private->preview_temp_buf && + ((color == NULL && private->preview_temp_buf_color == NULL) || + (color != NULL && private->preview_temp_buf_color != NULL))) { if (gimp_temp_buf_get_width (private->preview_temp_buf) == width && gimp_temp_buf_get_height (private->preview_temp_buf) == height) { - return private->preview_temp_buf; - } + gboolean same_colors = TRUE; - g_clear_pointer (&private->preview_temp_buf, gimp_temp_buf_unref); + if (color != NULL) + { + gdouble r1, g1, b1, a1; + gdouble r2, g2, b2, a2; + + /* Don't use gimp_color_is_perceptually_identical(). Exact + * comparison is fine for this use case. + */ + gegl_color_get_rgba (color, &r1, &g1, &b1, &a1); + gegl_color_get_rgba (private->preview_temp_buf_color, &r2, &g2, &b2, &a2); + + same_colors = (r1 == r2 && g1 == g2 && b1 == b2 && a1 == a2); + + if (same_colors) + { + gegl_color_get_rgba (background, &r1, &g1, &b1, &a1); + gegl_color_get_rgba (private->preview_temp_buf_background, &r2, &g2, &b2, &a2); + + same_colors = (r1 == r2 && g1 == g2 && b1 == b2 && a1 == a2); + } + } + + if (same_colors) + return private->preview_temp_buf; + } } + g_clear_pointer (&private->preview_temp_buf, gimp_temp_buf_unref); + g_clear_object (&private->preview_temp_buf_color); + g_clear_object (&private->preview_temp_buf_background); + if (viewable_class->get_new_preview) temp_buf = viewable_class->get_new_preview (viewable, context, - width, height, color); + width, height, color, background); - private->preview_temp_buf = temp_buf; + private->preview_temp_buf = temp_buf; + private->preview_temp_buf_color = color ? gegl_color_duplicate (color) : NULL; + private->preview_temp_buf_background = background ? gegl_color_duplicate (background) : NULL; return temp_buf; } @@ -905,6 +955,8 @@ gimp_viewable_get_preview (GimpViewable *viewable, * @height: desired height for the preview * @color: desired foreground color for the preview when the type of * @viewable support recolorization. + * @background: desired background color for the preview when the type + * of @viewable supports recolorization. * * Gets a new preview for a viewable object. Similar to * gimp_viewable_get_preview(), except that it tries things in a @@ -920,7 +972,8 @@ gimp_viewable_get_new_preview (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color) + GeglColor *color, + GeglColor *background) { GimpViewableClass *viewable_class; GimpTempBuf *temp_buf = NULL; @@ -937,14 +990,14 @@ gimp_viewable_get_new_preview (GimpViewable *viewable, if (viewable_class->get_new_preview) temp_buf = viewable_class->get_new_preview (viewable, context, - width, height, color); + width, height, color, background); if (temp_buf) return temp_buf; if (viewable_class->get_preview) temp_buf = viewable_class->get_preview (viewable, context, - width, height, color); + width, height, color, background); if (temp_buf) return gimp_temp_buf_copy (temp_buf); @@ -997,7 +1050,9 @@ gimp_viewable_get_dummy_preview (GimpViewable *viewable, * @width: desired width for the preview * @height: desired height for the preview * @color: desired foreground color for the preview when the type of - * @viewable support recolorization. + * @viewable supports recolorization. + * @background: desired background color for the preview when the type + * of @viewable supports recolorization. * * Gets a preview for a viewable object, by running through a variety * of methods until it finds one that works. First, if an @@ -1017,7 +1072,8 @@ gimp_viewable_get_pixbuf (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color) + GeglColor *color, + GeglColor *background) { GimpViewablePrivate *private = GET_PRIVATE (viewable); GimpViewableClass *viewable_class; @@ -1027,6 +1083,8 @@ gimp_viewable_get_pixbuf (GimpViewable *viewable, g_return_val_if_fail (context == NULL || GIMP_IS_CONTEXT (context), NULL); g_return_val_if_fail (width > 0, NULL); g_return_val_if_fail (height > 0, NULL); + g_return_val_if_fail ((color == NULL && background == NULL) || + (color != NULL && background != NULL), NULL); if (G_UNLIKELY (context == NULL)) g_warning ("%s: context is NULL", G_STRFUNC); @@ -1034,26 +1092,57 @@ gimp_viewable_get_pixbuf (GimpViewable *viewable, viewable_class = GIMP_VIEWABLE_GET_CLASS (viewable); if (viewable_class->get_pixbuf) - pixbuf = viewable_class->get_pixbuf (viewable, context, width, height, color); + pixbuf = viewable_class->get_pixbuf (viewable, context, width, height, color, background); if (pixbuf) return pixbuf; - if (private->preview_pixbuf) + if (private->preview_pixbuf && + ((color == NULL && private->preview_pixbuf_color == NULL) || + (color != NULL && private->preview_pixbuf_color != NULL))) { if (gdk_pixbuf_get_width (private->preview_pixbuf) == width && gdk_pixbuf_get_height (private->preview_pixbuf) == height) { - return private->preview_pixbuf; - } + gboolean same_colors = TRUE; - g_clear_object (&private->preview_pixbuf); + if (color != NULL) + { + gdouble r1, g1, b1, a1; + gdouble r2, g2, b2, a2; + + /* Don't use gimp_color_is_perceptually_identical(). Exact + * comparison is fine for this use case. + */ + gegl_color_get_rgba (color, &r1, &g1, &b1, &a1); + gegl_color_get_rgba (private->preview_pixbuf_color, &r2, &g2, &b2, &a2); + + same_colors = (r1 == r2 && g1 == g2 && b1 == b2 && a1 == a2); + + if (same_colors) + { + gegl_color_get_rgba (background, &r1, &g1, &b1, &a1); + gegl_color_get_rgba (private->preview_pixbuf_background, &r2, &g2, &b2, &a2); + + same_colors = (r1 == r2 && g1 == g2 && b1 == b2 && a1 == a2); + } + } + + if (same_colors) + return private->preview_pixbuf; + } } - if (viewable_class->get_new_pixbuf) - pixbuf = viewable_class->get_new_pixbuf (viewable, context, width, height, color); + g_clear_object (&private->preview_pixbuf); + g_clear_object (&private->preview_pixbuf_color); + g_clear_object (&private->preview_pixbuf_background); - private->preview_pixbuf = pixbuf; + if (viewable_class->get_new_pixbuf) + pixbuf = viewable_class->get_new_pixbuf (viewable, context, width, height, color, background); + + private->preview_pixbuf = pixbuf; + private->preview_pixbuf_color = color ? gegl_color_duplicate (color) : NULL; + private->preview_pixbuf_background = background ? gegl_color_duplicate (background) : NULL; return pixbuf; } @@ -1081,7 +1170,8 @@ gimp_viewable_get_new_pixbuf (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color) + GeglColor *color, + GeglColor *background) { GimpViewableClass *viewable_class; GdkPixbuf *pixbuf = NULL; @@ -1097,13 +1187,13 @@ gimp_viewable_get_new_pixbuf (GimpViewable *viewable, viewable_class = GIMP_VIEWABLE_GET_CLASS (viewable); if (viewable_class->get_new_pixbuf) - pixbuf = viewable_class->get_new_pixbuf (viewable, context, width, height, color); + pixbuf = viewable_class->get_new_pixbuf (viewable, context, width, height, color, background); if (pixbuf) return pixbuf; if (viewable_class->get_pixbuf) - pixbuf = viewable_class->get_pixbuf (viewable, context, width, height, color); + pixbuf = viewable_class->get_pixbuf (viewable, context, width, height, color, background); if (pixbuf) return gdk_pixbuf_copy (pixbuf); diff --git a/app/core/gimpviewable.h b/app/core/gimpviewable.h index 66d19feeb8..5d9bdef01c 100644 --- a/app/core/gimpviewable.h +++ b/app/core/gimpviewable.h @@ -80,22 +80,26 @@ struct _GimpViewableClass GimpContext *context, gint width, gint height, - GeglColor *fg_color); + GeglColor *fg_color, + GeglColor *background); GimpTempBuf * (* get_new_preview) (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *fg_color); + GeglColor *fg_color, + GeglColor *background); GdkPixbuf * (* get_pixbuf) (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *fg_color); + GeglColor *fg_color, + GeglColor *background); GdkPixbuf * (* get_new_pixbuf) (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *fg_color); + GeglColor *fg_color, + GeglColor *background); gchar * (* get_description) (GimpViewable *viewable, gchar **tooltip); @@ -149,12 +153,14 @@ GimpTempBuf * gimp_viewable_get_preview (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *fg_color); + GeglColor *fg_color, + GeglColor *bg_color); GimpTempBuf * gimp_viewable_get_new_preview (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *fg_color); + GeglColor *fg_color, + GeglColor *bg_color); GimpTempBuf * gimp_viewable_get_dummy_preview (GimpViewable *viewable, gint width, @@ -165,12 +171,14 @@ GdkPixbuf * gimp_viewable_get_pixbuf (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color); + GeglColor *color, + GeglColor *background); GdkPixbuf * gimp_viewable_get_new_pixbuf (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color); + GeglColor *color, + GeglColor *background); GdkPixbuf * gimp_viewable_get_dummy_pixbuf (GimpViewable *viewable, gint width, diff --git a/app/dialogs/metadata-rotation-import-dialog.c b/app/dialogs/metadata-rotation-import-dialog.c index dc50f30f2d..e2dae4161a 100644 --- a/app/dialogs/metadata-rotation-import-dialog.c +++ b/app/dialogs/metadata-rotation-import-dialog.c @@ -163,7 +163,7 @@ gimp_image_metadata_rotate_dialog (GimpImage *image, gimp_pickable_flush (GIMP_PICKABLE (image)); pixbuf = gimp_viewable_get_pixbuf (GIMP_VIEWABLE (image), context, - width, height, NULL); + width, height, NULL, NULL); if (pixbuf) { GdkPixbuf *rotated; diff --git a/app/dialogs/resize-dialog.c b/app/dialogs/resize-dialog.c index 40990ca070..f48a3d58a7 100644 --- a/app/dialogs/resize-dialog.c +++ b/app/dialogs/resize-dialog.c @@ -429,7 +429,7 @@ resize_dialog_new (GimpViewable *viewable, gimp_viewable_get_preview_size (viewable, 200, TRUE, TRUE, &width, &height); pixbuf = gimp_viewable_get_pixbuf (viewable, context, - width, height, NULL); + width, height, NULL, NULL); if (pixbuf) gimp_offset_area_set_pixbuf (GIMP_OFFSET_AREA (private->area), pixbuf); diff --git a/app/pdb/drawable-cmds.c b/app/pdb/drawable-cmds.c index bae6322a70..818d9717fc 100644 --- a/app/pdb/drawable-cmds.c +++ b/app/pdb/drawable-cmds.c @@ -980,7 +980,7 @@ drawable_thumbnail_invoker (GimpProcedure *procedure, if (image->gimp->config->layer_previews) buf = gimp_viewable_get_new_preview (GIMP_VIEWABLE (drawable), context, - width, height, NULL); + width, height, NULL, NULL); else buf = gimp_viewable_get_dummy_preview (GIMP_VIEWABLE (drawable), width, height, diff --git a/app/pdb/image-cmds.c b/app/pdb/image-cmds.c index 449c9fd53a..cb2c81a8fc 100644 --- a/app/pdb/image-cmds.c +++ b/app/pdb/image-cmds.c @@ -1849,7 +1849,7 @@ image_thumbnail_invoker (GimpProcedure *procedure, gimp_pickable_flush (GIMP_PICKABLE (image)); buf = gimp_viewable_get_new_preview (GIMP_VIEWABLE (image), context, - width, height, NULL); + width, height, NULL, NULL); if (buf) { diff --git a/app/text/gimpfont.c b/app/text/gimpfont.c index cc8d2876fc..77e69f2f33 100644 --- a/app/text/gimpfont.c +++ b/app/text/gimpfont.c @@ -134,7 +134,8 @@ static GimpTempBuf * gimp_font_get_new_preview (GimpViewable *viewab GimpContext *context, gint width, gint height, - GeglColor *color); + GeglColor *color, + GeglColor *background); static void gimp_font_config_iface_init (GimpConfigInterface *iface); static gboolean gimp_font_serialize (GimpConfig *config, @@ -712,7 +713,8 @@ gimp_font_get_new_preview (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color) + GeglColor *color, + GeglColor *background) { GimpFont *font = GIMP_FONT (viewable); PangoContext *pango_context; @@ -726,6 +728,7 @@ gimp_font_get_new_preview (GimpViewable *viewable, GimpTempBuf *temp_buf; cairo_t *cr; cairo_surface_t *surface; + gint stride; pango_context = gimp_font_factory_get_pango_context (GIMP_FONT_CLASS (g_type_class_peek (GIMP_TYPE_FONT))->font_factory); @@ -763,14 +766,26 @@ gimp_font_get_new_preview (GimpViewable *viewable, layout = g_object_ref (font->popup_layout); } - width = cairo_format_stride_for_width (CAIRO_FORMAT_A8, width); + stride = cairo_format_stride_for_width (CAIRO_FORMAT_ARGB32, width); - temp_buf = gimp_temp_buf_new (width, height, babl_format ("Y' u8")); - memset (gimp_temp_buf_get_data (temp_buf), 255, width * height); + temp_buf = gimp_temp_buf_new (width, height, babl_format ("cairo-ARGB32")); + if (background) + { + guint32 *data = (guint32 *) gimp_temp_buf_get_data (temp_buf); + guint32 argb; + + gegl_color_get_pixel (background, babl_format ("cairo-ARGB32"), &argb); + for (gint i = 0; i < width * height; i++) + data[i] = argb; + } + else + { + memset (gimp_temp_buf_get_data (temp_buf), 255, width * height * 4); + } surface = cairo_image_surface_create_for_data (gimp_temp_buf_get_data (temp_buf), - CAIRO_FORMAT_A8, - width, height, width); + CAIRO_FORMAT_ARGB32, + width, height, stride); pango_layout_get_pixel_extents (layout, &ink, &logical); @@ -789,7 +804,18 @@ gimp_font_get_new_preview (GimpViewable *viewable, cr = cairo_create (surface); cairo_translate (cr, layout_x, layout_y); - cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR); + cairo_set_operator (cr, CAIRO_OPERATOR_OVER); + if (color) + { + gfloat rgb[3]; + + gegl_color_get_pixel (color, babl_format ("R'G'B' float"), rgb); + cairo_set_source_rgb (cr, rgb[0], rgb[1], rgb[2]); + } + else + { + cairo_set_source_rgb (cr, 0.0, 0.0, 0.0); + } pango_cairo_show_layout (cr, layout); cairo_destroy (cr); diff --git a/app/vectors/gimppath-preview.c b/app/vectors/gimppath-preview.c index 9a75c48838..873b9c70e9 100644 --- a/app/vectors/gimppath-preview.c +++ b/app/vectors/gimppath-preview.c @@ -41,7 +41,8 @@ gimp_path_get_new_preview (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color) + GeglColor *color G_GNUC_UNUSED, + GeglColor *background G_GNUC_UNUSED) { GimpPath *path; GimpItem *item; diff --git a/app/vectors/gimppath-preview.h b/app/vectors/gimppath-preview.h index a8ed7bed8f..8eea54b871 100644 --- a/app/vectors/gimppath-preview.h +++ b/app/vectors/gimppath-preview.h @@ -27,7 +27,8 @@ GimpTempBuf * gimp_path_get_new_preview (GimpViewable *viewable, GimpContext *context, gint width, gint height, - GeglColor *color); + GeglColor *color, + GeglColor *background); #endif /* __GIMP_PATH_PREVIEW_H__ */ diff --git a/app/widgets/gimpclipboard.c b/app/widgets/gimpclipboard.c index f586b8e1f4..92c4d93bf9 100644 --- a/app/widgets/gimpclipboard.c +++ b/app/widgets/gimpclipboard.c @@ -1172,7 +1172,7 @@ gimp_clipboard_send_image (GtkClipboard *clipboard, gimp_get_user_context (gimp), gimp_image_get_width (gimp_clip->image), gimp_image_get_height (gimp_clip->image), - NULL); + NULL, NULL); if (pixbuf) { @@ -1218,7 +1218,7 @@ gimp_clipboard_send_buffer (GtkClipboard *clipboard, gimp_get_user_context (gimp), gimp_buffer_get_width (gimp_clip->buffer), gimp_buffer_get_height (gimp_clip->buffer), - NULL); + NULL, NULL); if (pixbuf) { diff --git a/app/widgets/gimpcontainericonview.c b/app/widgets/gimpcontainericonview.c index 075da89635..05a700e8e8 100644 --- a/app/widgets/gimpcontainericonview.c +++ b/app/widgets/gimpcontainericonview.c @@ -811,7 +811,8 @@ gimp_container_icon_view_drag_pixbuf (GtkWidget *widget, if (renderer && gimp_viewable_get_size (renderer->viewable, &width, &height)) { - GeglColor *color = NULL; + GeglColor *color = NULL; + GeglColor *background = NULL; GdkPixbuf *pixbuf; if (renderer->context) @@ -825,27 +826,36 @@ gimp_container_icon_view_drag_pixbuf (GtkWidget *widget, { GtkStyleContext *style; GdkRGBA *fg_color = NULL; + GdkRGBA *bg_color = NULL; style = gtk_widget_get_style_context (widget); gtk_style_context_get (style, gtk_style_context_get_state (style), - GTK_STYLE_PROPERTY_COLOR, &fg_color, + GTK_STYLE_PROPERTY_COLOR, &fg_color, + GTK_STYLE_PROPERTY_BACKGROUND_COLOR, &bg_color, NULL); - if (fg_color) + if (fg_color && bg_color) { color = gegl_color_new (NULL); gegl_color_set_rgba_with_space (color, fg_color->red, fg_color->green, fg_color->blue, 1.0, NULL); + + background = gegl_color_new (NULL); + gegl_color_set_rgba_with_space (background, + bg_color->red, bg_color->green, bg_color->blue, 1.0, + NULL); } g_clear_pointer (&fg_color, gdk_rgba_free); + g_clear_pointer (&bg_color, gdk_rgba_free); } } pixbuf = gimp_viewable_get_new_pixbuf (renderer->viewable, renderer->context, - width, height, color); + width, height, color, background); g_clear_object (&color); + g_clear_object (&background); return pixbuf; } diff --git a/app/widgets/gimpcontainertreeview.c b/app/widgets/gimpcontainertreeview.c index a4241ef47b..73632e81a7 100644 --- a/app/widgets/gimpcontainertreeview.c +++ b/app/widgets/gimpcontainertreeview.c @@ -1827,7 +1827,7 @@ gimp_container_tree_view_drag_pixbuf (GtkWidget *widget, if (renderer && gimp_viewable_get_size (renderer->viewable, &width, &height)) return gimp_viewable_get_new_pixbuf (renderer->viewable, renderer->context, - width, height, NULL); + width, height, NULL, NULL); return NULL; } diff --git a/app/widgets/gimpfontfactoryview.c b/app/widgets/gimpfontfactoryview.c index 1711696327..907cbe97c7 100644 --- a/app/widgets/gimpfontfactoryview.c +++ b/app/widgets/gimpfontfactoryview.c @@ -55,6 +55,7 @@ gimp_font_factory_view_class_init (GimpFontFactoryViewClass *klass) static void gimp_font_factory_view_init (GimpFontFactoryView *view) { + gimp_data_factory_view_show_follow_theme_toggle (GIMP_DATA_FACTORY_VIEW (view), TRUE); } GtkWidget * diff --git a/app/widgets/gimpview.c b/app/widgets/gimpview.c index 96387f7085..9ed4bbf7b5 100644 --- a/app/widgets/gimpview.c +++ b/app/widgets/gimpview.c @@ -848,7 +848,7 @@ gimp_view_drag_pixbuf (GtkWidget *widget, if (viewable && gimp_viewable_get_size (viewable, &width, &height)) return gimp_viewable_get_new_pixbuf (viewable, view->renderer->context, - width, height, NULL); + width, height, NULL, NULL); return NULL; } diff --git a/app/widgets/gimpviewrenderer-frame.c b/app/widgets/gimpviewrenderer-frame.c index faf69f38b8..ba6ce1f50e 100644 --- a/app/widgets/gimpviewrenderer-frame.c +++ b/app/widgets/gimpviewrenderer-frame.c @@ -234,7 +234,7 @@ gimp_view_renderer_get_frame_pixbuf (GimpViewRenderer *renderer, { pixbuf = gimp_viewable_get_pixbuf (renderer->viewable, renderer->context, - w, h, NULL); + w, h, NULL, NULL); if (!pixbuf) return NULL; @@ -252,7 +252,7 @@ gimp_view_renderer_get_frame_pixbuf (GimpViewRenderer *renderer, pixbuf = gimp_viewable_get_pixbuf (renderer->viewable, renderer->context, width - 2, height - 2, - NULL); + NULL, NULL); if (!pixbuf) return NULL; diff --git a/app/widgets/gimpviewrenderer.c b/app/widgets/gimpviewrenderer.c index 65ff6562e1..c40ea1802c 100644 --- a/app/widgets/gimpviewrenderer.c +++ b/app/widgets/gimpviewrenderer.c @@ -114,6 +114,8 @@ static cairo_pattern_t * gimp_view_renderer_create_background (GimpViewRenderer *renderer, GtkWidget *widget); +static void gimp_view_renderer_redraw (GimpViewRenderer *renderer); + G_DEFINE_TYPE_WITH_PRIVATE (GimpViewRenderer, gimp_view_renderer, G_TYPE_OBJECT) @@ -285,8 +287,26 @@ gimp_view_renderer_set_context (GimpViewRenderer *renderer, if (context != renderer->context) { - GIMP_VIEW_RENDERER_GET_CLASS (renderer)->set_context (renderer, - context); + if (renderer->context) + { + g_signal_handlers_disconnect_by_func (renderer->context->gimp->config, + G_CALLBACK (gimp_view_renderer_redraw), + renderer); + } + + GIMP_VIEW_RENDERER_GET_CLASS (renderer)->set_context (renderer, context); + + if (renderer->context) + { + g_signal_connect_object (renderer->context->gimp->config, + "notify::viewables-follow-theme", + G_CALLBACK (gimp_view_renderer_redraw), + renderer, G_CONNECT_SWAPPED); + g_signal_connect_object (renderer->context->gimp->config, + "notify::theme-color-scheme", + G_CALLBACK (gimp_view_renderer_redraw), + renderer, G_CONNECT_SWAPPED); + } if (renderer->viewable) gimp_view_renderer_invalidate (renderer); @@ -805,6 +825,7 @@ gimp_view_renderer_real_render (GimpViewRenderer *renderer, GimpTempBuf *temp_buf; const gchar *icon_name; GeglColor *color = NULL; + GeglColor *background = NULL; gint scale_factor = gtk_widget_get_scale_factor (widget); if (renderer->context) @@ -818,19 +839,27 @@ gimp_view_renderer_real_render (GimpViewRenderer *renderer, { GtkStyleContext *style; GdkRGBA *fg_color = NULL; + GdkRGBA *bg_color = NULL; style = gtk_widget_get_style_context (widget); gtk_style_context_get (style, gtk_style_context_get_state (style), - GTK_STYLE_PROPERTY_COLOR, &fg_color, + GTK_STYLE_PROPERTY_COLOR, &fg_color, + GTK_STYLE_PROPERTY_BACKGROUND_COLOR, &bg_color, NULL); - if (fg_color) + if (fg_color && bg_color) { color = gegl_color_new (NULL); gegl_color_set_rgba_with_space (color, fg_color->red, fg_color->green, fg_color->blue, 1.0, NULL); + + background = gegl_color_new (NULL); + gegl_color_set_rgba_with_space (background, + bg_color->red, bg_color->green, bg_color->blue, 1.0, + NULL); } g_clear_pointer (&fg_color, gdk_rgba_free); + g_clear_pointer (&bg_color, gdk_rgba_free); } } @@ -838,10 +867,12 @@ gimp_view_renderer_real_render (GimpViewRenderer *renderer, renderer->context, renderer->width * scale_factor, renderer->height * scale_factor, - color); + color, background); if (pixbuf) { gimp_view_renderer_render_pixbuf (renderer, widget, pixbuf); + g_clear_object (&color); + g_clear_object (&background); return; } @@ -849,7 +880,7 @@ gimp_view_renderer_real_render (GimpViewRenderer *renderer, renderer->context, renderer->width, renderer->height, - color); + color, background); if (temp_buf) { gimp_view_renderer_render_temp_buf_simple (renderer, widget, temp_buf); @@ -860,6 +891,7 @@ gimp_view_renderer_real_render (GimpViewRenderer *renderer, gimp_view_renderer_render_icon (renderer, widget, icon_name); g_clear_object (&color); + g_clear_object (&background); } static void @@ -1459,3 +1491,10 @@ gimp_view_renderer_create_background (GimpViewRenderer *renderer, return pattern; } + +static void +gimp_view_renderer_redraw (GimpViewRenderer *renderer) +{ + gimp_view_renderer_invalidate (renderer); + gimp_view_renderer_update (renderer); +} diff --git a/app/widgets/gimpviewrendererbrush.c b/app/widgets/gimpviewrendererbrush.c index 88ccb92fc6..ff5143ff98 100644 --- a/app/widgets/gimpviewrendererbrush.c +++ b/app/widgets/gimpviewrendererbrush.c @@ -122,6 +122,7 @@ gimp_view_renderer_brush_render (GimpViewRenderer *renderer, GimpViewRendererBrush *renderbrush = GIMP_VIEW_RENDERER_BRUSH (renderer); GimpTempBuf *temp_buf; GeglColor *color = NULL; + GeglColor *background = NULL; gboolean follow_theme = FALSE; GimpViewBG view_bg_style = GIMP_VIEW_BG_WHITE; gint temp_buf_x = 0; @@ -142,10 +143,12 @@ gimp_view_renderer_brush_render (GimpViewRenderer *renderer, { GtkStyleContext *style; GdkRGBA *fg_color = NULL; + GdkRGBA *bg_color = NULL; style = gtk_widget_get_style_context (widget); gtk_style_context_get (style, gtk_style_context_get_state (style), - GTK_STYLE_PROPERTY_COLOR, &fg_color, + GTK_STYLE_PROPERTY_COLOR, &fg_color, + GTK_STYLE_PROPERTY_BACKGROUND_COLOR, &bg_color, NULL); if (fg_color) { @@ -153,14 +156,21 @@ gimp_view_renderer_brush_render (GimpViewRenderer *renderer, gegl_color_set_rgba_with_space (color, fg_color->red, fg_color->green, fg_color->blue, 1.0, NULL); + + background = gegl_color_new (NULL); + gegl_color_set_rgba_with_space (background, + bg_color->red, bg_color->green, bg_color->blue, 1.0, + NULL); view_bg_style = GIMP_VIEW_BG_USE_STYLE; } g_clear_pointer (&fg_color, gdk_rgba_free); + g_clear_pointer (&bg_color, gdk_rgba_free); } temp_buf = gimp_viewable_get_new_preview (renderer->viewable, renderer->context, - renderer->width, renderer->height, color); + renderer->width, renderer->height, color, background); g_clear_object (&color); + g_clear_object (&background); temp_buf_width = gimp_temp_buf_get_width (temp_buf); temp_buf_height = gimp_temp_buf_get_height (temp_buf); @@ -211,6 +221,7 @@ gimp_view_renderer_brush_render_timeout (gpointer data) GimpBrush *brush; GimpTempBuf *temp_buf; GeglColor *color = NULL; + GeglColor *background = NULL; gboolean follow_theme = FALSE; GimpViewBG view_bg_style = GIMP_VIEW_BG_WHITE; gint temp_buf_x = 0; @@ -248,6 +259,11 @@ gimp_view_renderer_brush_render_timeout (gpointer data) gegl_color_set_rgba_with_space (color, fg_color->red, fg_color->green, fg_color->blue, 1.0, NULL); + + background = gegl_color_new (NULL); + gegl_color_set_rgba_with_space (background, + bg_color->red, bg_color->green, bg_color->blue, 1.0, + NULL); view_bg_style = GIMP_VIEW_BG_USE_STYLE; } g_clear_pointer (&fg_color, gdk_rgba_free); @@ -266,8 +282,9 @@ gimp_view_renderer_brush_render_timeout (gpointer data) renderer->context, renderer->width, renderer->height, - color); + color, background); g_clear_object (&color); + g_clear_object (&background); temp_buf_width = gimp_temp_buf_get_width (temp_buf); temp_buf_height = gimp_temp_buf_get_height (temp_buf); diff --git a/app/widgets/gimpviewrendererbuffer.c b/app/widgets/gimpviewrendererbuffer.c index 1346205cbb..4323773bb8 100644 --- a/app/widgets/gimpviewrendererbuffer.c +++ b/app/widgets/gimpviewrendererbuffer.c @@ -85,7 +85,7 @@ gimp_view_renderer_buffer_render (GimpViewRenderer *renderer, temp_buf = gimp_viewable_get_new_preview (renderer->viewable, renderer->context, buffer_width, buffer_height, - NULL); + NULL, NULL); if (temp_buf) { @@ -99,7 +99,7 @@ gimp_view_renderer_buffer_render (GimpViewRenderer *renderer, render_buf = gimp_viewable_get_new_preview (renderer->viewable, renderer->context, view_width, view_height, - NULL); + NULL, NULL); } if (render_buf) diff --git a/app/widgets/gimpviewrendererimage.c b/app/widgets/gimpviewrendererimage.c index 9e721376b3..982f6cd28a 100644 --- a/app/widgets/gimpviewrendererimage.c +++ b/app/widgets/gimpviewrendererimage.c @@ -118,7 +118,7 @@ gimp_view_renderer_image_render (GimpViewRenderer *renderer, temp_buf = gimp_viewable_get_new_preview (renderer->viewable, renderer->context, - width, height, NULL); + width, height, NULL, NULL); if (temp_buf) { @@ -132,7 +132,7 @@ gimp_view_renderer_image_render (GimpViewRenderer *renderer, render_buf = gimp_viewable_get_new_preview (renderer->viewable, renderer->context, view_width, - view_height, NULL); + view_height, NULL, NULL); } if (render_buf) diff --git a/pdb/groups/drawable.pdb b/pdb/groups/drawable.pdb index 3d6328d8c0..b781111c9c 100644 --- a/pdb/groups/drawable.pdb +++ b/pdb/groups/drawable.pdb @@ -983,7 +983,7 @@ HELP if (image->gimp->config->layer_previews) buf = gimp_viewable_get_new_preview (GIMP_VIEWABLE (drawable), context, - width, height, NULL); + width, height, NULL, NULL); else buf = gimp_viewable_get_dummy_preview (GIMP_VIEWABLE (drawable), width, height, diff --git a/pdb/groups/image.pdb b/pdb/groups/image.pdb index 628b3a656d..c4222737e0 100644 --- a/pdb/groups/image.pdb +++ b/pdb/groups/image.pdb @@ -3154,7 +3154,7 @@ HELP gimp_pickable_flush (GIMP_PICKABLE (image)); buf = gimp_viewable_get_new_preview (GIMP_VIEWABLE (image), context, - width, height, NULL); + width, height, NULL, NULL); if (buf) {