diff options
author | Sebastian Neuser <haggl@sineband.de> | 2013-08-15 20:04:23 +0200 |
---|---|---|
committer | Tor Andersson <tor.andersson@artifex.com> | 2014-05-27 14:25:55 +0200 |
commit | 955b7137fa4982b596ce0acf2fb7b9a497376320 (patch) | |
tree | ae9d3aa1ca8e2d49502c3d92994dc24284192d5d /platform/x11/pdfapp.c | |
parent | 0c041d7fc030a9bb25c76ad72a9a028e32a78de1 (diff) | |
download | mupdf-955b7137fa4982b596ce0acf2fb7b9a497376320.tar.xz |
Fix 694579: Implement "zoom to fit page".
Add a new function pdfapp_autozoom to fit the page to the window by comparing
the aspect ratios of the page and the window to choose whether to fit
horizontally or vertically.
Diffstat (limited to 'platform/x11/pdfapp.c')
-rw-r--r-- | platform/x11/pdfapp.c | 48 |
1 files changed, 36 insertions, 12 deletions
diff --git a/platform/x11/pdfapp.c b/platform/x11/pdfapp.c index 8f5b09ac..58b160e6 100644 --- a/platform/x11/pdfapp.c +++ b/platform/x11/pdfapp.c @@ -84,6 +84,7 @@ char *pdfapp_usage(pdfapp_t *app) "-\t\t-- zoom out\n" "W\t\t-- zoom to fit window width\n" "H\t\t-- zoom to fit window height\n" + "Z\t\t-- zoom to fit page\n" "w\t\t-- shrinkwrap\n" "f\t\t-- fullscreen\n" "r\t\t-- reload file\n" @@ -979,6 +980,36 @@ void pdfapp_onresize(pdfapp_t *app, int w, int h) } } +void pdfapp_autozoom_vertical(pdfapp_t *app) +{ + app->resolution *= (double) app->winh / (double) fz_pixmap_height(app->ctx, app->image); + if (app->resolution > MAXRES) + app->resolution = MAXRES; + else if (app->resolution < MINRES) + app->resolution = MINRES; + pdfapp_showpage(app, 0, 1, 1, 0, 0); +} + +void pdfapp_autozoom_horizontal(pdfapp_t *app) +{ + app->resolution *= (double) app->winw / (double) fz_pixmap_width(app->ctx, app->image); + if (app->resolution > MAXRES) + app->resolution = MAXRES; + else if (app->resolution < MINRES) + app->resolution = MINRES; + pdfapp_showpage(app, 0, 1, 1, 0, 0); +} + +void pdfapp_autozoom(pdfapp_t *app) +{ + float page_aspect = (float) fz_pixmap_width(app->ctx, app->image) / fz_pixmap_height(app->ctx, app->image); + float win_aspect = (float) app->winw / app->winh; + if (page_aspect > win_aspect) + pdfapp_autozoom_horizontal(app); + else + pdfapp_autozoom_vertical(app); +} + void pdfapp_onkey(pdfapp_t *app, int c) { int oldpage = app->pageno; @@ -1066,20 +1097,13 @@ void pdfapp_onkey(pdfapp_t *app, int c) break; case 'W': - app->resolution *= (double) app->winw / (double) fz_pixmap_width(app->ctx, app->image); - if (app->resolution > MAXRES) - app->resolution = MAXRES; - else if (app->resolution < MINRES) - app->resolution = MINRES; - pdfapp_showpage(app, 0, 1, 1, 0, 0); + pdfapp_autozoom_horizontal(app); break; case 'H': - app->resolution *= (double) app->winh / (double) fz_pixmap_height(app->ctx, app->image); - if (app->resolution > MAXRES) - app->resolution = MAXRES; - else if (app->resolution < MINRES) - app->resolution = MINRES; - pdfapp_showpage(app, 0, 1, 1, 0, 0); + pdfapp_autozoom_vertical(app); + break; + case 'Z': + pdfapp_autozoom(app); break; case 'L': |