3 #include <poppler/cpp/poppler-document.h>
4 #include <poppler/cpp/poppler-image.h>
5 #include <poppler/cpp/poppler-page.h>
6 #include <poppler/cpp/poppler-page-renderer.h>
8 #define MIN(a, b) ((a) < (b) ? (a) : (b))
16 poppler::document
*doc
;
19 static poppler::rotation_enum
rotation(int times
)
22 return poppler::rotate_90
;
24 return poppler::rotate_180
;
26 return poppler::rotate_270
;
27 return poppler::rotate_0
;
30 void *doc_draw(struct doc
*doc
, int p
, int zoom
, int rotate
, int *rows
, int *cols
)
32 poppler::page
*page
= doc
->doc
->create_page(p
- 1);
33 poppler::page_renderer pr
;
38 pr
.set_render_hint(poppler::page_renderer::antialiasing
, true);
39 pr
.set_render_hint(poppler::page_renderer::text_antialiasing
, true);
40 poppler::image img
= pr
.render_page(page
, 72 * zoom
/ 10, 72 * zoom
/ 10,
41 -1, -1, -1, -1, rotation((rotate
+ 89) / 90));
44 dat
= (unsigned char *) img
.data();
45 if (!(pbuf
= (fbval_t
*) malloc(h
* w
* sizeof(pbuf
[0])))) {
49 for (y
= 0; y
< h
; y
++) {
50 unsigned char *s
= dat
+ img
.bytes_per_row() * y
;
51 for (x
= 0; x
< w
; x
++)
52 pbuf
[y
* w
+ x
] = FB_VAL(s
[x
* 4 + 2],
53 s
[x
* 4 + 1], s
[x
* 4 + 0]);
61 int doc_pages(struct doc
*doc
)
63 return doc
->doc
->pages();
66 struct doc
*doc_open(char *path
)
68 struct doc
*doc
= (struct doc
*) malloc(sizeof(*doc
));
69 doc
->doc
= poppler::document::load_from_file(path
);
77 void doc_close(struct doc
*doc
)