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

List:       kde-commits
Subject:    koffice/krita
From:       Casper Boemann <cbr () boemann ! dk>
Date:       2006-03-03 15:04:34
Message-ID: 1141398274.578830.398.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 515378 by boemann:

Improve the transform tool
The outline is updated correctly now
And the undo/redo and repeated transforms should work as well 
now

The quality and speed of the actual transformation has not 
been improved yet.


 M  +2 -0      core/kis_filter_strategy.h  
 M  +1 -0      core/kis_transform_worker.cc  
 M  +15 -22    plugins/tools/tool_transform/kis_tool_transform.cc  


--- trunk/koffice/krita/core/kis_filter_strategy.h #515377:515378
@@ -37,6 +37,7 @@
         virtual Q_UINT32 intValueAt(Q_INT32 t) const {return Q_UINT32(255*valueAt(t/256.0));};
         double support() { return supportVal;};
         Q_UINT32 intSupport() { return intSupportVal;};
+        virtual bool boxSpecial() { return false;};
     protected:
         double supportVal;
         Q_UINT32 intSupportVal;
@@ -63,6 +64,7 @@
 
         virtual Q_UINT32 intValueAt(Q_INT32 t) const;
         virtual double valueAt(double t) const;
+        virtual bool boxSpecial() { return true;};
 };
 
 class KisTriangleFilterStrategy : public KisFilterStrategy
--- trunk/koffice/krita/core/kis_transform_worker.cc #515377:515378
@@ -456,6 +456,7 @@
 
     //progress info
     emit notifyProgressDone();
+    m_dev->emitSelectionChanged();
 
     return m_cancelRequested;
 }
--- trunk/koffice/krita/plugins/tools/tool_transform/kis_tool_transform.cc #515377:515378
@@ -228,7 +228,7 @@
     m_translateX = m_org_cenX;
     m_translateY = m_org_cenY;
 
-    paintOutline();
+    m_subject -> canvasController() ->updateCanvas();
 }
 
 void KisToolTransform::paint(KisCanvasPainter& gc)
@@ -621,8 +621,6 @@
     QApplication::setOverrideCursor(KisCursor::waitCursor());
     paintOutline();
     transform();
-    m_subject -> canvasController() ->updateCanvas();
-    paintOutline();
     QApplication::restoreOverrideCursor();
 }
 
@@ -709,14 +707,6 @@
     if (!img || !img->activeDevice())
         return;
 
-    /*
-    double tx = m_translateX - m_org_cenX * m_scaleX;
-    double ty = m_translateY - m_org_cenY * m_scaleY;
-    */
-    
-    QRect rc = img->activeDevice()->extent();
-    rc = rc.normalize();
-
     double tx = m_translateX - rotX(m_org_cenX * m_scaleX, m_org_cenY * m_scaleY);
     double ty = m_translateY - rotY(m_org_cenX * m_scaleX, m_org_cenY * m_scaleY);
     KisProgressDisplayInterface *progress = m_subject->progressDisplay();
@@ -725,23 +715,27 @@
     TransformCmd * transaction = new TransformCmd(this, img->activeDevice().data(), m_scaleX,
                                                             m_scaleY, m_translateX, m_translateY, m_a, \
m_origSelection, m_startPos, m_endPos);  
-    // Copy the original state back -- this should be optimized by
-    // doing only the dirty rect(s). However, that's for Casper to figure out.
+    // Copy the original state back.
+    QRect rc = m_origDevice->extent();
+    rc = rc.normalize();
+    img->activeDevice()->clear();
     KisPainter gc(img->activeDevice());
-    gc.bitBlt(0, 0, COMPOSITE_COPY, m_origDevice, rc.x(), rc.y(), rc.width(), rc.height());
+    gc.bitBlt(rc.x(), rc.y(), COMPOSITE_COPY, m_origDevice, rc.x(), rc.y(), rc.width(), rc.height());
     gc.end();
 
-    // Also restore the original selection. XXX: Not sure whether this
-    // works with the undo.
+    // Also restore the original selection.
     if(m_origSelection)
     {
-//        img->activeDevice()->setSelection(m_origSelection);
+        QRect rc = m_origSelection->extent();
+        rc = rc.normalize();
+        img->activeDevice()->selection()->clear();
         KisPainter sgc(img->activeDevice()->selection().data());
-        sgc.bitBlt(0, 0, COMPOSITE_COPY, m_origSelection.data(), rc.x(), rc.y(), rc.width(), \
rc.height()); +        sgc.bitBlt(rc.x(), rc.y(), COMPOSITE_COPY, m_origSelection.data(), rc.x(), rc.y(), \
rc.width(), rc.height());  sgc.end();
     }
     else
-        img->activeDevice()->deselect();
+        if(img->activeDevice()->hasSelection())
+            img->activeDevice()->selection()->clear();
 
     // Perform the transform. Since we copied the original state back, this doesn't degrade
     // after many tweaks. Since we started the transaction before the copy back, the memento
@@ -757,7 +751,7 @@
         return;
     }
 
-    img->activeDevice()->setDirty(rc);
+    img->activeDevice()->setDirty(rc); // XXX: This is not enough - should union with new extent
 
     // Else add the command -- this will have the memento from the previous state,
     // and the transformed state from the original device we cached in our activated()
@@ -795,10 +789,9 @@
     {
         // One of our commands is now on top
         // We should ask for tool args and orig selection
-        paintOutline();
         cmd->transformArgs(m_scaleX, m_scaleY, m_translateX, m_translateY, m_a);
         m_origSelection = cmd->origSelection(m_startPos, m_endPos);
-        paintOutline();
+        m_subject -> canvasController() ->updateCanvas();
     }
 }
 


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

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