diff options
author | Tor Andersson <tor.andersson@artifex.com> | 2015-02-17 14:41:50 +0100 |
---|---|---|
committer | Tor Andersson <tor.andersson@artifex.com> | 2015-02-17 18:06:11 +0100 |
commit | 31186b61d979ba02c04ce68dcb66f7a5f1229c93 (patch) | |
tree | 84aa2debf18e6e4bab6c803e4b759b8851ce0ff4 /source/fitz/stext-device.c | |
parent | 72679561cddc6b2586e596f62492b79dcf9f118d (diff) | |
download | mupdf-31186b61d979ba02c04ce68dcb66f7a5f1229c93.tar.xz |
Use embedded superclass struct instead of user pointer in devices.
Diffstat (limited to 'source/fitz/stext-device.c')
-rw-r--r-- | source/fitz/stext-device.c | 67 |
1 files changed, 33 insertions, 34 deletions
diff --git a/source/fitz/stext-device.c b/source/fitz/stext-device.c index dd1249c8..cdba39f8 100644 --- a/source/fitz/stext-device.c +++ b/source/fitz/stext-device.c @@ -25,6 +25,7 @@ typedef struct span_soup_s span_soup; struct fz_text_device_s { + fz_device super; fz_text_sheet *sheet; fz_text_page *page; span_soup *spans; @@ -788,7 +789,7 @@ static void fz_text_fill_text(fz_context *ctx, fz_device *dev, fz_text *text, const fz_matrix *ctm, fz_colorspace *colorspace, float *color, float alpha) { - fz_text_device *tdev = dev->user; + fz_text_device *tdev = (fz_text_device*)dev; fz_text_style *style; style = fz_lookup_text_style(ctx, tdev->sheet, text, ctm, colorspace, color, alpha, NULL); fz_text_extract(ctx, tdev, text, ctm, style); @@ -798,7 +799,7 @@ static void fz_text_stroke_text(fz_context *ctx, fz_device *dev, fz_text *text, fz_stroke_state *stroke, const fz_matrix *ctm, fz_colorspace *colorspace, float *color, float alpha) { - fz_text_device *tdev = dev->user; + fz_text_device *tdev = (fz_text_device*)dev; fz_text_style *style; style = fz_lookup_text_style(ctx, tdev->sheet, text, ctm, colorspace, color, alpha, stroke); fz_text_extract(ctx, tdev, text, ctm, style); @@ -807,7 +808,7 @@ fz_text_stroke_text(fz_context *ctx, fz_device *dev, fz_text *text, fz_stroke_st static void fz_text_clip_text(fz_context *ctx, fz_device *dev, fz_text *text, const fz_matrix *ctm, int accumulate) { - fz_text_device *tdev = dev->user; + fz_text_device *tdev = (fz_text_device*)dev; fz_text_style *style; style = fz_lookup_text_style(ctx, tdev->sheet, text, ctm, NULL, NULL, 0, NULL); fz_text_extract(ctx, tdev, text, ctm, style); @@ -816,7 +817,7 @@ fz_text_clip_text(fz_context *ctx, fz_device *dev, fz_text *text, const fz_matri static void fz_text_clip_stroke_text(fz_context *ctx, fz_device *dev, fz_text *text, fz_stroke_state *stroke, const fz_matrix *ctm) { - fz_text_device *tdev = dev->user; + fz_text_device *tdev = (fz_text_device*)dev; fz_text_style *style; style = fz_lookup_text_style(ctx, tdev->sheet, text, ctm, NULL, NULL, 0, stroke); fz_text_extract(ctx, tdev, text, ctm, style); @@ -825,7 +826,7 @@ fz_text_clip_stroke_text(fz_context *ctx, fz_device *dev, fz_text *text, fz_stro static void fz_text_ignore_text(fz_context *ctx, fz_device *dev, fz_text *text, const fz_matrix *ctm) { - fz_text_device *tdev = dev->user; + fz_text_device *tdev = (fz_text_device*)dev; fz_text_style *style; style = fz_lookup_text_style(ctx, tdev->sheet, text, ctm, NULL, NULL, 0, NULL); fz_text_extract(ctx, tdev, text, ctm, style); @@ -835,7 +836,7 @@ static void fz_text_fill_image_mask(fz_context *ctx, fz_device *dev, fz_image *img, const fz_matrix *ctm, fz_colorspace *cspace, float *color, float alpha) { - fz_text_device *tdev = dev->user; + fz_text_device *tdev = (fz_text_device*)dev; fz_text_page *page = tdev->page; fz_image_block *block; @@ -956,7 +957,7 @@ fz_bidi_reorder_text_page(fz_context *ctx, fz_text_page *page) static void fz_text_begin_page(fz_context *ctx, fz_device *dev, const fz_rect *mediabox, const fz_matrix *ctm) { - fz_text_device *tdev = dev->user; + fz_text_device *tdev = (fz_text_device*)dev; if (tdev->page->len) { @@ -973,7 +974,7 @@ fz_text_begin_page(fz_context *ctx, fz_device *dev, const fz_rect *mediabox, con static void fz_text_end_page(fz_context *ctx, fz_device *dev) { - fz_text_device *tdev = dev->user; + fz_text_device *tdev = (fz_text_device*)dev; add_span_to_soup(ctx, tdev->spans, tdev->cur_span); tdev->cur_span = NULL; @@ -989,37 +990,35 @@ fz_text_end_page(fz_context *ctx, fz_device *dev) } static void -fz_text_drop_user(fz_context *ctx, fz_device *dev) +fz_text_drop_imp(fz_context *ctx, fz_device *dev) { - fz_text_device *tdev = dev->user; + fz_text_device *tdev = (fz_text_device*)dev; free_span_soup(ctx, tdev->spans); - fz_free(ctx, tdev); } fz_device * fz_new_text_device(fz_context *ctx, fz_text_sheet *sheet, fz_text_page *page) { - fz_device *dev; - - fz_text_device *tdev = fz_malloc_struct(ctx, fz_text_device); - tdev->sheet = sheet; - tdev->page = page; - tdev->spans = NULL; - tdev->cur_span = NULL; - tdev->lastchar = ' '; - - dev = fz_new_device(ctx, tdev); - dev->hints = FZ_IGNORE_IMAGE | FZ_IGNORE_SHADE; - dev->begin_page = fz_text_begin_page; - dev->end_page = fz_text_end_page; - dev->drop_user = fz_text_drop_user; - dev->fill_text = fz_text_fill_text; - dev->stroke_text = fz_text_stroke_text; - dev->clip_text = fz_text_clip_text; - dev->clip_stroke_text = fz_text_clip_stroke_text; - dev->ignore_text = fz_text_ignore_text; - dev->fill_image = fz_text_fill_image; - dev->fill_image_mask = fz_text_fill_image_mask; - - return dev; + fz_text_device *dev = fz_new_device(ctx, sizeof *dev); + + dev->super.hints = FZ_IGNORE_IMAGE | FZ_IGNORE_SHADE; + + dev->super.drop_imp = fz_text_drop_imp; + dev->super.begin_page = fz_text_begin_page; + dev->super.end_page = fz_text_end_page; + dev->super.fill_text = fz_text_fill_text; + dev->super.stroke_text = fz_text_stroke_text; + dev->super.clip_text = fz_text_clip_text; + dev->super.clip_stroke_text = fz_text_clip_stroke_text; + dev->super.ignore_text = fz_text_ignore_text; + dev->super.fill_image = fz_text_fill_image; + dev->super.fill_image_mask = fz_text_fill_image_mask; + + dev->sheet = sheet; + dev->page = page; + dev->spans = NULL; + dev->cur_span = NULL; + dev->lastchar = ' '; + + return (fz_device*)dev; } |