From kde-commits Wed Apr 11 01:09:14 2007 From: Antonio Larrosa Jimenez Date: Wed, 11 Apr 2007 01:09:14 +0000 To: kde-commits Subject: extragear/graphics/digikam Message-Id: <1176253754.121038.6716.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=117625349908612 SVN commit 652434 by antlarr: Fixed a precision problem that produced some artifacts when zooming images in the preview and canvas since a wrong tile was chosen when painting. CCBUGS: 140131 M +6 -6 digikam/imagepreviewwidget.cpp M +16 -20 utilities/imageeditor/canvas/canvas.cpp --- trunk/extragear/graphics/digikam/digikam/imagepreviewwidget.cpp #652433:652434 @@ -265,8 +265,8 @@ pix->fill(d->bgColor); - sx = (int)floor(((double)i / d->zoom) / (d->tileSize / d->zoom)) * step; - sy = (int)floor(((double)j / d->zoom) / (d->tileSize / d->zoom)) * step; + sx = (int)floor((double)i / d->tileSize ) * step; + sy = (int)floor((double)j / d->tileSize ) * step; sw = step; sh = step; @@ -427,8 +427,8 @@ double cpx = contentsX() + visibleWidth() / 2.0; double cpy = contentsY() + visibleHeight() / 2.0; - cpx = ((cpx / d->zoom) / (d->tileSize / d->zoom)) * floor(d->tileSize / d->zoom); - cpy = ((cpy / d->zoom) / (d->tileSize / d->zoom)) * floor(d->tileSize / d->zoom); + cpx = ( cpx / d->tileSize ) * floor(d->tileSize / d->zoom); + cpy = ( cpy / d->tileSize ) * floor(d->tileSize / d->zoom); // To limit precision of zoom value and reduce error with check of max/min zoom. d->zoom = floor(zoom * 10000.0) / 10000.0; @@ -438,8 +438,8 @@ updateContentsSize(); viewport()->setUpdatesEnabled(false); - center((int)(((cpx * d->zoom) * (d->tileSize / d->zoom)) / floor(d->tileSize / d->zoom)), - (int)(((cpy * d->zoom) * (d->tileSize / d->zoom)) / floor(d->tileSize / d->zoom))); + center((int)((cpx * d->tileSize ) / floor(d->tileSize / d->zoom)), + (int)((cpy * d->tileSize ) / floor(d->tileSize / d->zoom))); viewport()->setUpdatesEnabled(true); viewport()->update(); --- trunk/extragear/graphics/digikam/utilities/imageeditor/canvas/canvas.cpp #652433:652434 @@ -433,10 +433,10 @@ { int xSel, ySel, wSel, hSel; d->im->getSelectedArea(xSel, ySel, wSel, hSel); - xSel = (int)(((xSel * d->zoom) * (d->tileSize / d->zoom)) / floor(d->tileSize / d->zoom)); - ySel = (int)(((ySel * d->zoom) * (d->tileSize / d->zoom)) / floor(d->tileSize / d->zoom)); - wSel = (int)(((wSel * d->zoom) * (d->tileSize / d->zoom)) / floor(d->tileSize / d->zoom)); - hSel = (int)(((hSel * d->zoom) * (d->tileSize / d->zoom)) / floor(d->tileSize / d->zoom)); + xSel = (int)((xSel * d->tileSize) / floor(d->tileSize / d->zoom)); + ySel = (int)((ySel * d->tileSize) / floor(d->tileSize / d->zoom)); + wSel = (int)((wSel * d->tileSize) / floor(d->tileSize / d->zoom)); + hSel = (int)((hSel * d->tileSize) / floor(d->tileSize / d->zoom)); d->rubber->setX(xSel); d->rubber->setY(ySel); d->rubber->setWidth(wSel); @@ -550,8 +550,8 @@ // The new implementation below fix this problem to handle properly the areas to // use from the source image to generate the canvas pixmap tiles. - sx = (int)floor(((double)i / d->zoom) / (d->tileSize / d->zoom)) * step; - sy = (int)floor(((double)j / d->zoom) / (d->tileSize / d->zoom)) * step; + sx = (int)floor((double)i / d->tileSize) * step; + sy = (int)floor((double)j / d->tileSize) * step; sw = step; sh = step; @@ -933,8 +933,8 @@ double cpx = contentsX() + visibleWidth() / 2.0; double cpy = contentsY() + visibleHeight() / 2.0; - cpx = ((cpx / d->zoom) / (d->tileSize / d->zoom)) * floor(d->tileSize / d->zoom); - cpy = ((cpy / d->zoom) / (d->tileSize / d->zoom)) * floor(d->tileSize / d->zoom); + cpx = (cpx / d->tileSize) * floor(d->tileSize / d->zoom); + cpy = (cpy / d->tileSize) * floor(d->tileSize / d->zoom); d->zoom = zoom; @@ -942,8 +942,8 @@ updateContentsSize(false); viewport()->setUpdatesEnabled(false); - center((int)(((cpx * d->zoom) * (d->tileSize / d->zoom)) / floor(d->tileSize / d->zoom)), - (int)(((cpy * d->zoom) * (d->tileSize / d->zoom)) / floor(d->tileSize / d->zoom))); + center((int)((cpx * d->tileSize) / floor(d->tileSize / d->zoom)), + (int)((cpy * d->tileSize) / floor(d->tileSize / d->zoom))); viewport()->setUpdatesEnabled(true); viewport()->update(); @@ -974,8 +974,8 @@ updateContentsSize(true); viewport()->setUpdatesEnabled(false); - center((int)(((cpx * d->zoom) * (d->tileSize / d->zoom)) / floor(d->tileSize / d->zoom)), - (int)(((cpy * d->zoom) * (d->tileSize / d->zoom)) / floor(d->tileSize / d->zoom))); + center((int)((cpx * d->tileSize) / floor(d->tileSize / d->zoom)), + (int)((cpy * d->tileSize) / floor(d->tileSize / d->zoom))); viewport()->setUpdatesEnabled(true); viewport()->update(); @@ -1194,17 +1194,13 @@ { r.moveBy(- d->pixmapRect.x(), - d->pixmapRect.y()); - int step = (int)floor(d->tileSize / d->zoom); + x = (int)(((double)r.x() / d->tileSize) * floor(d->tileSize / d->zoom)); + y = (int)(((double)r.y() / d->tileSize) * floor(d->tileSize / d->zoom)); + w = (int)(((double)r.width() / d->tileSize) * floor(d->tileSize / d->zoom)); + h = (int)(((double)r.height() / d->tileSize) * floor(d->tileSize / d->zoom)); - x = (int)((((double)r.x() / d->zoom) / (d->tileSize / d->zoom)) * step); - y = (int)((((double)r.y() / d->zoom) / (d->tileSize / d->zoom)) * step); - - w = (int)((((double)r.width() / d->zoom) / (d->tileSize / d->zoom)) * step); - h = (int)((((double)r.height() / d->zoom) / (d->tileSize / d->zoom)) * step); - x = QMIN(imageWidth(), QMAX(x, 0)); y = QMIN(imageHeight(), QMAX(y, 0)); - w = QMIN(imageWidth(), QMAX(w, 0)); h = QMIN(imageHeight(), QMAX(h, 0));