[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    extragear/graphics/digikam
From:       Antonio Larrosa Jimenez <larrosa () kde ! org>
Date:       2007-04-11 1:09:14
Message-ID: 1176253754.121038.6716.nullmailer () svn ! kde ! org
[Download RAW message or body]

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));
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic