[cairo-commit] src/cairo.h src/cairoint.h src/cairo-paginated-surface.c src/cairo-pdf-surface.c src/cairo-ps-surface.c src/cairo-surface-backend-private.h src/cairo-surface.c src/cairo-svg-surface.c src/cairo-win32-printing-surface.c

Adrian Johnson ajohnson at kemper.freedesktop.org
Thu Jan 19 00:40:27 PST 2012


 src/cairo-paginated-surface.c       |   14 +++++++++++++-
 src/cairo-pdf-surface.c             |   14 ++++++++++++++
 src/cairo-ps-surface.c              |   13 +++++++++++++
 src/cairo-surface-backend-private.h |    3 +++
 src/cairo-surface.c                 |   30 ++++++++++++++++++++++++++++++
 src/cairo-svg-surface.c             |   18 ++++++++++++++++++
 src/cairo-win32-printing-surface.c  |   16 ++++++++++++++++
 src/cairo.h                         |    4 ++++
 src/cairoint.h                      |    1 +
 9 files changed, 112 insertions(+), 1 deletion(-)

New commits:
commit 0f40cdea1bdeedc730dde7814cdf056a12efb2cc
Author: Adrian Johnson <ajohnson at redneon.com>
Date:   Wed Jan 18 22:13:10 2012 +1030

    api: add cairo_surface_supports_mime_type
    
    to allow querying if a surface supports a particular mime type.

diff --git a/src/cairo-paginated-surface.c b/src/cairo-paginated-surface.c
index 0418e67..e872e39 100644
--- a/src/cairo-paginated-surface.c
+++ b/src/cairo-paginated-surface.c
@@ -640,6 +640,17 @@ _cairo_paginated_surface_show_text_glyphs (void			      *abstract_surface,
 					    clip);
 }
 
+static const char **
+_cairo_paginated_surface_get_supported_mime_types (void *abstract_surface)
+{
+    cairo_paginated_surface_t *surface = abstract_surface;
+
+    if (surface->target->backend->get_supported_mime_types)
+	return surface->target->backend->get_supported_mime_types (surface->target);
+
+    return NULL;
+}
+
 static cairo_surface_t *
 _cairo_paginated_surface_snapshot (void *abstract_other)
 {
@@ -691,5 +702,6 @@ static const cairo_surface_backend_t cairo_paginated_surface_backend = {
     NULL, /* fill_stroke */
     NULL, /* show_glyphs */
     _cairo_paginated_surface_has_show_text_glyphs,
-    _cairo_paginated_surface_show_text_glyphs
+    _cairo_paginated_surface_show_text_glyphs,
+    _cairo_paginated_surface_get_supported_mime_types,
 };
diff --git a/src/cairo-pdf-surface.c b/src/cairo-pdf-surface.c
index 148e6ff..cf8aab4 100644
--- a/src/cairo-pdf-surface.c
+++ b/src/cairo-pdf-surface.c
@@ -157,6 +157,14 @@ static const char * _cairo_pdf_version_strings[CAIRO_PDF_VERSION_LAST] =
     "PDF 1.5"
 };
 
+static const char *_cairo_pdf_supported_mime_types[] =
+{
+    CAIRO_MIME_TYPE_JPEG,
+    CAIRO_MIME_TYPE_JP2,
+    CAIRO_MIME_TYPE_UNIQUE_ID,
+    NULL
+};
+
 typedef struct _cairo_pdf_object {
     long offset;
 } cairo_pdf_object_t;
@@ -7240,6 +7248,11 @@ cleanup:
     return status;
 }
 
+static const char **
+_cairo_pdf_surface_get_supported_mime_types (void		 *abstract_surface)
+{
+    return _cairo_pdf_supported_mime_types;
+}
 
 static void
 _cairo_pdf_surface_set_paginated_mode (void			*abstract_surface,
@@ -7283,6 +7296,7 @@ static const cairo_surface_backend_t cairo_pdf_surface_backend = {
     NULL, /* show_glyphs */
     _cairo_pdf_surface_has_show_text_glyphs,
     _cairo_pdf_surface_show_text_glyphs,
+    _cairo_pdf_surface_get_supported_mime_types,
 };
 
 static const cairo_paginated_surface_backend_t
diff --git a/src/cairo-ps-surface.c b/src/cairo-ps-surface.c
index 8fdc46f..f71b079 100644
--- a/src/cairo-ps-surface.c
+++ b/src/cairo-ps-surface.c
@@ -144,6 +144,12 @@ static const char * _cairo_ps_level_strings[CAIRO_PS_LEVEL_LAST] =
     "PS Level 3"
 };
 
