diff options
-rw-r--r-- | include/fitz/render.h | 2 | ||||
-rw-r--r-- | render/render.c | 34 |
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; +} + |