diff options
author | Tor Andersson <tor.andersson@artifex.com> | 2015-01-21 16:42:45 +0100 |
---|---|---|
committer | Tor Andersson <tor.andersson@artifex.com> | 2015-02-17 18:05:39 +0100 |
commit | f84a189d5f94250e46d2cbd1a75aba00130e2dd6 (patch) | |
tree | 8ee614ab90de1baa8941f91ae4946ed5c2e70721 /source/img | |
parent | 681039767f2ccc72e236246178893eb0989169c9 (diff) | |
download | mupdf-f84a189d5f94250e46d2cbd1a75aba00130e2dd6.tar.xz |
Add ctx parameter and remove embedded contexts for API regularity.
Purge several embedded contexts:
Remove embedded context in fz_output.
Remove embedded context in fz_stream.
Remove embedded context in fz_device.
Remove fz_rebind_stream (since it is no longer necessary).
Remove embedded context in svg_device.
Remove embedded context in XML parser.
Add ctx argument to fz_document functions.
Remove embedded context in fz_document.
Remove embedded context in pdf_document.
Remove embedded context in pdf_obj.
Make fz_page independent of fz_document in the interface.
We shouldn't need to pass the document to all functions handling a page.
If a page is tied to the source document, it's redundant; otherwise it's
just pointless.
Fix reference counting oddity in fz_new_image_from_pixmap.
Diffstat (limited to 'source/img')
-rw-r--r-- | source/img/muimage.c | 190 |
1 files changed, 0 insertions, 190 deletions
diff --git a/source/img/muimage.c b/source/img/muimage.c deleted file mode 100644 index 30f9b043..00000000 --- a/source/img/muimage.c +++ /dev/null @@ -1,190 +0,0 @@ -#include "mupdf/img.h" - -#include <ctype.h> /* for tolower */ - -#define DPI 72.0f - -static void image_init_document(image_document *doc); - -struct image_document_s -{ - fz_document super; - - fz_context *ctx; - fz_stream *file; - fz_image *image; -}; - -image_document * -image_open_document_with_stream(fz_context *ctx, fz_stream *file) -{ - image_document *doc; - fz_buffer *buffer = NULL; - - doc = fz_malloc_struct(ctx, image_document); - image_init_document(doc); - doc->ctx = ctx; - doc->file = fz_keep_stream(file); - - fz_var(buffer); - - fz_try(ctx) - { - buffer = fz_read_all(doc->file, 1024); - doc->image = fz_new_image_from_buffer(ctx, buffer); - } - fz_always(ctx) - { - fz_drop_buffer(ctx, buffer); - } - fz_catch(ctx) - { - image_close_document(doc); - fz_rethrow(ctx); - } - - return doc; -} - -image_document * -image_open_document(fz_context *ctx, const char *filename) -{ - fz_stream *file; - image_document *doc; - - file = fz_open_file(ctx, filename); - if (!file) - fz_throw(ctx, FZ_ERROR_GENERIC, "cannot open file '%s': %s", filename, strerror(errno)); - - fz_try(ctx) - { - doc = image_open_document_with_stream(ctx, file); - } - fz_always(ctx) - { - fz_drop_stream(file); - } - fz_catch(ctx) - { - fz_rethrow(ctx); - } - - return doc; -} - -void -image_close_document(image_document *doc) -{ - fz_context *ctx = doc->ctx; - fz_drop_image(ctx, doc->image); - fz_drop_stream(doc->file); - fz_free(ctx, doc); -} - -int -image_count_pages(image_document *doc) -{ - return 1; -} - -image_page * -image_load_page(image_document *doc, int number) -{ - if (number != 0) - return NULL; - - return (image_page *)doc->image; -} - -void -image_free_page(image_document *doc, image_page *page) -{ -} - -fz_rect * -image_bound_page(image_document *doc, image_page *page, fz_rect *bbox) -{ - fz_image *image = (fz_image *)page; - int xres, yres; - fz_image_get_sanitised_res(image, &xres, &yres); - bbox->x0 = bbox->y0 = 0; - bbox->x1 = image->w * DPI / xres; - bbox->y1 = image->h * DPI / yres; - return bbox; -} - -void -image_run_page(image_document *doc, image_page *page, fz_device *dev, const fz_matrix *ctm, fz_cookie *cookie) -{ - fz_matrix local_ctm = *ctm; - fz_image *image = (fz_image *)page; - int xres, yres; - float w, h; - fz_image_get_sanitised_res(image, &xres, &yres); - w = image->w * DPI / xres; - h = image->h * DPI / yres; - fz_pre_scale(&local_ctm, w, h); - fz_fill_image(dev, image, &local_ctm, 1); -} - -static int -image_meta(image_document *doc, int key, void *ptr, int size) -{ - switch(key) - { - case FZ_META_FORMAT_INFO: - sprintf((char *)ptr, "IMAGE"); - return FZ_META_OK; - default: - return FZ_META_UNKNOWN_KEY; - } -} - -static void -image_rebind(image_document *doc, fz_context *ctx) -{ - doc->ctx = ctx; - fz_rebind_stream(doc->file, ctx); -} - -static void -image_init_document(image_document *doc) -{ - doc->super.refs = 1; - doc->super.close = (fz_document_close_fn *)image_close_document; - doc->super.count_pages = (fz_document_count_pages_fn *)image_count_pages; - doc->super.load_page = (fz_document_load_page_fn *)image_load_page; - doc->super.bound_page = (fz_document_bound_page_fn *)image_bound_page; - doc->super.run_page_contents = (fz_document_run_page_contents_fn *)image_run_page; - doc->super.free_page = (fz_document_free_page_fn *)image_free_page; - doc->super.meta = (fz_document_meta_fn *)image_meta; - doc->super.rebind = (fz_document_rebind_fn *)image_rebind; -} - -static int -image_recognize(fz_context *doc, const char *magic) -{ - char *ext = strrchr(magic, '.'); - - if (ext) - { - if (!fz_strcasecmp(ext, ".png") || !fz_strcasecmp(ext, ".jpg") || - !fz_strcasecmp(ext, ".jpeg") || !fz_strcasecmp(ext, ".jfif") || - !fz_strcasecmp(ext, ".jfif-tbnl") || !fz_strcasecmp(ext, ".jpe")) - return 100; - } - if (!strcmp(magic, "png") || !strcmp(magic, "image/png") || - !strcmp(magic, "jpg") || !strcmp(magic, "image/jpeg") || - !strcmp(magic, "jpeg") || !strcmp(magic, "image/pjpeg") || - !strcmp(magic, "jpe") || !strcmp(magic, "jfif")) - return 100; - - return 0; -} - -fz_document_handler img_document_handler = -{ - (fz_document_recognize_fn *)&image_recognize, - (fz_document_open_fn *)&image_open_document, - (fz_document_open_with_stream_fn *)&image_open_document_with_stream -}; |