summaryrefslogtreecommitdiffstats
path: root/src/extension/internal/cairo-render-context.cpp
diff options
context:
space:
mode:
authorDavid R. Bild <drbild@umich.edu>2013-08-29 20:26:13 +0000
committerDavid R. Bild <drbild@umich.edu>2013-08-29 20:26:13 +0000
commit6ed0e34b74c37ab56d5345dfbe14305a48fb76d9 (patch)
treeaf08d38408a89059195aacbf708b71a253798870 /src/extension/internal/cairo-render-context.cpp
parentMove omit text feature from cairo renderer to context (diff)
downloadinkscape-6ed0e34b74c37ab56d5345dfbe14305a48fb76d9.tar.gz
inkscape-6ed0e34b74c37ab56d5345dfbe14305a48fb76d9.zip
use multiple graphic/text layers for pdf+latex output
Fixed bugs: - https://launchpad.net/bugs/771957 (bzr r12487.1.2)
Diffstat (limited to 'src/extension/internal/cairo-render-context.cpp')
-rw-r--r--src/extension/internal/cairo-render-context.cpp34
1 files changed, 32 insertions, 2 deletions
diff --git a/src/extension/internal/cairo-render-context.cpp b/src/extension/internal/cairo-render-context.cpp
index 75ec45ad0..3c222bd9e 100644
--- a/src/extension/internal/cairo-render-context.cpp
+++ b/src/extension/internal/cairo-render-context.cpp
@@ -125,7 +125,8 @@ CairoRenderContext::CairoRenderContext(CairoRenderer *parent) :
_state(NULL),
_renderer(parent),
_render_mode(RENDER_MODE_NORMAL),
- _clip_mode(CLIP_MODE_MASK)
+ _clip_mode(CLIP_MODE_MASK),
+ _omittext_state(EMPTY)
{
font_table = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, font_data_free);
}
@@ -1342,11 +1343,36 @@ CairoRenderContext::_setStrokeStyle(SPStyle const *style, Geom::OptRect const &p
cairo_set_miter_limit(_cr, MAX(1, style->stroke_miterlimit.value));
}
+void
+CairoRenderContext::_prepareRenderGraphic()
+{
+ // Only PDFLaTeX supports importing a single page of a graphics file,
+ // so only PDF backend gets interleaved text/graphics
+ if (_is_omittext && _target == CAIRO_SURFACE_TYPE_PDF) {
+ if (_omittext_state == NEW_PAGE_ON_GRAPHIC)
+ cairo_show_page(_cr);
+ _omittext_state = GRAPHIC_ON_TOP;
+ }
+}
+
+void
+CairoRenderContext::_prepareRenderText()
+{
+ // Only PDFLaTeX supports importing a single page of a graphics file,
+ // so only PDF backend gets interleaved text/graphics
+ if (_is_omittext && _target == CAIRO_SURFACE_TYPE_PDF) {
+ if (_omittext_state == GRAPHIC_ON_TOP)
+ _omittext_state = NEW_PAGE_ON_GRAPHIC;
+ }
+}
+
bool
CairoRenderContext::renderPathVector(Geom::PathVector const & pathv, SPStyle const *style, Geom::OptRect const &pbox)
{
g_assert( _is_valid );
+ _prepareRenderGraphic();
+
if (_render_mode == RENDER_MODE_CLIP) {
if (_clip_mode == CLIP_MODE_PATH) {
addClipPath(pathv, &style->fill_rule);
@@ -1419,6 +1445,8 @@ bool CairoRenderContext::renderImage(GdkPixbuf *pb,
return true;
}
+ _prepareRenderGraphic();
+
int w = gdk_pixbuf_get_width (pb);
int h = gdk_pixbuf_get_height (pb);
@@ -1500,7 +1528,9 @@ unsigned int CairoRenderContext::_showGlyphs(cairo_t *cr, PangoFont * /*font*/,
bool
CairoRenderContext::renderGlyphtext(PangoFont *font, Geom::Affine const &font_matrix,
std::vector<CairoGlyphInfo> const &glyphtext, SPStyle const *style)
-{
+{
+
+ _prepareRenderText();
if (_is_omittext)
return true;