diff options
| author | Marc Jeanmougin <marc@jeanmougin.fr> | 2019-07-03 23:31:12 +0000 |
|---|---|---|
| committer | Marc Jeanmougin <marc@jeanmougin.fr> | 2019-07-03 23:31:12 +0000 |
| commit | 228e7ba20476cea8f9822d34b0e5b132546a66ee (patch) | |
| tree | 749b4f7f5d3f5073ddd683e41df9cfe87d246914 /src/extension/internal/cairo-renderer.cpp | |
| parent | Implement fixes/suggestions by Maren (diff) | |
| download | inkscape-228e7ba20476cea8f9822d34b0e5b132546a66ee.tar.gz inkscape-228e7ba20476cea8f9822d34b0e5b132546a66ee.zip | |
Export links to pdf. Fixes https://gitlab.com/inkscape/inbox/issues/583
Diffstat (limited to 'src/extension/internal/cairo-renderer.cpp')
| -rw-r--r-- | src/extension/internal/cairo-renderer.cpp | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp index 3f045f42b..6dc3ca4be 100644 --- a/src/extension/internal/cairo-renderer.cpp +++ b/src/extension/internal/cairo-renderer.cpp @@ -39,6 +39,7 @@ #include "display/curve.h" #include "display/canvas-bpath.h" #include "display/cairo-utils.h" +#include "object/sp-anchor.h" #include "object/sp-item.h" #include "object/sp-item-group.h" #include "object/sp-marker.h" @@ -131,6 +132,7 @@ Here comes the rendering part which could be put into the 'render' methods of SP /* The below functions are copy&pasted plus slightly modified from *_invoke_print functions. */ static void sp_item_invoke_render(SPItem *item, CairoRenderContext *ctx); static void sp_group_render(SPGroup *group, CairoRenderContext *ctx); +static void sp_anchor_render(SPAnchor *a, CairoRenderContext *ctx); static void sp_use_render(SPUse *use, CairoRenderContext *ctx); static void sp_shape_render(SPShape *shape, CairoRenderContext *ctx); static void sp_text_render(SPText *text, CairoRenderContext *ctx); @@ -303,7 +305,7 @@ static void sp_shape_render(SPShape *shape, CairoRenderContext *ctx) static void sp_group_render(SPGroup *group, CairoRenderContext *ctx) { CairoRenderer *renderer = ctx->getRenderer(); - TRACE(("sp_group_render opacity: %f\n", SP_SCALE24_TO_FLOAT(item->style->opacity.value))); + //TRACE(("sp_group_render opacity: %f\n", SP_SCALE24_TO_FLOAT(item->style->opacity.value))); std::vector<SPObject*> l(group->childList(false)); for(std::vector<SPObject*>::const_iterator x = l.begin(); x!= l.end(); ++x){ @@ -378,6 +380,22 @@ static void sp_image_render(SPImage *image, CairoRenderContext *ctx) ctx->renderImage(image->pixbuf, t, image->style); } +static void sp_anchor_render(SPAnchor *a, CairoRenderContext *ctx) +{ + CairoRenderer *renderer = ctx->getRenderer(); + //TRACE(("sp_group_render opacity: %f\n", SP_SCALE24_TO_FLOAT(item->style->opacity.value))); + + std::vector<SPObject*> l(a->childList(false)); + ctx->tagBegin(a->href); + for(std::vector<SPObject*>::const_iterator x = l.begin(); x!= l.end(); ++x){ + SPItem *item = dynamic_cast<SPItem*>(*x); + if (item) { + renderer->renderItem(ctx, item); + } + } + ctx->tagEnd(); +} + static void sp_symbol_render(SPSymbol *symbol, CairoRenderContext *ctx) { if (!symbol->cloned) { @@ -534,10 +552,10 @@ static void sp_item_invoke_render(SPItem *item, CairoRenderContext *ctx) TRACE(("symbol\n")); sp_symbol_render(symbol, ctx); } else { - SPGroup *group = dynamic_cast<SPGroup *>(item); - if (group) { - TRACE(("group\n")); - sp_group_render(group, ctx); + SPAnchor *anchor = dynamic_cast<SPAnchor *>(item); + if (anchor) { + TRACE(("<a>\n")); + sp_anchor_render(anchor, ctx); } else { SPShape *shape = dynamic_cast<SPShape *>(item); if (shape) { @@ -564,7 +582,13 @@ static void sp_item_invoke_render(SPItem *item, CairoRenderContext *ctx) if (image) { TRACE(("image\n")); sp_image_render(image, ctx); - } + } else { + SPGroup *group = dynamic_cast<SPGroup *>(item); + if (group) { + TRACE(("<g>\n")); + sp_group_render(group, ctx); + } + } } } } |
