basegfx/source/color/bcolormodifier.cxx |    7 ++++++-
 basegfx/test/BColorModifierTest.cxx     |   17 ++++++-----------
 2 files changed, 12 insertions(+), 12 deletions(-)

New commits:
commit 9111a6154e40f5c9a7d5d5470f76597b1cbaa8ec
Author:     Xisco Fauli <xiscofa...@libreoffice.org>
AuthorDate: Fri Jul 7 14:44:00 2023 +0200
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Fri Jul 7 17:35:15 2023 +0200

    related: tdf#155735: clamp RGB values
    
    So when a green matrix is used, everything becomes green.
    Also set alpha to 1.0 so at least a green matrix on black returns
    green and not black
    
    Change-Id: I9104c7511545fb244750b066bb1e996b6ce229f2
    Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154168
    Tested-by: Jenkins

diff --git a/basegfx/source/color/bcolormodifier.cxx 
b/basegfx/source/color/bcolormodifier.cxx
index 829b0abda659..4d3f277c6cc5 100644
--- a/basegfx/source/color/bcolormodifier.cxx
+++ b/basegfx/source/color/bcolormodifier.cxx
@@ -164,9 +164,14 @@ namespace basegfx
         aColorMatrix.set(0, 0, aSourceColor.getRed());
         aColorMatrix.set(1, 0, aSourceColor.getGreen());
         aColorMatrix.set(2, 0, aSourceColor.getBlue());
+        aColorMatrix.set(3, 0, 1.0);
+        // TODO: add support for alpha
 
         aColorMatrix = maMatrix * aColorMatrix;
-        return ::basegfx::BColor(aColorMatrix.get(0, 0), aColorMatrix.get(1, 
0), aColorMatrix.get(2, 0));
+        return ::basegfx::BColor(
+                std::clamp(aColorMatrix.get(0, 0), 0.0, 1.0),
+                std::clamp(aColorMatrix.get(1, 0), 0.0, 1.0),
+                std::clamp(aColorMatrix.get(2, 0), 0.0, 1.0));
     }
 
     OUString BColorModifier_matrix::getModifierName() const
diff --git a/basegfx/test/BColorModifierTest.cxx 
b/basegfx/test/BColorModifierTest.cxx
index 17b6a0c22257..f8a05900d195 100755
--- a/basegfx/test/BColorModifierTest.cxx
+++ b/basegfx/test/BColorModifierTest.cxx
@@ -289,21 +289,16 @@ public:
         const basegfx::BColorModifierSharedPtr aBColorModifier
             = std::make_shared<basegfx::BColorModifier_matrix>(aMatrix);
 
-        BColor aExpectedWhite(0.0, 3.0, 0.0);
-        CPPUNIT_ASSERT_EQUAL(aExpectedWhite, 
aBColorModifier->getModifiedColor(maWhite));
-        BColor aExpectedGray(0.0, 1.5, 0.0);
-        CPPUNIT_ASSERT_EQUAL(aExpectedGray, 
aBColorModifier->getModifiedColor(maGray));
-        CPPUNIT_ASSERT_EQUAL(maBlack, 
aBColorModifier->getModifiedColor(maBlack));
+        CPPUNIT_ASSERT_EQUAL(maGreen, 
aBColorModifier->getModifiedColor(maWhite));
+        CPPUNIT_ASSERT_EQUAL(maGreen, 
aBColorModifier->getModifiedColor(maGray));
+        CPPUNIT_ASSERT_EQUAL(maGreen, 
aBColorModifier->getModifiedColor(maBlack));
 
         CPPUNIT_ASSERT_EQUAL(maGreen, 
aBColorModifier->getModifiedColor(maRed));
         CPPUNIT_ASSERT_EQUAL(maGreen, 
aBColorModifier->getModifiedColor(maGreen));
         CPPUNIT_ASSERT_EQUAL(maGreen, 
aBColorModifier->getModifiedColor(maBlue));
-        BColor aExpectedYellow(0.0, 2.0, 0.0);
-        CPPUNIT_ASSERT_EQUAL(aExpectedYellow, 
aBColorModifier->getModifiedColor(maYellow));
-        BColor aExpectedMagenta = aExpectedYellow;
-        CPPUNIT_ASSERT_EQUAL(aExpectedMagenta, 
aBColorModifier->getModifiedColor(maMagenta));
-        BColor aExpectedCyan = aExpectedYellow;
-        CPPUNIT_ASSERT_EQUAL(aExpectedCyan, 
aBColorModifier->getModifiedColor(maCyan));
+        CPPUNIT_ASSERT_EQUAL(maGreen, 
aBColorModifier->getModifiedColor(maYellow));
+        CPPUNIT_ASSERT_EQUAL(maGreen, 
aBColorModifier->getModifiedColor(maMagenta));
+        CPPUNIT_ASSERT_EQUAL(maGreen, 
aBColorModifier->getModifiedColor(maCyan));
 
         CPPUNIT_ASSERT(aBColorModifier->operator==(*aBColorModifier));
         const basegfx::BColorModifierSharedPtr aBColorModifierInvert

Reply via email to