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

List:       kde-commits
Subject:    koffice/krita/image
From:       Boudewijn Rempt <boud () valdyas ! org>
Date:       2007-10-24 19:36:07
Message-ID: 1193254567.542739.17154.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 728961 by rempt:

Add KisSelectionSP as an argument to the constructors of
the painters & use it whereever the painters used to use
a selection from the paint device (just ported, not tested
yet)


 M  +10 -4     kis_convolution_painter.cc  
 M  +2 -1      kis_convolution_painter.h  
 M  +19 -11    kis_fill_painter.cc  
 M  +9 -1      kis_fill_painter.h  
 M  +25 -6     kis_painter.cc  
 M  +6 -2      kis_painter.h  


--- trunk/koffice/krita/image/kis_convolution_painter.cc #728960:728961
@@ -79,22 +79,28 @@
 {
 }
 
-KisConvolutionPainter::KisConvolutionPainter(KisPaintDeviceSP device) : KisPainter(device)
+KisConvolutionPainter::KisConvolutionPainter(KisPaintDeviceSP device)
+    : KisPainter(device)
 {
 }
 
+KisConvolutionPainter::KisConvolutionPainter(KisPaintDeviceSP device, KisSelectionSP selection)
+: KisPainter(device, selection)
+{
+}
+
+
 void KisConvolutionPainter::applyMatrix(KisKernelSP kernel, qint32 x, qint32 y, qint32 w, qint32 h,
                                         KisConvolutionBorderOp borderOp )
 {
     // Make the area we cover as small as possible
-    if (m_device->hasSelection()) {
+    if ( m_selection ) {
 
-        QRect r = m_device->selection()->selectedRect().intersect(QRect(x, y, w, h));
+        QRect r = m_selection->selectedRect().intersect(QRect(x, y, w, h));
         x = r.x();
         y = r.y();
         w = r.width();
         h = r.height();
-
     }
 
     if ( w == 0 && h == 0 ) return;
--- trunk/koffice/krita/image/kis_convolution_painter.h #728960:728961
@@ -63,7 +63,8 @@
 public:
 
     KisConvolutionPainter();
-    KisConvolutionPainter(KisPaintDeviceSP device);
+    KisConvolutionPainter(KisPaintDeviceSP device );
+    KisConvolutionPainter(KisPaintDeviceSP device, KisSelectionSP selection);
 
     /**
      * Convolve all channels in src using the specified kernel; there is only one kernel for all
--- trunk/koffice/krita/image/kis_fill_painter.cc #728960:728961
@@ -62,15 +62,23 @@
 KisFillPainter::KisFillPainter()
     : KisPainter()
 {
-    m_width = m_height = -1;
-    m_sampleMerged = false;
-    m_careForSelection = false;
-    m_fuzzy = false;
+    initFillPainter();
 }
 
 KisFillPainter::KisFillPainter(KisPaintDeviceSP device)
     : KisPainter(device)
 {
+    initFillPainter();
+}
+
+KisFillPainter::KisFillPainter(KisPaintDeviceSP device, KisSelectionSP selection)
+    : KisPainter( device, selection )
+{
+    initFillPainter();
+}
+
+void KisFillPainter::initFillPainter()
+{
     m_width = m_height = -1;
     m_sampleMerged = false;
     m_careForSelection = false;
@@ -182,7 +190,7 @@
     m_size = m_width * m_height;
 
     // Create a selection from the surrounding area
-    m_selection = createFloodSelection(startX, startY, projection);
+    m_fillSelection = createFloodSelection(startX, startY, projection);
 }
 
 void KisFillPainter::genericFillEnd(KisPaintDeviceSP filled) {
@@ -191,10 +199,10 @@
         return;
     }
 
-    QRect rc = m_selection->selectedExactRect();
+    QRect rc = m_fillSelection->selectedExactRect();
 
     // Sets dirty!
-    bltMask(rc.x(), rc.y(), m_compositeOp, filled, m_selection, m_opacity,
+    bltMask(rc.x(), rc.y(), m_compositeOp, filled, m_fillSelection, m_opacity,
                  rc.x(), rc.y(), rc.width(), rc.height());
 
     emit notifyProgressDone();
@@ -217,8 +225,8 @@
 // correct! (BSAR)
 
     if (m_width < 0 || m_height < 0) {
-        if (m_device->hasSelection() && m_careForSelection) {
-            QRect rc = m_device->selection()->selectedExactRect();
+        if (m_selection && m_careForSelection) {
+            QRect rc = m_selection->selectedExactRect();
             m_width = rc.width() - (startX - rc.x());
             m_height = rc.height() - (startY - rc.y());
         }
@@ -271,10 +279,10 @@
     int progressPercent = 0; int pixelsDone = 0; int currentPercent = 0;
     emit notifyProgressStage(i18n("Making fill outline..."), 0);
 
-    bool hasSelection = m_careForSelection && sourceDevice->hasSelection();
+    bool hasSelection = m_careForSelection && m_selection;
     KisSelectionSP srcSel = KisSelectionSP(0);
     if (hasSelection) {
-        srcSel = sourceDevice->selection();
+        srcSel = m_selection;
         if(!srcSel->hasPixelSelection())
             srcSel->setPixelSelection(KisPixelSelectionSP(new KisPixelSelection(sourceDevice)));
     }
--- trunk/koffice/krita/image/kis_fill_painter.h #728960:728961
@@ -52,6 +52,14 @@
      */
     KisFillPainter(KisPaintDeviceSP device);
 
+    KisFillPainter(KisPaintDeviceSP device, KisSelectionSP selection);
+
+private:
+
+    void initFillPainter();
+
+public:
+
     /**
      * Fill a rectangle with black transparent pixels (0, 0, 0, 0 for RGBA).
      */
@@ -177,7 +185,7 @@
     void genericFillStart(int startX, int startY, KisPaintDeviceSP projection);
     void genericFillEnd(KisPaintDeviceSP filled);
 
-    KisPixelSelectionSP m_selection;
+    KisPixelSelectionSP m_fillSelection;
 
     int m_threshold;
     int m_size;
--- trunk/koffice/krita/image/kis_painter.cc #728960:728961
@@ -64,17 +64,27 @@
 #define BEZIER_FLATNESS_THRESHOLD 0.5
 
 KisPainter::KisPainter()
+    : m_selection( 0 )
 {
     init();
 }
 
-KisPainter::KisPainter(KisPaintDeviceSP device)
+KisPainter::KisPainter( KisPaintDeviceSP device )
+    : m_selection( 0 )
 {
     init();
     Q_ASSERT(device);
     begin(device);
 }
 
+KisPainter::KisPainter(KisPaintDeviceSP device, KisSelectionSP selection)
+    : m_selection(selection)
+{
+    init();
+    Q_ASSERT(device);
+    begin(device);
+}
+
 void KisPainter::init()
 {
     m_transaction = 0;
@@ -102,10 +112,15 @@
     end();
 }
 
-void KisPainter::begin(KisPaintDeviceSP device)
+void KisPainter::begin( KisPaintDeviceSP device )
 {
+    begin( device, 0 );
+}
+
+void KisPainter::begin( KisPaintDeviceSP device, KisSelectionSP selection )
+{
     if (!device) return;
-
+    m_selection = selection;
     Q_ASSERT( device->colorSpace() );
 
     if (m_transaction) {
@@ -118,6 +133,9 @@
     m_pixelSize = device->pixelSize();
 }
 
+
+
+
 QUndoCommand *KisPainter::end()
 {
     return endTransaction();
@@ -496,11 +514,12 @@
                               qint32 sw, qint32 sh)
 {
     if (m_device.isNull()) return;
-    if (!m_device->hasSelection()) {
+    if ( !m_selection ) {
         bitBlt(dx, dy, op, srcdev, opacity, sx, sy, sw, sh);
     }
-    else
-        bltSelection(dx,dy,op,srcdev, m_device->selection(),opacity,sx,sy,sw,sh);
+    else {
+        bltSelection(dx, dy, op, srcdev, m_selection, opacity, sx, sy, sw, sh );
+    }
 }
 
 double KisPainter::paintLine(const KisPaintInformation &pi1,
--- trunk/koffice/krita/image/kis_painter.h #728960:728961
@@ -63,8 +63,10 @@
 public:
     /// Construct painter without a device
     KisPainter();
+
     /// Construct a painter, and begin painting on the device
-    KisPainter(KisPaintDeviceSP device);
+    KisPainter( KisPaintDeviceSP device );
+    KisPainter(KisPaintDeviceSP device, KisSelectionSP selection);
     virtual ~KisPainter();
 
 private:
@@ -75,7 +77,8 @@
     /**
      * Start painting on the specified device. Not undoable.
      */
-    void begin(KisPaintDeviceSP device);
+    void begin( KisPaintDeviceSP device );
+    void begin( KisPaintDeviceSP device, KisSelectionSP selection );
 
     /**
      * Finish painting on the current device
@@ -606,6 +609,7 @@
 
 protected:
     KisPaintDeviceSP m_device;
+    KisSelectionSP m_selection;
     KisTransaction  *m_transaction;
 
     QRegion m_dirtyRegion;
[prev in list] [next in list] [prev in thread] [next in thread] 

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