summaryrefslogtreecommitdiff
path: root/platform/x11/pdfapp.c
diff options
context:
space:
mode:
authorSebastian Neuser <haggl@sineband.de>2013-08-15 20:04:23 +0200
committerTor Andersson <tor.andersson@artifex.com>2014-05-27 14:25:55 +0200
commit955b7137fa4982b596ce0acf2fb7b9a497376320 (patch)
treeae9d3aa1ca8e2d49502c3d92994dc24284192d5d /platform/x11/pdfapp.c
parent0c041d7fc030a9bb25c76ad72a9a028e32a78de1 (diff)
downloadmupdf-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.c48
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':