summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2013-01-25 11:16:46 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2013-01-25 11:14:55 +0000
commit482330fb4a7ce5e4541a3741e0f014d4937f81fa (patch)
tree08ea493eb13fdf2a3329a9eea9986b17c2ff04fc
parent75b0f870e311a801790ad108f6dfa13cf42e461d (diff)
poppler: Prettier page animation
-rw-r--r--poppler-demo.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/poppler-demo.c b/poppler-demo.c
index e840eac..92976f9 100644
--- a/poppler-demo.c
+++ b/poppler-demo.c
@@ -76,25 +76,44 @@ main (int argc, char **argv)
struct framebuffer *fb;
PopplerPage *page;
double page_width, page_height;
- double sf_x, sf_y, sf;
+ double sf_x, sf_y, sf, x;
+ int i = 0;
fb = device->get_framebuffer (device);
- page = poppler_document_get_page (document, n++ % num_pages);
-
cr = cairo_create (fb->surface);
cairo_set_source_rgb (cr, 1, 1, 1);
cairo_paint (cr);
+ page = poppler_document_get_page (document, (n >> 2) % num_pages);
poppler_page_get_size (page, &page_width, &page_height);
sf_x = device->width / page_width;
sf_y = device->height / page_height;
sf = MIN (sf_x, sf_y);
+ x = -sf * page_width * (n & 3) / 4;
cairo_save(cr);
- cairo_scale (cr, sf, sf);
-
- poppler_page_render (page, cr);
+ cairo_translate (cr, x, 0);
+ do {
+ cairo_save(cr);
+ cairo_scale (cr, sf, sf);
+
+ poppler_page_render (page, cr);
+ cairo_restore(cr);
+
+ x += sf * page_width;
+ if (x > device->width)
+ break;
+
+ cairo_translate (cr, sf*page_width, 0);
+ g_object_unref (page);
+
+ page = poppler_document_get_page (document, (++i+ (n >> 2)) % num_pages);
+ poppler_page_get_size (page, &page_width, &page_height);
+ sf_x = device->width / page_width;
+ sf_y = device->height / page_height;
+ sf = MIN (sf_x, sf_y);
+ } while (1);
cairo_restore(cr);
g_object_unref (page);
@@ -106,6 +125,7 @@ main (int argc, char **argv)
fb->show (fb);
fb->destroy (fb);
+ n++;
} while (!done);
if (benchmark < 0) {