poppler: fix wrong parameter name in doc_draw()
[fbpdf.git] / poppler.c
blob2ab78f420cb775be4252d5eb235a3baa50bc0697
1 #include <stdlib.h>
2 #include <string.h>
3 #include <cairo/cairo.h>
4 #include <glib/poppler.h>
5 #include "doc.h"
7 struct doc {
8 PopplerDocument *doc;
9 };
11 int doc_draw(struct doc *doc, int p, int zoom, int rotate,
12 fbval_t *bitmap, int *rows, int *cols)
14 cairo_t *cairo;
15 cairo_surface_t *surface;
16 PopplerPage *page;
17 unsigned char *img;
18 int i, j;
19 int h, w;
20 int iw;
21 surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, *cols, *rows);
22 cairo = cairo_create(surface);
23 cairo_scale(cairo, (float) zoom / 10, (float) zoom / 10);
24 cairo_set_source_rgb(cairo, 1.0, 1.0, 1.0);
25 cairo_paint(cairo);
26 img = cairo_image_surface_get_data(surface);
27 page = poppler_document_get_page(doc->doc, p - 1);
28 poppler_page_render(page, cairo);
29 iw = cairo_image_surface_get_width(surface);
30 h = MIN(*rows, cairo_image_surface_get_height(surface));
31 w = MIN(*cols, iw);
32 for (i = 0; i < h; i++) {
33 for (j = 0; j < w; j++) {
34 unsigned char *s = img + (i * iw + j) * 4;
35 bitmap[i * *cols + j] = FB_VAL(*(s + 2), *(s + 1), *s);
38 cairo_destroy(cairo);
39 cairo_surface_destroy(surface);
40 g_object_unref(G_OBJECT(page));
41 *cols = w;
42 *rows = h;
43 return 0;
46 int doc_pages(struct doc *doc)
48 return poppler_document_get_n_pages(doc->doc);
51 struct doc *doc_open(char *path)
53 struct doc *doc = malloc(sizeof(*doc));
54 char abspath[PATH_MAX];
55 char uri[PATH_MAX + 16];
56 realpath(path, abspath);
57 snprintf(uri, sizeof(uri), "file://%s", abspath);
58 g_type_init();
59 doc->doc = poppler_document_new_from_file(uri, NULL, NULL);
60 return doc;
63 void doc_close(struct doc *doc)
65 g_object_unref(G_OBJECT(doc->doc));
66 free(doc);