diff --git a/dviwin.cpp b/dviwin.cpp index 3adc55d2b..4f1711c61 100644 --- a/dviwin.cpp +++ b/dviwin.cpp @@ -139,9 +139,19 @@ dviWindow::dviWindow( int bdpi, double zoom, const QString & mfm, int mkpk, QWid Display *DISP = x11Display(); xres = ((double)(DisplayWidth(DISP,(int)DefaultScreen(DISP)) *25.4) / DisplayWidthMM(DISP,(int)DefaultScreen(DISP)) ); - + // Just to make sure that we are never dividing by zero. + if ((xres < 10)||(xres > 1000)) + xres = 75.0; + + // In principle, this method should never be called with illegal + // values for zoom. In principle. + if (zoom < KViewPart::minZoom/1000.0) + zoom = KViewPart::minZoom/1000.0; + if (zoom > KViewPart::maxZoom/1000.0) + zoom = KViewPart::maxZoom/1000.0; mane.shrinkfactor = currwin.shrinkfactor = (double)basedpi/(xres*zoom); _zoom = zoom; + PS_interface = new ghostscript_interface(0.0, 0, 0); is_current_page_drawn = 0; n_files_left = OPEN_MAX; @@ -459,8 +469,15 @@ int dviWindow::totalPages() } -void dviWindow::setZoom(double zoom) +double dviWindow::setZoom(double zoom) { + // In principle, this method should never be called with illegal + // values. In principle. + if (zoom < KViewPart::minZoom/1000.0) + zoom = KViewPart::minZoom/1000.0; + if (zoom > KViewPart::maxZoom/1000.0) + zoom = KViewPart::maxZoom/1000.0; + mane.shrinkfactor = currwin.shrinkfactor = basedpi/(xres*zoom); _zoom = zoom; @@ -469,6 +486,7 @@ void dviWindow::setZoom(double zoom) reset_fonts(); changePageSize(); + return _zoom; } @@ -495,9 +513,11 @@ void dviWindow::mousePressEvent ( QMouseEvent * e ) QString locallink = hyperLinkList[i].linkText.mid(1); // Drop the '#' at the beginning for(int j=0; j -#include #include #include +#include + +#include glyph::~glyph() { @@ -94,16 +96,22 @@ QPixmap glyph::shrunkCharacter() // Now shrinking may begin. Produce a QBitmap with the unshrunk // character. QBitmap bm(bitmap.bytes_wide*8, (int)bitmap.h, (const uchar *)(bitmap.bits) ,TRUE); - // ... turn it into a Pixmap (highly inefficient, please improve) SmallChar = new QPixmap(bitmap.w+pre_cols+post_cols, bitmap.h+pre_rows+post_rows); + if (SmallChar == 0) + return 0; + if (SmallChar->isNull()) { + delete SmallChar; + SmallChar = 0; + return 0; + } + QPainter paint(SmallChar); paint.setBackgroundColor(Qt::white); paint.setPen( Qt::black ); paint.fillRect(0,0,bitmap.w+pre_cols+post_cols, bitmap.h+pre_rows+post_rows, Qt::white); paint.drawPixmap(pre_cols, pre_rows, bm); paint.end(); - // Generate an Image and shrink it to the proper size. By the // documentation of smoothScale, the resulting Image will be // 8-bit. diff --git a/kdvi_multipage.cpp b/kdvi_multipage.cpp index fda9ab06c..4673511bf 100644 --- a/kdvi_multipage.cpp +++ b/kdvi_multipage.cpp @@ -21,6 +21,7 @@ #include "print.h" #include "optiondialog.h" #include "kdvi_multipage.moc" +#include "kviewpart.h" #include extern "C" @@ -74,7 +75,7 @@ KDVIMultiPage::KDVIMultiPage(QWidget *parentWidget, const char *widgetName, QObj window = new dviWindow(300, 1.0, "cx", true, scrollView()); preferencesChanged(); - new KAction(i18n("&DVI Options..."), 0, this, + new KAction(i18n("&DVI Options"), 0, this, SLOT(doSettings()), actionCollection(), "settings_dvi"); @@ -159,10 +160,15 @@ void KDVIMultiPage::goto_page(int page, int y) double KDVIMultiPage::setZoom(double zoom) { - window->setZoom(zoom); + if (zoom < KViewPart::minZoom/1000.0) + zoom = KViewPart::minZoom/1000.0; + if (zoom > KViewPart::maxZoom/1000.0) + zoom = KViewPart::maxZoom/1000.0; + + double z = window->setZoom(zoom); scrollView()->resizeContents(window->width(), window->height()); - return zoom; + return z; }