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

List:       kde-commits
Subject:    koffice/krita/plugins/filters/colorsfilters
From:       Bart Coppens <kde () bartcoppens ! be>
Date:       2006-10-06 13:16:18
Message-ID: 1160140578.683377.4324.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 592997 by coppens:

Forward port r556206 (very small speedup)

 M  +22 -3     kis_perchannel_filter.cc  
 M  +4 -0      kis_perchannel_filter.h  


--- trunk/koffice/krita/plugins/filters/colorsfilters/kis_perchannel_filter.cc \
#592996:592997 @@ -51,12 +51,16 @@
         }
     }
     nTransfers = n;
+    dirty = true;
+    oldCs = 0;
+    adjustment = 0;
 }
 
 KisPerChannelFilterConfiguration::~KisPerChannelFilterConfiguration()
 {
     for(int i=0;i<nTransfers;i++)
         delete [] transfers[i];
+    delete adjustment;
 }
 
 void KisPerChannelFilterConfiguration::fromXML( const QString& s )
@@ -124,6 +128,7 @@
             transfers[ch][i] = val;
         }
     }
+    dirty = true;
 }
 
 QString KisPerChannelFilterConfiguration::toString()
@@ -188,14 +193,25 @@
         return;
     }
 
-    KisPerChannelFilterConfiguration* configBC = (KisPerChannelFilterConfiguration*) \
config; +    KisPerChannelFilterConfiguration* configBC =
+            dynamic_cast<KisPerChannelFilterConfiguration*>(config);
     if (configBC->nTransfers != src->colorSpace()->nColorChannels()) {
         // We got an illegal number of colorchannels.KisFilter
         return;
     }
-    KoColorAdjustment *adj = \
src->colorSpace()->createPerChannelAdjustment(configBC->transfers);  
+    if (configBC->dirty || (src->colorSpace() != configBC->oldCs)) {
+        delete configBC->adjustment;
+        configBC->adjustment =
+                src->colorSpace()->createPerChannelAdjustment(configBC->transfers);
+        kDebug() << configBC->adjustment << endl;
+        configBC->oldCs = src->colorSpace();
+        configBC->dirty = false;
+    }
 
+    KoColorAdjustment *adj = configBC->adjustment;
+
+
     if (src!=dst) {
         KisPainter gc(dst);
         gc.bitBlt(rect.x(), rect.y(), COMPOSITE_COPY, src, rect.x(), rect.y(), \
rect.width(), rect.height()); @@ -255,7 +271,7 @@
         }
         setProgress(pixelsProcessed);
     }
-    delete adj;
+
     setProgressDone();
 }
 
@@ -375,6 +391,9 @@
             cfg->transfers[ch][i] = val;
         }
     }
+
+    cfg->dirty = true;
+
     return cfg;
 }
 
--- trunk/koffice/krita/plugins/filters/colorsfilters/kis_perchannel_filter.h \
#592996:592997 @@ -54,6 +54,10 @@
     QList<KisCurve> curves;
     quint16 *transfers[256];
     quint16 nTransfers;
+    // Caching of adjustment
+    bool dirty;
+    KoColorSpace* oldCs;
+    KoColorAdjustment* adjustment;
 };
 
 


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

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