summaryrefslogtreecommitdiff
path: root/source/fitz/device.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/fitz/device.c')
-rw-r--r--source/fitz/device.c38
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);
}