From 50d4fe3496750cdebd3a36a81e4ef632275544c7 Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Fri, 1 Nov 2013 22:34:09 +0100 Subject: [PATCH] libgimpwidgets: add GimpColorDisplay::convert_buffer() which takes a GeglBuffer and a GeglRectangle. --- libgimpwidgets/gimpcolordisplay.c | 31 ++++++++++++++++++++++- libgimpwidgets/gimpcolordisplay.h | 12 +++++++-- libgimpwidgets/gimpcolordisplaystack.c | 34 +++++++++++++++++++++++++- libgimpwidgets/gimpcolordisplaystack.h | 6 ++++- libgimpwidgets/gimpwidgets.def | 2 ++ 5 files changed, 80 insertions(+), 5 deletions(-) diff --git a/libgimpwidgets/gimpcolordisplay.c b/libgimpwidgets/gimpcolordisplay.c index 37e8dc0f0c..c3dcc8070b 100644 --- a/libgimpwidgets/gimpcolordisplay.c +++ b/libgimpwidgets/gimpcolordisplay.c @@ -141,6 +141,7 @@ gimp_color_display_class_init (GimpColorDisplayClass *klass) klass->stock_id = GIMP_STOCK_DISPLAY_FILTER; klass->clone = NULL; + klass->convert_buffer = NULL; klass->convert_surface = NULL; klass->convert = NULL; klass->load_state = NULL; @@ -335,6 +336,32 @@ gimp_color_display_clone (GimpColorDisplay *display) return GIMP_COLOR_DISPLAY (gimp_config_duplicate (GIMP_CONFIG (display))); } +/** + * gimp_color_display_convert_buffer: + * @display: a #GimpColorDisplay + * @buffer: a #GeglBuffer + * @area: area in @buffer to convert + * + * Converts all pixels in @area of @buffer. + * + * Since: GIMP 2.10 + **/ +void +gimp_color_display_convert_buffer (GimpColorDisplay *display, + GeglBuffer *buffer, + GeglRectangle *area) +{ + g_return_if_fail (GIMP_IS_COLOR_DISPLAY (display)); + g_return_if_fail (GEGL_IS_BUFFER (buffer)); + + if (display->enabled && + GIMP_COLOR_DISPLAY_GET_CLASS (display)->convert_buffer) + { + GIMP_COLOR_DISPLAY_GET_CLASS (display)->convert_buffer (display, buffer, + area); + } +} + /** * gimp_color_display_convert_surface: * @display: a #GimpColorDisplay @@ -343,6 +370,8 @@ gimp_color_display_clone (GimpColorDisplay *display) * Converts all pixels in @surface. * * Since: GIMP 2.8 + * + * Deprecated: GIMP 2.8: Use gimp_color_display_convert_buffer() instead. **/ void gimp_color_display_convert_surface (GimpColorDisplay *display, @@ -373,7 +402,7 @@ gimp_color_display_convert_surface (GimpColorDisplay *display, * * Converts all pixels in @buf. * - * Deprecated: GIMP 2.8: Use gimp_color_display_convert_surface() instead. + * Deprecated: GIMP 2.8: Use gimp_color_display_convert_buffer() instead. **/ void gimp_color_display_convert (GimpColorDisplay *display, diff --git a/libgimpwidgets/gimpcolordisplay.h b/libgimpwidgets/gimpcolordisplay.h index 3d45311014..1556928a5f 100644 --- a/libgimpwidgets/gimpcolordisplay.h +++ b/libgimpwidgets/gimpcolordisplay.h @@ -85,11 +85,15 @@ struct _GimpColorDisplayClass const gchar *stock_id; + /* implementing the GimpColorDisplay::convert_surface method is deprecated */ void (* convert_surface) (GimpColorDisplay *display, cairo_surface_t *surface); + void (* convert_buffer) (GimpColorDisplay *display, + GeglBuffer *buffer, + GeglRectangle *area); + /* Padding for future expansion */ - void (* _gimp_reserved3) (void); void (* _gimp_reserved4) (void); }; @@ -100,9 +104,13 @@ GIMP_DEPRECATED_FOR(g_object_new) GimpColorDisplay * gimp_color_display_new (GType display_type); GimpColorDisplay * gimp_color_display_clone (GimpColorDisplay *display); +void gimp_color_display_convert_buffer (GimpColorDisplay *display, + GeglBuffer *buffer, + GeglRectangle *area); +GIMP_DEPRECATED_FOR(gimp_color_display_convert_buffer) void gimp_color_display_convert_surface (GimpColorDisplay *display, cairo_surface_t *surface); -GIMP_DEPRECATED_FOR(gimp_color_display_convert_surface) +GIMP_DEPRECATED_FOR(gimp_color_display_convert_buffer) void gimp_color_display_convert (GimpColorDisplay *display, guchar *buf, gint width, diff --git a/libgimpwidgets/gimpcolordisplaystack.c b/libgimpwidgets/gimpcolordisplaystack.c index 5a0401de20..6e3c435e35 100644 --- a/libgimpwidgets/gimpcolordisplaystack.c +++ b/libgimpwidgets/gimpcolordisplaystack.c @@ -285,6 +285,34 @@ gimp_color_display_stack_reorder_down (GimpColorDisplayStack *stack, } } +/** + * gimp_color_display_stack_convert_buffer: + * @stack: a #GimpColorDisplayStack + * @buffer: a #GeglBuffer + * @area: area of @buffer to convert + * + * Runs all the stack's filters on all pixels in @area of @buffer. + * + * Since: GIMP 2.10 + **/ +void +gimp_color_display_stack_convert_buffer (GimpColorDisplayStack *stack, + GeglBuffer *buffer, + GeglRectangle *area) +{ + GList *list; + + g_return_if_fail (GIMP_IS_COLOR_DISPLAY_STACK (stack)); + g_return_if_fail (GEGL_IS_BUFFER (buffer)); + + for (list = stack->filters; list; list = g_list_next (list)) + { + GimpColorDisplay *display = list->data; + + gimp_color_display_convert_buffer (display, buffer, area); + } +} + /** * gimp_color_display_stack_convert_surface: * @stack: a #GimpColorDisplayStack @@ -293,6 +321,8 @@ gimp_color_display_stack_reorder_down (GimpColorDisplayStack *stack, * Runs all the stack's filters on all pixels in @surface. * * Since: GIMP 2.8 + * + * Deprecated: GIMP 2.10: Use gimp_color_display_stack_convert_buffer() instead. **/ void gimp_color_display_stack_convert_surface (GimpColorDisplayStack *stack, @@ -309,7 +339,9 @@ gimp_color_display_stack_convert_surface (GimpColorDisplayStack *stack, { GimpColorDisplay *display = list->data; + G_GNUC_BEGIN_IGNORE_DEPRECATIONS gimp_color_display_convert_surface (display, surface); + G_GNUC_END_IGNORE_DEPRECATIONS } } @@ -324,7 +356,7 @@ gimp_color_display_stack_convert_surface (GimpColorDisplayStack *stack, * * Converts all pixels in @buf. * - * Deprecated: GIMP 2.8: Use gimp_color_display_stack_convert_surface() instead. + * Deprecated: GIMP 2.8: Use gimp_color_display_stack_convert_buffer() instead. **/ void gimp_color_display_stack_convert (GimpColorDisplayStack *stack, diff --git a/libgimpwidgets/gimpcolordisplaystack.h b/libgimpwidgets/gimpcolordisplaystack.h index d3e0304336..f3e905503c 100644 --- a/libgimpwidgets/gimpcolordisplaystack.h +++ b/libgimpwidgets/gimpcolordisplaystack.h @@ -85,9 +85,13 @@ void gimp_color_display_stack_reorder_up (GimpColorDisplayStack *stack, GimpColorDisplay *display); void gimp_color_display_stack_reorder_down (GimpColorDisplayStack *stack, GimpColorDisplay *display); +void gimp_color_display_stack_convert_buffer (GimpColorDisplayStack *stack, + GeglBuffer *buffer, + GeglRectangle *area); +GIMP_DEPRECATED_FOR(gimp_color_display_stack_convert_buffer) void gimp_color_display_stack_convert_surface (GimpColorDisplayStack *stack, cairo_surface_t *surface); -GIMP_DEPRECATED_FOR(gimp_color_display_stack_convert_surface) +GIMP_DEPRECATED_FOR(gimp_color_display_stack_convert_buffer) void gimp_color_display_stack_convert (GimpColorDisplayStack *stack, guchar *buf, gint width, diff --git a/libgimpwidgets/gimpwidgets.def b/libgimpwidgets/gimpwidgets.def index 0fe2e5067a..3d83e51d4f 100644 --- a/libgimpwidgets/gimpwidgets.def +++ b/libgimpwidgets/gimpwidgets.def @@ -44,6 +44,7 @@ EXPORTS gimp_color_display_configure gimp_color_display_configure_reset gimp_color_display_convert + gimp_color_display_convert_buffer gimp_color_display_convert_surface gimp_color_display_get_config gimp_color_display_get_enabled @@ -57,6 +58,7 @@ EXPORTS gimp_color_display_stack_changed gimp_color_display_stack_clone gimp_color_display_stack_convert + gimp_color_display_stack_convert_buffer gimp_color_display_stack_convert_surface gimp_color_display_stack_get_type gimp_color_display_stack_new