diff options
author | Mathieu Lonjaret <mathieu.lonjaret@gmail.com> | 2010-02-04 02:05:03 -0800 |
---|---|---|
committer | Russ Cox <rsc@swtch.com> | 2010-02-04 02:05:03 -0800 |
commit | d9e047e5d5560912da6d2860fa25e427322f08bb (patch) | |
tree | 27d21e7bffdb6520f996c1d71fb8af5bb0dbaabe /src/cmd/page/view.c | |
parent | 2d6da3763ec643f353a1c48e2e7a2ed7c25046a7 (diff) | |
download | plan9port-d9e047e5d5560912da6d2860fa25e427322f08bb.tar.gz plan9port-d9e047e5d5560912da6d2860fa25e427322f08bb.tar.bz2 plan9port-d9e047e5d5560912da6d2860fa25e427322f08bb.zip |
R=rsc
CC=codebot
http://codereview.appspot.com/193069
Diffstat (limited to 'src/cmd/page/view.c')
-rw-r--r-- | src/cmd/page/view.c | 105 |
1 files changed, 78 insertions, 27 deletions
diff --git a/src/cmd/page/view.c b/src/cmd/page/view.c index e9378dc6..315a22a8 100644 --- a/src/cmd/page/view.c +++ b/src/cmd/page/view.c @@ -145,8 +145,12 @@ showpage(int page, Menu *m) showbottom = 0; } - redraw(screen); - flushimage(display, 1); + if((doc->type == Tgfx) && fitwin) + fit(); + else{ + redraw(screen); + flushimage(display, 1); + } } char* @@ -252,6 +256,8 @@ viewer(Document *dd) Rectangle r; int size[2]; Image *tmp; + PDFInfo *pdf; + PSInfo *ps; static char *fwditems[] = { "this page", "next page", "exit", 0 }; static char *miditems[] = { "orig size", @@ -281,7 +287,7 @@ viewer(Document *dd) }; Alt alts[CN+1]; Plumbmsg *pm; - + cp = chancreate(sizeof pm, 0); assert(cp); @@ -542,7 +548,25 @@ viewer(Document *dd) zerox(); break; case Zin: /* zoom in */ - { + if (dd->type == Tpdf){ /* pdf */ + pdf = (PDFInfo *) dd->extra; + if (pdf != nil){ + ppi+= 50; + setdim(&pdf->gs, Rect(0,0,0,0), ppi, 0); + showpage(page, &menu); + } + break; + } + if (dd->type == Tps){ /* ps */ + ps = (PSInfo *) dd->extra; + if (ps != nil){ + ppi+= 50; + setdim(&ps->gs, Rect(0,0,0,0), ppi, 0); + showpage(page, &menu); + } + break; + } + else{ /* image */ double delta; Rectangle r; @@ -574,30 +598,12 @@ viewer(Document *dd) break; } case Fit: /* fit */ - { - double delta; - Rectangle r; - - delta = (double)Dx(screen->r)/(double)Dx(im->r); - if((double)Dy(im->r)*delta > Dy(screen->r)) - delta = (double)Dy(screen->r)/(double)Dy(im->r); - - r = Rect(0, 0, (int)((double)Dx(im->r)*delta), (int)((double)Dy(im->r)*delta)); - setcursor(mc, &reading); - tmp = xallocimage(display, r, im->chan, 0, DBlack); - if(tmp == nil) { - fprint(2, "out of memory during fit: %r\n"); - wexits("memory"); - } - resample(im, tmp); - im = tmp; - delayfreeimage(tmp); - setcursor(mc, nil); - ul = screen->r.min; - redraw(screen); - flushimage(display, 1); - break; + /* no op if pdf or ps*/ + if (dd->type == Tgfx){ + fitwin = 1; + fit(); } + break; case Rot: /* rotate 90 */ angle = (angle+90) % 360; showpage(page, &menu); @@ -607,6 +613,25 @@ viewer(Document *dd) showpage(page, &menu); break; case Restore: /* restore */ + if (dd->type == Tpdf){ /* pdf */ + pdf = (PDFInfo *) dd->extra; + if (pdf != nil){ + ppi = 100; + setdim(&pdf->gs, Rect(0,0,0,0), ppi, 0); + } + showpage(page, &menu); + break; + } + if (dd->type == Tps){ /* ps */ + ps = (PSInfo *) dd->extra; + if (ps != nil){ + ppi = 100; + setdim(&ps->gs, Rect(0,0,0,0), ppi, 0); + } + showpage(page, &menu); + break; + } + fitwin = 0; showpage(page, &menu); break; case Reverse: /* reverse */ @@ -1019,3 +1044,29 @@ zerox(void) writeimage(pfd[1], im, 0); close(pfd[1]); } + +void +fit() +{ + double delta; + Rectangle r; + Image* tmp; + + delta = (double)Dx(screen->r)/(double)Dx(im->r); + if((double)Dy(im->r)*delta > Dy(screen->r)) + delta = (double)Dy(screen->r)/(double)Dy(im->r); + r = Rect(0, 0, (int)((double)Dx(im->r)*delta), (int)((double)Dy(im->r)*delta)); + setcursor(mc, &reading); + tmp = xallocimage(display, r, im->chan, 0, DBlack); + if(tmp == nil) { + fprint(2, "out of memory during fit: %r\n"); + wexits("memory"); + } + resample(im, tmp); + im = tmp; + delayfreeimage(tmp); + setcursor(mc, nil); + ul = screen->r.min; + redraw(screen); + flushimage(display, 1); +} |