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

List:       kde-commits
Subject:    koffice/libs/pigment
From:       Cyrille Berger <cyb () lepi ! org>
Date:       2010-09-11 8:54:53
Message-ID: 20100911085453.1916EAC888 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1174102 by berger:

add a version of the composite op copy that respect selection and opacity


 A             compositeops/KoCompositeOpCopy2.h   [License: LGPL (v2+)]
 M  +129 -0    tests/TestKoCompositeOps.cpp  
 M  +1 -0      tests/TestKoCompositeOps.h  


--- trunk/koffice/libs/pigment/tests/TestKoCompositeOps.cpp #1174101:1174102
@@ -44,6 +44,7 @@
 #include <KoCompositeOpScreen.h>
 #include <KoCompositeOpSubtract.h>
 #include <KoCompositeOpCopy.h>
+#include <KoCompositeOpCopy2.h>
 
 #include <KoColorSpaceRegistry.h>
 #include <KoColor.h>
@@ -1257,6 +1258,134 @@
     QCOMPAREui(p16f1.alpha, QUARTER_OPACITY);
 }
 
+void TestKoCompositeOps::testCompositeCopy2()
+{
+    KoRgbU16Traits::Pixel p16f;
+    KoRgbU16Traits::Pixel p16f1;
+    quint8* p16fPtr = reinterpret_cast<quint8*>(&p16f);
+    quint8* p16fPtr1 = reinterpret_cast<quint8*>(&p16f1);
+    
+    KoCompositeOpCopy2<KoRgbU16Traits> copy(0);
+    // Test no mask, full opacity
+    p16f.red = 10000; p16f.green = 15000; p16f.blue = 20000; p16f.alpha = \
FULL_OPACITY; +    p16f1.red = 15000; p16f1.green = 1000; p16f1.blue = 16000; \
p16f1.alpha = FULL_OPACITY; +    copy.composite(p16fPtr1, KoRgbU16Traits::pixelSize, \
p16fPtr, KoRgbU16Traits::pixelSize, 0, 0, 1, 1, 255); +    QCOMPAREui(p16f1.red, \
10000); +    QCOMPAREui(p16f1.green, 15000);
+    QCOMPAREui(p16f1.blue, 20000);
+    QCOMPAREui(p16f1.alpha, FULL_OPACITY);
+
+    // Test no mask, half opacity
+    p16f.red = 10000; p16f.green = 15000; p16f.blue = 20000; p16f.alpha = \
FULL_OPACITY; +    p16f1.red = 15000; p16f1.green = 1000; p16f1.blue = 16000; \
p16f1.alpha = FULL_OPACITY; +    copy.composite(p16fPtr1, KoRgbU16Traits::pixelSize, \
p16fPtr, KoRgbU16Traits::pixelSize, 0, 0, 1, 1, 127); +    QCOMPAREui(p16f1.red, \
12510); +    QCOMPAREui(p16f1.green, 7972);
+    QCOMPAREui(p16f1.blue, 17992);
+    QCOMPAREui(p16f1.alpha, FULL_OPACITY);
+
+    // Test mask, full opacity
+    quint8 mask; mask = 127;
+    p16f.red = 10000; p16f.green = 15000; p16f.blue = 20000; p16f.alpha = \
FULL_OPACITY; +    p16f1.red = 15000; p16f1.green = 1000; p16f1.blue = 16000; \
p16f1.alpha = FULL_OPACITY; +    copy.composite(p16fPtr1, KoRgbU16Traits::pixelSize, \
p16fPtr, KoRgbU16Traits::pixelSize, &mask, 1, 1, 1, 255); +    QCOMPAREui(p16f1.red, \
12510); +    QCOMPAREui(p16f1.green, 7972);
+    QCOMPAREui(p16f1.blue, 17992);
+    QCOMPAREui(p16f1.alpha, FULL_OPACITY);
+
+    // Test mask, half opacity
+    p16f.red = 10000; p16f.green = 15000; p16f.blue = 20000; p16f.alpha = \
FULL_OPACITY; +    p16f1.red = 15000; p16f1.green = 1000; p16f1.blue = 16000; \
p16f1.alpha = FULL_OPACITY; +    copy.composite(p16fPtr1, KoRgbU16Traits::pixelSize, \
p16fPtr, KoRgbU16Traits::pixelSize, &mask, 1, 1, 1, 127); +    QCOMPAREui(p16f1.red, \
13760); +    QCOMPAREui(p16f1.green, 4472);
+    QCOMPAREui(p16f1.blue, 16992);
+    QCOMPAREui(p16f1.alpha, FULL_OPACITY);
+
+    // Test no mask, full opacity, transparent source
+    p16f.red = 10000; p16f.green = 15000; p16f.blue = 20000; p16f.alpha = 0;
+    p16f1.red = 15000; p16f1.green = 1000; p16f1.blue = 16000; p16f1.alpha = \
FULL_OPACITY; +    copy.composite(p16fPtr1, KoRgbU16Traits::pixelSize, p16fPtr, \
KoRgbU16Traits::pixelSize, 0, 0, 1, 1, 255); +    QCOMPAREui(p16f1.red, 10000);
+    QCOMPAREui(p16f1.green, 15000);
+    QCOMPAREui(p16f1.blue, 20000);
+    QCOMPAREui(p16f1.alpha, 0);
+
+    // Test no mask, full opacity, transparent dst
+    p16f.red = 10000; p16f.green = 15000; p16f.blue = 20000; p16f.alpha = \
FULL_OPACITY; +    p16f1.red = 15000; p16f1.green = 1000; p16f1.blue = 16000; \
p16f1.alpha = 0; +    copy.composite(p16fPtr1, KoRgbU16Traits::pixelSize, p16fPtr, \
KoRgbU16Traits::pixelSize, 0, 0, 1, 1, 255); +    QCOMPAREui(p16f1.red, 10000);
+    QCOMPAREui(p16f1.green, 15000);
+    QCOMPAREui(p16f1.blue, 20000);
+    QCOMPAREui(p16f1.alpha, FULL_OPACITY);
+
+    // Test no mask, full opacity, half-transparent dst
+    p16f.red = 10000; p16f.green = 15000; p16f.blue = 20000; p16f.alpha = \
FULL_OPACITY; +    p16f1.red = 15000; p16f1.green = 1000; p16f1.blue = 16000; \
p16f1.alpha = HALF_OPACITY; +    copy.composite(p16fPtr1, KoRgbU16Traits::pixelSize, \
p16fPtr, KoRgbU16Traits::pixelSize, 0, 0, 1, 1, 255); +    QCOMPAREui(p16f1.red, \
10000); +    QCOMPAREui(p16f1.green, 15000);
+    QCOMPAREui(p16f1.blue, 20000);
+    QCOMPAREui(p16f1.alpha, FULL_OPACITY);
+
+    // Test no mask, full opacity, half-transparent src
+    p16f.red = 10000; p16f.green = 15000; p16f.blue = 20000; p16f.alpha = \
HALF_OPACITY; +    p16f1.red = 15000; p16f1.green = 1000; p16f1.blue = 16000; \
p16f1.alpha = FULL_OPACITY; +    copy.composite(p16fPtr1, KoRgbU16Traits::pixelSize, \
p16fPtr, KoRgbU16Traits::pixelSize, 0, 0, 1, 1, 255); +    QCOMPAREui(p16f1.red, \
10000); +    QCOMPAREui(p16f1.green, 15000);
+    QCOMPAREui(p16f1.blue, 20000);
+    QCOMPAREui(p16f1.alpha, HALF_OPACITY);
+
+
+    // Test no mask, full opacity, half-transparent src
+    p16f.red = 10000; p16f.green = 15000; p16f.blue = 20000; p16f.alpha = \
HALF_OPACITY; +    p16f1.red = 15000; p16f1.green = 1000; p16f1.blue = 16000; \
p16f1.alpha = HALF_OPACITY; +    copy.composite(p16fPtr1, KoRgbU16Traits::pixelSize, \
p16fPtr, KoRgbU16Traits::pixelSize, 0, 0, 1, 1, 255); +    QCOMPAREui(p16f1.red, \
10000); +    QCOMPAREui(p16f1.green, 15000);
+    QCOMPAREui(p16f1.blue, 20000);
+    QCOMPAREui(p16f1.alpha, HALF_OPACITY);
+
+    // Test no mask, full opacity, quarter-transparent src, half-transparent dst
+    p16f.red = 10000; p16f.green = 15000; p16f.blue = 20000; p16f.alpha = \
QUARTER_OPACITY; +    p16f1.red = 15000; p16f1.green = 1000; p16f1.blue = 16000; \
p16f1.alpha = HALF_OPACITY; +    copy.composite(p16fPtr1, KoRgbU16Traits::pixelSize, \
p16fPtr, KoRgbU16Traits::pixelSize, 0, 0, 1, 1, 255); +    QCOMPAREui(p16f1.red, \
10000); +    QCOMPAREui(p16f1.green, 15000);
+    QCOMPAREui(p16f1.blue, 20000);
+    QCOMPAREui(p16f1.alpha, QUARTER_OPACITY);
+
+    // Test no mask, full opacity, quarter-transparent dst, half-transparent src
+    p16f.red = 10000; p16f.green = 15000; p16f.blue = 20000; p16f.alpha = \
HALF_OPACITY; +    p16f1.red = 15000; p16f1.green = 1000; p16f1.blue = 16000; \
p16f1.alpha = QUARTER_OPACITY; +    copy.composite(p16fPtr1, \
KoRgbU16Traits::pixelSize, p16fPtr, KoRgbU16Traits::pixelSize, 0, 0, 1, 1, 255); +    \
QCOMPAREui(p16f1.red, 10000); +    QCOMPAREui(p16f1.green, 15000);
+    QCOMPAREui(p16f1.blue, 20000);
+    QCOMPAREui(p16f1.alpha, HALF_OPACITY);
+
+    // Test no mask, half opacity, quarter-transparent dst, half-transparent src
+    p16f.red = 10000; p16f.green = 15000; p16f.blue = 20000; p16f.alpha = \
HALF_OPACITY; +    p16f1.red = 15000; p16f1.green = 1000; p16f1.blue = 16000; \
p16f1.alpha = QUARTER_OPACITY; +    copy.composite(p16fPtr1, \
KoRgbU16Traits::pixelSize, p16fPtr, KoRgbU16Traits::pixelSize, 0, 0, 1, 1, 127); +    \
QCOMPAREui(p16f1.red, 12510); +    QCOMPAREui(p16f1.green, 7972);
+    QCOMPAREui(p16f1.blue, 17992);
+    QCOMPAREui(p16f1.alpha, 24542);
+
+    // Test mask, half opacity, quarter-transparent dst, half-transparent src
+    p16f.red = 10000; p16f.green = 15000; p16f.blue = 20000; p16f.alpha = \
HALF_OPACITY; +    p16f1.red = 15000; p16f1.green = 1000; p16f1.blue = 16000; \
p16f1.alpha = QUARTER_OPACITY; +    copy.composite(p16fPtr1, \
KoRgbU16Traits::pixelSize, p16fPtr, KoRgbU16Traits::pixelSize, &mask, 0, 1, 1, 127); \
+    QCOMPAREui(p16f1.red, 13760); +    QCOMPAREui(p16f1.green, 4472);
+    QCOMPAREui(p16f1.blue, 16992);
+    QCOMPAREui(p16f1.alpha, 20446);
+}
+
 void TestKoCompositeOps::testCompositeCopy()
 {
     const KoColorSpace * cs = KoColorSpaceRegistry::instance()->rgb8();
--- trunk/koffice/libs/pigment/tests/TestKoCompositeOps.h #1174101:1174102
@@ -39,6 +39,7 @@
     void testCompositeScreen();
     void testCompositeSubtract();
     void testCompositeCopy();
+    void testCompositeCopy2();
 };
 
 #endif


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

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