[gimp] app: add gimp_cairo_image_surface_create_buffer()
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: add gimp_cairo_image_surface_create_buffer()
- Date: Wed, 2 May 2012 16:36:25 +0000 (UTC)
commit 5735e35f0c60254b68a1a1c63ee221b21e1cef30
Author: Michael Natterer <mitch gimp org>
Date: Tue Apr 10 13:08:02 2012 +0200
app: add gimp_cairo_image_surface_create_buffer()
and use it to shrink text layer rendering to even fewer lines.
app/Makefile.am | 13 +++++++------
app/core/gimp-cairo.c | 28 ++++++++++++++++++++++++++++
app/core/gimp-cairo.h | 26 ++++++++++++++------------
app/text/gimptextlayer.c | 10 +++-------
4 files changed, 52 insertions(+), 25 deletions(-)
---
diff --git a/app/Makefile.am b/app/Makefile.am
index 1435e85..2557105 100644
--- a/app/Makefile.am
+++ b/app/Makefile.am
@@ -135,10 +135,12 @@ workaround_that_file_depends_on_plug_in = \
# core, vectors and gegl are on the same architectural layer, prevent
# the linker from panicing
calm_down_linker = \
- -u $(SYMPREFIX)gimp_vectors_undo_get_type \
- -u $(SYMPREFIX)gimp_vectors_mod_undo_get_type \
- -u $(SYMPREFIX)gimp_vectors_prop_undo_get_type \
- -u $(SYMPREFIX)gimp_curve_map_pixels
+ -u $(SYMPREFIX)gimp_vectors_undo_get_type \
+ -u $(SYMPREFIX)gimp_vectors_mod_undo_get_type \
+ -u $(SYMPREFIX)gimp_vectors_prop_undo_get_type \
+ -u $(SYMPREFIX)gimp_curve_map_pixels \
+ -u $(SYMPREFIX)gimp_cairo_image_surface_create_buffer \
+ -u $(SYMPREFIX)gimp_param_spec_duplicate
AM_LDFLAGS = \
$(munix) \
@@ -147,8 +149,7 @@ AM_LDFLAGS = \
$(workaround_that_core_depends_on_xcf) \
$(workaround_that_core_depends_on_pdb) \
$(workaround_that_plug_in_depends_on_pdb) \
- $(workaround_that_file_depends_on_plug_in) \
- -u $(SYMPREFIX)gimp_param_spec_duplicate
+ $(workaround_that_file_depends_on_plug_in)
gimpconsoleldadd = \
xcf/libappxcf.a \
diff --git a/app/core/gimp-cairo.c b/app/core/gimp-cairo.c
index 3bcdd93..0ecb6c7 100644
--- a/app/core/gimp-cairo.c
+++ b/app/core/gimp-cairo.c
@@ -36,6 +36,34 @@
static cairo_user_data_key_t surface_data_key = { 0, };
+GeglBuffer *
+gimp_cairo_image_surface_create_buffer (cairo_surface_t *surface)
+{
+ const Babl *format;
+ gint width;
+ gint height;
+
+ g_return_val_if_fail (surface != NULL, NULL);
+ g_return_val_if_fail (cairo_surface_get_type (surface) ==
+ CAIRO_SURFACE_TYPE_IMAGE, NULL);
+
+ width = cairo_image_surface_get_width (surface);
+ height = cairo_image_surface_get_height (surface);
+
+ if (cairo_surface_get_content (surface) == CAIRO_CONTENT_COLOR_ALPHA)
+ format = babl_format ("cairo-ARGB32");
+ else
+ format = babl_format ("cairo-RGB24");
+
+ return
+ gegl_buffer_linear_new_from_data (cairo_image_surface_get_data (surface),
+ format,
+ GEGL_RECTANGLE (0, 0, width, height),
+ cairo_image_surface_get_stride (surface),
+ (GDestroyNotify) cairo_surface_destroy,
+ cairo_surface_reference (surface));
+}
+
cairo_pattern_t *
gimp_cairo_stipple_pattern_create (const GimpRGB *fg,
const GimpRGB *bg,
diff --git a/app/core/gimp-cairo.h b/app/core/gimp-cairo.h
index 140369d..642c8d7 100644
--- a/app/core/gimp-cairo.h
+++ b/app/core/gimp-cairo.h
@@ -25,19 +25,21 @@
#define __GIMP_CAIRO_H__
-cairo_pattern_t * gimp_cairo_stipple_pattern_create (const GimpRGB *fg,
- const GimpRGB *bg,
- gint index);
+GeglBuffer * gimp_cairo_image_surface_create_buffer (cairo_surface_t *surface);
-void gimp_cairo_add_arc (cairo_t *cr,
- gdouble center_x,
- gdouble center_y,
- gdouble radius,
- gdouble start_angle,
- gdouble slice_angle);
-void gimp_cairo_add_segments (cairo_t *cr,
- GimpSegment *segs,
- gint n_segs);
+cairo_pattern_t * gimp_cairo_stipple_pattern_create (const GimpRGB *fg,
+ const GimpRGB *bg,
+ gint index);
+
+void gimp_cairo_add_arc (cairo_t *cr,
+ gdouble center_x,
+ gdouble center_y,
+ gdouble radius,
+ gdouble start_angle,
+ gdouble slice_angle);
+void gimp_cairo_add_segments (cairo_t *cr,
+ GimpSegment *segs,
+ gint n_segs);
#endif /* __GIMP_CAIRO_H__ */
diff --git a/app/text/gimptextlayer.c b/app/text/gimptextlayer.c
index c0aff8d..10299f3 100644
--- a/app/text/gimptextlayer.c
+++ b/app/text/gimptextlayer.c
@@ -36,6 +36,7 @@
#include "gegl/gimp-gegl-utils.h"
#include "core/gimp.h"
+#include "core/gimp-cairo.h"
#include "core/gimp-utils.h"
#include "core/gimpcontext.h"
#include "core/gimpcontainer.h"
@@ -670,18 +671,13 @@ gimp_text_layer_render_layout (GimpTextLayer *layer,
cairo_surface_flush (surface);
- buffer =
- gegl_buffer_linear_new_from_data (cairo_image_surface_get_data (surface),
- babl_format ("cairo-ARGB32"),
- GEGL_RECTANGLE (0, 0, width, height),
- cairo_image_surface_get_stride (surface),
- (GDestroyNotify) cairo_surface_destroy,
- surface);
+ buffer = gimp_cairo_image_surface_create_buffer (surface);
gegl_buffer_copy (buffer, NULL,
gimp_drawable_get_buffer (drawable), NULL);
g_object_unref (buffer);
+ cairo_surface_destroy (surface);
gimp_drawable_update (drawable, 0, 0, width, height);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]