summaryrefslogtreecommitdiffstats
path: root/src/extension/internal/cairo-render-context.cpp
diff options
context:
space:
mode:
authorPatrick Storz <eduard.braun2@gmx.de>2019-07-07 18:18:30 +0000
committerPatrick Storz <eduard.braun2@gmx.de>2019-07-10 18:15:54 +0000
commit90b67c899f3a33f4ad8cf6e3d2da6ad57dd29e51 (patch)
treeb9cc15ddf5ad03533ab717da412ea87b7d60d71e /src/extension/internal/cairo-render-context.cpp
parentinkscape-version: offer variant without revision and date (diff)
downloadinkscape-90b67c899f3a33f4ad8cf6e3d2da6ad57dd29e51.tar.gz
inkscape-90b67c899f3a33f4ad8cf6e3d2da6ad57dd29e51.zip
cairo-renderer: set metadata in output
- metadata is taken from the SVG document; - fields that are compatible with the target format (and also supported by cairo) are set accordingly
Diffstat (limited to 'src/extension/internal/cairo-render-context.cpp')
-rw-r--r--src/extension/internal/cairo-render-context.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/extension/internal/cairo-render-context.cpp b/src/extension/internal/cairo-render-context.cpp
index ab9f9e82f..2b4072336 100644
--- a/src/extension/internal/cairo-render-context.cpp
+++ b/src/extension/internal/cairo-render-context.cpp
@@ -885,6 +885,8 @@ CairoRenderContext::setupSurface(double width, double height)
break;
}
+ _setSurfaceMetadata(surface);
+
return _finishSurfaceSetup (surface, &ctm);
}
@@ -934,6 +936,42 @@ CairoRenderContext::_finishSurfaceSetup(cairo_surface_t *surface, cairo_matrix_t
return true;
}
+void
+CairoRenderContext::_setSurfaceMetadata(cairo_surface_t *surface)
+{
+ switch (_target) {
+#if defined CAIRO_HAS_PDF_SURFACE && CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 15, 4)
+ case CAIRO_SURFACE_TYPE_PDF:
+ if (!_metadata.title.empty()) {
+ cairo_pdf_surface_set_metadata(surface, CAIRO_PDF_METADATA_TITLE, _metadata.title.c_str());
+ }
+ if (!_metadata.author.empty()) {
+ cairo_pdf_surface_set_metadata(surface, CAIRO_PDF_METADATA_AUTHOR, _metadata.author.c_str());
+ }
+ if (!_metadata.subject.empty()) {
+ cairo_pdf_surface_set_metadata(surface, CAIRO_PDF_METADATA_SUBJECT, _metadata.subject.c_str());
+ }
+ if (!_metadata.keywords.empty()) {
+ cairo_pdf_surface_set_metadata(surface, CAIRO_PDF_METADATA_KEYWORDS, _metadata.keywords.c_str());
+ }
+ if (!_metadata.creator.empty()) {
+ cairo_pdf_surface_set_metadata(surface, CAIRO_PDF_METADATA_CREATOR, _metadata.creator.c_str());
+ }
+ break;
+#endif
+#if defined CAIRO_HAS_PS_SURFACE
+ case CAIRO_SURFACE_TYPE_PS:
+ if (!_metadata.title.empty()) {
+ cairo_ps_surface_dsc_comment(surface, (Glib::ustring("%%Title: ") + _metadata.title).c_str());
+ }
+ if (!_metadata.copyright.empty()) {
+ cairo_ps_surface_dsc_comment(surface, (Glib::ustring("%%Copyright: ") + _metadata.copyright).c_str());
+ }
+ break;
+#endif
+ }
+}
+
bool
CairoRenderContext::finish(bool finish_surface)
{