[cairo] [PATCH 1/2] API ps: Export the ability to set the creation date of the surface

Chris Wilson chris at chris-wilson.co.uk
Thu Apr 12 03:04:59 PDT 2012


A PostScript surface embeds a CreationDate comment into its document
description pre-amble. Normally this is set to the time the surface is
written out, except we set this to a constant value in the boilerplate
for the purposes of mimicking a reference file. It may also be useful
for external applications, so make it a public export.

References: https://bugs.freedesktop.org/show_bug.cgi?id=48577
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
---
 boilerplate/cairo-boilerplate-ps.c |   20 +-------------------
 src/cairo-ps-surface.c             |   25 +++++++++++++++++++++++++
 src/cairo-ps.h                     |    5 +++++
 3 files changed, 31 insertions(+), 19 deletions(-)

diff --git a/boilerplate/cairo-boilerplate-ps.c b/boilerplate/cairo-boilerplate-ps.c
index ae61239..411c11e 100644
--- a/boilerplate/cairo-boilerplate-ps.c
+++ b/boilerplate/cairo-boilerplate-ps.c
@@ -55,24 +55,6 @@ typedef struct _ps_target_closure {
     cairo_ps_level_t	 level;
 } ps_target_closure_t;
 
-static cairo_status_t
-_cairo_boilerplate_ps_surface_set_creation_date (cairo_surface_t *abstract_surface,
-						 time_t 	  date)
-{
-    cairo_paginated_surface_t *paginated = (cairo_paginated_surface_t*) abstract_surface;
-    cairo_ps_surface_t *surface;
-
-    if (cairo_surface_get_type (abstract_surface) != CAIRO_SURFACE_TYPE_PS)
-	return CAIRO_STATUS_SURFACE_TYPE_MISMATCH;
-
-    surface = (cairo_ps_surface_t*) paginated->target;
-
-    surface->has_creation_date = TRUE;
-    surface->creation_date = date;
-
-    return CAIRO_STATUS_SUCCESS;
-}
-
 static cairo_surface_t *
 _cairo_boilerplate_ps_create_surface (const char		*name,
 				      cairo_content_t		 content,
@@ -106,7 +88,7 @@ _cairo_boilerplate_ps_create_surface (const char		*name,
 	goto CLEANUP_FILENAME;
 
     cairo_ps_surface_restrict_to_level (surface, level);
-    _cairo_boilerplate_ps_surface_set_creation_date (surface, 0);
+    cairo_ps_surface_set_creation_date (surface, 0);
     cairo_surface_set_fallback_resolution (surface, 72., 72.);
 
     if (content == CAIRO_CONTENT_COLOR) {
diff --git a/src/cairo-ps-surface.c b/src/cairo-ps-surface.c
index c5ea680..fae3ba3 100644
--- a/src/cairo-ps-surface.c
+++ b/src/cairo-ps-surface.c
@@ -1359,6 +1359,31 @@ cairo_ps_surface_set_size (cairo_surface_t	*surface,
 }
 
 /**
+ * cairo_ps_surface_set_creation_data:
+ * @surface: a PostScript #cairo_surface_t
+ * @date: A time_t
+ *
+ * Changes the embedded creation date of a PostScript surface.
+ *
+ * This function can be called at any point before the surface is finished,
+ *
+ * Since: 1.12.2
+ **/
+void
+cairo_ps_surface_set_creation_date (cairo_surface_t *abstract_surface,
+				    time_t	  date)
+{
+    cairo_ps_surface_t *surface = NULL;
+
+    if (! _extract_ps_surface (abstract_surface, TRUE, &surface))
+	return;
+
+    surface->has_creation_date = TRUE;
+    surface->creation_date = date;
+}
+
+
+/**
  * cairo_ps_surface_dsc_comment:
  * @surface: a PostScript #cairo_surface_t
  * @comment: a comment string to be emitted into the PostScript output
diff --git a/src/cairo-ps.h b/src/cairo-ps.h
index 33d0e0d..920052b 100644
--- a/src/cairo-ps.h
+++ b/src/cairo-ps.h
@@ -42,6 +42,7 @@
 #if CAIRO_HAS_PS_SURFACE
 
 #include <stdio.h>
+#include <time.h>
 
 CAIRO_BEGIN_DECLS
 
@@ -98,6 +99,10 @@ cairo_ps_surface_set_size (cairo_surface_t	*surface,
 			   double		 height_in_points);
 
 cairo_public void
+cairo_ps_surface_set_creation_date (cairo_surface_t *abstract_surface,
+				    time_t	  date);
+
+cairo_public void
 cairo_ps_surface_dsc_comment (cairo_surface_t	*surface,
 			      const char	*comment);
 
-- 
1.7.9.5



More information about the cairo mailing list