diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2013-01-25 11:16:46 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2013-01-25 11:14:55 +0000 |
commit | 482330fb4a7ce5e4541a3741e0f014d4937f81fa (patch) | |
tree | 08ea493eb13fdf2a3329a9eea9986b17c2ff04fc | |
parent | 75b0f870e311a801790ad108f6dfa13cf42e461d (diff) |
poppler: Prettier page animation
-rw-r--r-- | poppler-demo.c | 32 |
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) { |