9 fz_glyphcache
*glyphcache
;
13 int doc_draw(struct doc
*doc
, fbval_t
*bitmap
, int p
, int rows
, int cols
, int zoom
)
24 pageobj
= pdf_getpageobject(doc
->xref
, p
);
25 if (pdf_loadpage(&page
, doc
->xref
, pageobj
))
27 list
= fz_newdisplaylist();
28 dev
= fz_newlistdevice(list
);
29 if (pdf_runpage(doc
->xref
, page
, dev
, fz_identity
))
33 ctm
= fz_translate(0, -page
->mediabox
.y1
);
34 ctm
= fz_concat(ctm
, fz_scale((float) zoom
/ 10, (float) -zoom
/ 10));
35 bbox
= fz_roundrect(fz_transformrect(ctm
, page
->mediabox
));
36 w
= bbox
.x1
- bbox
.x0
;
37 h
= bbox
.y1
- bbox
.y0
;
39 pix
= fz_newpixmapwithrect(fz_devicergb
, bbox
);
40 fz_clearpixmap(pix
, 0xff);
42 dev
= fz_newdrawdevice(doc
->glyphcache
, pix
);
43 fz_executedisplaylist(list
, dev
, ctm
);
46 for (y
= 0; y
< MIN(pix
->h
, rows
); y
++) {
47 for (x
= 0; x
< MIN(pix
->w
, cols
); x
++) {
48 unsigned char *s
= pix
->samples
+ y
* pix
->w
* 4 + x
* 4;
49 bitmap
[y
* cols
+ x
] = fb_color(s
[0], s
[1], s
[2]);
54 fz_freedisplaylist(list
);
56 pdf_agestore(doc
->xref
->store
, 3);
60 int doc_pages(struct doc
*doc
)
62 return pdf_getpagecount(doc
->xref
);
65 struct doc
*doc_open(char *path
)
67 struct doc
*doc
= malloc(sizeof(*doc
));
69 doc
->glyphcache
= fz_newglyphcache();
70 if (pdf_openxref(&doc
->xref
, path
, NULL
)) {
74 if (pdf_loadpagetree(doc
->xref
)) {
81 void doc_close(struct doc
*doc
)
83 pdf_freexref(doc
->xref
);
84 fz_freeglyphcache(doc
->glyphcache
);