From 7b117e354cbc11d7dcd3a4a33177cf21e9ed22ef Mon Sep 17 00:00:00 2001 From: Matthias Hoelzer-Kluepfel Date: Mon, 15 May 2000 14:53:59 +0000 Subject: [PATCH] Zooming fixes. Has to be redone sometime soon. svn path=/trunk/kdegraphics/kdvi/; revision=49582 --- dviwin.cpp | 17 +++++++++++------ dviwin.h | 10 ++++++++-- kdvi_multipage.cpp | 17 +++++++++-------- 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/dviwin.cpp b/dviwin.cpp index 1520748e6..b6513d154 100644 --- a/dviwin.cpp +++ b/dviwin.cpp @@ -98,7 +98,7 @@ extern void qt_processEvents(void) //------ now comes the dviWindow class implementation ---------- -dviWindow::dviWindow( int bdpi, int zoom, const char *mfm, const char *ppr, int mkpk, QWidget *parent, const char *name ) +dviWindow::dviWindow( int bdpi, double zoom, const char *mfm, const char *ppr, int mkpk, QWidget *parent, const char *name ) : QWidget( parent, name ) { setBackgroundMode(NoBackground); @@ -126,8 +126,9 @@ dviWindow::dviWindow( int bdpi, int zoom, const char *mfm, const char *ppr, int pixmap = NULL; double xres = ((double)(DisplayWidth(DISP,(int)DefaultScreen(DISP)) *25.4)/DisplayWidthMM(DISP,(int)DefaultScreen(DISP)) ); //@@@ - double s = (basedpi * 100)/(xres*(double)zoom); + double s = basedpi/(xres*zoom); mane.shrinkfactor = currwin.shrinkfactor = s; + _zoom = zoom; resize(0,0); } @@ -381,6 +382,8 @@ void dviWindow::changePageSize() resize( page_w, page_h ); currwin.win = mane.win = pixmap->handle(); drawPage(); + + kdDebug() << "New Pixmap size = " << page_w << "x" << page_h << endl; } //------ setup the dvi interpreter (should do more here ?) ---------- @@ -418,14 +421,16 @@ int dviWindow::totalPages() } -void dviWindow::setZoom(int zoom) +void dviWindow::setZoom(double zoom) { - if ((zoom < 5) || (zoom > 500)) - zoom = 100; + // if ((zoom < 0.05) || (zoom > 5.0)) + // zoom = 1.0; double xres = ((double)(DisplayWidth(DISP,(int)DefaultScreen(DISP)) *25.4)/DisplayWidthMM(DISP,(int)DefaultScreen(DISP)) ); //@@@ - double s = (basedpi * 100)/(xres*(double)zoom); + double s = basedpi/(xres*zoom); mane.shrinkfactor = currwin.shrinkfactor = s; + _zoom = zoom; + init_page(); reset_fonts(); changePageSize(); diff --git a/dviwin.h b/dviwin.h index 4ba20d39c..16d3bdf43 100644 --- a/dviwin.h +++ b/dviwin.h @@ -19,7 +19,7 @@ class dviWindow : public QWidget Q_OBJECT public: - dviWindow( int basedpi, int zoom, const char *mfmode, const char *paper, int makepk, + dviWindow( int basedpi, double zoom, const char *mfmode, const char *paper, int makepk, QWidget *parent=0, const char *name=0 ); ~dviWindow(); @@ -45,7 +45,11 @@ public: public slots: void setFile(const char *fname); void gotoPage(int page); - void setZoom(int zoom); + // void setZoom(int zoom); + + void setZoom(double zoom); + double zoom() { return _zoom; }; + void drawPage(); protected: @@ -63,6 +67,8 @@ private: QString FontPath; QString paper_type; int ChangesPossible; + double _zoom; + }; #endif diff --git a/kdvi_multipage.cpp b/kdvi_multipage.cpp index e7c7dafe5..b6ab86f89 100644 --- a/kdvi_multipage.cpp +++ b/kdvi_multipage.cpp @@ -15,7 +15,6 @@ extern "C" { void *init_libkdvi() { - kdDebug() << "DVI Widget created!" << endl; return new KDVIMultiPageFactory; } }; @@ -59,7 +58,7 @@ KDVIMultiPage::KDVIMultiPage(QWidget *parent, const char *name) { setInstance(KDVIMultiPageFactory::instance()); - window = new dviWindow(300, 100, "cx", "a4", 1, scrollView()); + window = new dviWindow(300, 1.0, "cx", "a4", 0, scrollView()); scrollView()->addChild(window); } @@ -76,6 +75,8 @@ bool KDVIMultiPage::openFile() emit numberOfPages(window->totalPages()); scrollView()->resizeContents(window->width(), window->height()); + + return true; } @@ -90,27 +91,27 @@ QStringList KDVIMultiPage::fileFormats() bool KDVIMultiPage::gotoPage(int page) { - kdDebug() << "New Page number: " << page << endl; + window->gotoPage(page); return true; } void KDVIMultiPage::setZoom(double zoom) { - kdDebug() << "New Zoom Factor: " << zoom << endl; - - window->setZoom(zoom*100); + window->setZoom(zoom); scrollView()->resizeContents(window->width(), window->height()); } +extern unsigned int page_w, page_h; + double KDVIMultiPage::zoomForHeight(int height) { - return height/200.0; + return (window->zoom() * (double)height)/(double)page_h; } double KDVIMultiPage::zoomForWidth(int width) { - return width/300.0; + return (window->zoom() * (double)width)/(double)page_w; }