mupdf: support mupdf-1.2
authorAli Gholami Rudi <ali@rudi.ir>
Sun, 3 Mar 2013 19:53:58 +0000 (3 23:23 +0330)
committerAli Gholami Rudi <ali@rudi.ir>
Sun, 3 Mar 2013 19:53:58 +0000 (3 23:23 +0330)
mupdf.c

diff --git a/mupdf.c b/mupdf.c
index 69ec37f..089b788 100644 (file)
--- a/mupdf.c
+++ b/mupdf.c
@@ -14,36 +14,34 @@ struct doc {
 int doc_draw(struct doc *doc, int p, int zoom, int rotate,
                fbval_t *bitmap, int *rows, int *cols)
 {
-       fz_matrix ctm;
-       fz_bbox bbox;
+       fz_matrix ctm;          /* transform */
+       fz_rect rect;           /* bounds */
+       fz_irect bbox;          /* drawing bbox */
        fz_pixmap *pix;
        fz_device *dev;
        fz_page *page;
-       fz_rect rect;
        int h, w;
        int x, y;
 
        if (!(page = fz_load_page(doc->pdf, p - 1)))
                return 1;
-       ctm = fz_scale((float) zoom / 10, (float) -zoom / 10);
-       ctm = fz_concat(ctm, fz_translate(0, -100));
-       if (rotate)
-               ctm = fz_concat(ctm, fz_rotate(rotate));
-       rect = fz_bound_page(doc->pdf, page);
-       rect = fz_transform_rect(ctm, rect);
-       bbox = fz_round_rect(rect);
+       fz_rotate(&ctm, rotate);
+       fz_pre_scale(&ctm, (float) zoom / 10, (float) zoom / 10);
+       fz_bound_page(doc->pdf, page, &rect);
+       fz_transform_rect(&rect, &ctm);
+       fz_round_rect(&bbox, &rect);
        w = MIN_(*cols, rect.x1 - rect.x0);
        h = MIN_(*rows, rect.y1 - rect.y0);
 
-       pix = fz_new_pixmap_with_bbox(doc->ctx, fz_device_rgb, bbox);
+       pix = fz_new_pixmap_with_bbox(doc->ctx, fz_device_rgb, &bbox);
        fz_clear_pixmap_with_value(doc->ctx, pix, 0xff);
 
        dev = fz_new_draw_device(doc->ctx, pix);
-       fz_run_page(doc->pdf, page, dev, ctm, NULL);
+       fz_run_page(doc->pdf, page, dev, &ctm, NULL);
        fz_free_device(dev);
 
        for (y = 0; y < h; y++) {
-               int xs = (h - y - 1) * *cols + (*cols - w) / 2;
+               int xs = y * *cols + (*cols - w) / 2;
                for (x = 0; x < w; x++) {
                        unsigned char *s = fz_pixmap_samples(doc->ctx, pix) +
                                        y * fz_pixmap_width(doc->ctx, pix) * 4 + x * 4;