+static const char *_cairo_ps_supported_mime_types[] =
+{
+    CAIRO_MIME_TYPE_JPEG,
+    NULL
+};
+
 typedef struct _cairo_page_standard_media {
     const char *name;
     int width;
@@ -4155,6 +4161,12 @@ cleanup_composite:
     return status;
 }
 
+static const char **
+_cairo_ps_surface_get_supported_mime_types (void		 *abstract_surface)
+{
+    return _cairo_ps_supported_mime_types;
+}
+
 static void
 _cairo_ps_surface_set_paginated_mode (void			*abstract_surface,
 				      cairo_paginated_mode_t	 paginated_mode)
@@ -4304,6 +4316,7 @@ static const cairo_surface_backend_t cairo_ps_surface_backend = {
     NULL, /* show_glyphs */
     _cairo_ps_surface_has_show_text_glyphs,
     _cairo_ps_surface_show_text_glyphs,
+    _cairo_ps_surface_get_supported_mime_types,
 };
 
 static const cairo_paginated_surface_backend_t cairo_ps_surface_paginated_backend = {
diff --git a/src/cairo-surface-backend-private.h b/src/cairo-surface-backend-private.h
index 03468cc..1f076e2 100644
--- a/src/cairo-surface-backend-private.h
+++ b/src/cairo-surface-backend-private.h
@@ -192,6 +192,9 @@ struct _cairo_surface_backend {
 				 cairo_text_cluster_flags_t  cluster_flags,
 				 cairo_scaled_font_t	    *scaled_font,
 				 const cairo_clip_t               *clip);
+
+    const char **
+    (*get_supported_mime_types)	(void			    *surface);
 };
 
 CAIRO_END_DECLS
diff --git a/src/cairo-surface.c b/src/cairo-surface.c
index 2607f29..99a0777 100644
--- a/src/cairo-surface.c
+++ b/src/cairo-surface.c
@@ -1193,6 +1193,36 @@ cairo_surface_set_mime_data (cairo_surface_t		*surface,
 }
 slim_hidden_def (cairo_surface_set_mime_data);
 
