summaryrefslogtreecommitdiffstats
path: root/src/extension/internal/cairo-renderer.cpp
diff options
context:
space:
mode:
authorMarc Jeanmougin <marc@jeanmougin.fr>2019-07-03 23:31:12 +0000
committerMarc Jeanmougin <marc@jeanmougin.fr>2019-07-03 23:31:12 +0000
commit228e7ba20476cea8f9822d34b0e5b132546a66ee (patch)
tree749b4f7f5d3f5073ddd683e41df9cfe87d246914 /src/extension/internal/cairo-renderer.cpp
parentImplement fixes/suggestions by Maren (diff)
downloadinkscape-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.cpp36
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);
+ }
+ }
}
}
}