summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/fitz/render.h2
-rw-r--r--render/render.c34
2 files changed, 36 insertions, 0 deletions
diff --git a/include/fitz/render.h b/include/fitz/render.h
index 357c3697..cb78b57c 100644
--- a/include/fitz/render.h
+++ b/include/fitz/render.h
@@ -78,4 +78,6 @@ extern void fz_accelerate();
fz_error *fz_newrenderer(fz_renderer **gcp, fz_colorspace *pcm, int maskonly, int gcmem);
void fz_droprenderer(fz_renderer *gc);
fz_error *fz_rendertree(fz_pixmap **out, fz_renderer *gc, fz_tree *tree, fz_matrix ctm, fz_irect bbox, int white);
+fz_error *fz_rendertreeover(fz_renderer *gc, fz_pixmap *dest, fz_tree *tree, fz_matrix ctm);
+
diff --git a/render/render.c b/render/render.c
index 0b08e158..6db055bd 100644
--- a/render/render.c
+++ b/render/render.c
@@ -838,3 +838,37 @@ DEBUG("}\n");
return nil;
}
+fz_error *
+fz_rendertreeover(fz_renderer *gc, fz_pixmap *dest, fz_tree *tree, fz_matrix ctm)
+{
+ fz_error *error;
+
+ assert(!gc->maskonly);
+ assert(dest->n == 4);
+
+ gc->clip.min.x = dest->x;
+ gc->clip.min.y = dest->y;
+ gc->clip.max.x = dest->x + dest->w;
+ gc->clip.max.y = dest->y + dest->h;
+
+ gc->over = dest;
+
+ error = rendernode(gc, tree->root, ctm);
+ if (error)
+ {
+ gc->over = nil;
+ return error;
+ }
+
+ if (gc->dest)
+ {
+ blendover(gc, gc->dest, gc->over);
+ fz_droppixmap(gc->dest);
+ gc->dest = nil;
+ }
+
+ gc->over = nil;
+
+ return nil;
+}
+