+/**
+ * cairo_surface_supports_mime_type:
+ * @surface: a #cairo_surface_t
+ * @mime_type: the mime type
+ *
+ * Return whether @surface supports @mime_type.
+ *
+ * Since: 1.12
+ **/
+cairo_bool_t
+cairo_surface_supports_mime_type (cairo_surface_t		*surface,
+				  const char			*mime_type)
+{
+    const char **types;
+
+    if (surface->backend->get_supported_mime_types) {
+	types = surface->backend->get_supported_mime_types (surface);
+	if (types) {
+	    while (*types) {
+		if (strcmp (*types, mime_type) == 0)
+		    return TRUE;
+		types++;
+	    }
+	}
+    }
+
+    return FALSE;
+}
+slim_hidden_def (cairo_surface_supports_mime_type);
+
 static void
 _cairo_mime_data_reference (const void *key, void *elt, void *closure)
 {
diff --git a/src/cairo-svg-surface.c b/src/cairo-svg-surface.c
index eab50c8..c5a02c2 100644
--- a/src/cairo-svg-surface.c
+++ b/src/cairo-svg-surface.c
@@ -87,6 +87,14 @@ static const cairo_svg_version_t _cairo_svg_versions[] =
 
 #define CAIRO_SVG_VERSION_LAST ARRAY_LENGTH (_cairo_svg_versions)
 
+static const char *_cairo_svg_supported_mime_types[] =
+{
+    CAIRO_MIME_TYPE_JPEG,
+    CAIRO_MIME_TYPE_PNG,
+    CAIRO_MIME_TYPE_URI,
+    NULL
+};
+
 static void
 _cairo_svg_surface_emit_path (cairo_output_stream_t	*output,
 			      const cairo_path_fixed_t	*path,
@@ -2577,6 +2585,13 @@ _cairo_svg_surface_get_font_options (void                  *abstract_surface,
     _cairo_font_options_set_round_glyph_positions (options, CAIRO_ROUND_GLYPH_POS_OFF);
 }
 
+
+static const char **
+_cairo_svg_surface_get_supported_mime_types (void	   *abstract_surface)
+{
+    return _cairo_svg_supported_mime_types;
+}
+
 static const cairo_surface_backend_t cairo_svg_surface_backend = {
 	CAIRO_SURFACE_TYPE_SVG,
 	_cairo_svg_surface_finish,
@@ -2607,6 +2622,9 @@ static const cairo_surface_backend_t cairo_svg_surface_backend = {
 	_cairo_svg_surface_fill,
 	_cairo_svg_surface_fill_stroke,
 	_cairo_svg_surface_show_glyphs,
+	NULL, /* has_show_text_glyphs */
+	NULL, /* show_text_glyphs */
+	_cairo_svg_surface_get_supported_mime_types,
 };
 
 static cairo_status_t
diff --git a/src/cairo-win32-printing-surface.c b/src/cairo-win32-printing-surface.c
index 296e626..931ae0f 100644
--- a/src/cairo-win32-printing-surface.c
+++ b/src/cairo-win32-printing-surface.c
@@ -91,6 +91,13 @@
 
 #define PELS_72DPI  ((LONG)(72. / 0.0254))
 
+static const char *_cairo_win32_printing_supported_mime_types[] =
+{
+    CAIRO_MIME_TYPE_JPEG,
+    CAIRO_MIME_TYPE_PNG,
+    NULL
+};
+
 static const cairo_surface_backend_t cairo_win32_printing_surface_backend;
 static const cairo_paginated_surface_backend_t cairo_win32_surface_paginated_backend;
 
@@ -1655,6 +1662,12 @@ _cairo_win32_printing_surface_show_glyphs (void                 *abstract_surfac
     return status;
 }
 
+static const char **
+_cairo_win32_printing_surface_get_supported_mime_types (void	  *abstract_surface)
+{
+    return _cairo_win32_printing_supported_mime_types;
+}
+
 static cairo_surface_t *
 _cairo_win32_printing_surface_create_similar (void		*abstract_surface,
 					      cairo_content_t	 content,
@@ -1887,6 +1900,9 @@ static const cairo_surface_backend_t cairo_win32_printing_surface_backend = {
     _cairo_win32_printing_surface_fill,
     NULL, /* fill/stroke */
     _cairo_win32_printing_surface_show_glyphs,
+    NULL, /* has_show_text_glyphs */
+    NULL, /* show_text_glyphs */
+    _cairo_win32_printing_surface_get_supported_mime_types,
 };
 
 static const cairo_paginated_surface_backend_t cairo_win32_surface_paginated_backend = {
diff --git a/src/cairo.h b/src/cairo.h
index d5f5861..a64a8a0 100644
--- a/src/cairo.h
+++ b/src/cairo.h
@@ -2370,6 +2370,10 @@ cairo_surface_set_mime_data (cairo_surface_t		*surface,
 			     cairo_destroy_func_t	 destroy,
 			     void			*closure);
 
+cairo_public cairo_bool_t
+cairo_surface_supports_mime_type (cairo_surface_t		*surface,
+				  const char		        *mime_type);
+
 cairo_public void
 cairo_surface_get_font_options (cairo_surface_t      *surface,
 				cairo_font_options_t *options);
diff --git a/src/cairoint.h b/src/cairoint.h
index f08462c..d3ad903 100644
--- a/src/cairoint.h
+++ b/src/cairoint.h
@@ -1898,6 +1898,7 @@ slim_hidden_proto (cairo_surface_set_fallback_resolution);
 slim_hidden_proto (cairo_surface_set_mime_data);
 slim_hidden_proto (cairo_surface_show_page);
 slim_hidden_proto (cairo_surface_status);
+slim_hidden_proto (cairo_surface_supports_mime_type);
 slim_hidden_proto (cairo_surface_unmap_image);
 slim_hidden_proto (cairo_text_cluster_allocate);
 slim_hidden_proto (cairo_text_cluster_free);


More information about the cairo-commit mailing list