summaryrefslogtreecommitdiff
path: root/platform
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
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')
-rw-r--r--platform/x11/pdfapp.c48
-rw-r--r--platform/x11/pdfapp.h3
2 files changed, 39 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':
diff --git a/platform/x11/pdfapp.h b/platform/x11/pdfapp.h
index 0286f82d..b2ff78da 100644
--- a/platform/x11/pdfapp.h
+++ b/platform/x11/pdfapp.h
@@ -150,6 +150,9 @@ void pdfapp_oncopy(pdfapp_t *app, unsigned short *ucsbuf, int ucslen);
void pdfapp_onresize(pdfapp_t *app, int w, int h);
void pdfapp_gotopage(pdfapp_t *app, int number);
void pdfapp_reloadpage(pdfapp_t *app);
+void pdfapp_autozoom_horizontal(pdfapp_t *app);
+void pdfapp_autozoom_vertical(pdfapp_t *app);
+void pdfapp_autozoom(pdfapp_t *app);
void pdfapp_invert(pdfapp_t *app, const fz_rect *rect);
void pdfapp_inverthit(pdfapp_t *app);