diff options
Diffstat (limited to 'source/fitz/device.c')
-rw-r--r-- | source/fitz/device.c | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/source/fitz/device.c b/source/fitz/device.c index 5a293bce..df2d4f86 100644 --- a/source/fitz/device.c +++ b/source/fitz/device.c @@ -7,12 +7,46 @@ fz_new_device(fz_context *ctx, int size) } void +fz_close_device(fz_context *ctx, fz_device *dev) +{ + if (dev == NULL) + return; + if (dev->close) + dev->close(ctx, dev); + + /* Don't call more than once! */ + dev->close = NULL; + + /* And disable all further device calls. */ + dev->fill_path = NULL; + dev->stroke_path = NULL; + dev->clip_path = NULL; + dev->clip_stroke_path = NULL; + dev->fill_text = NULL; + dev->stroke_text = NULL; + dev->clip_text = NULL; + dev->clip_stroke_text = NULL; + dev->ignore_text = NULL; + dev->fill_shade = NULL; + dev->fill_image = NULL; + dev->fill_image_mask = NULL; + dev->clip_image_mask = NULL; + dev->pop_clip = NULL; + dev->begin_mask = NULL; + dev->end_mask = NULL; + dev->begin_group = NULL; + dev->end_group = NULL; + dev->begin_tile = NULL; + dev->end_tile = NULL; +} + +void fz_drop_device(fz_context *ctx, fz_device *dev) { if (dev == NULL) return; - if (dev->drop_imp) - dev->drop_imp(ctx, dev); + if (dev->close) + dev->close(ctx, dev); fz_free(ctx, dev->container); fz_free(ctx, dev); } |