summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vcl/CppunitTest_vcl_bitmap_test.mk1
-rw-r--r--vcl/inc/filter/XpmReader.hxx (renamed from vcl/source/filter/ixpm/xpmread.hxx)0
-rw-r--r--vcl/qa/cppunit/XpmFilterTest.cxx76
-rw-r--r--vcl/qa/cppunit/data/XPM_1.xpm15
-rw-r--r--vcl/qa/cppunit/data/XPM_4.xpm23
-rw-r--r--vcl/qa/cppunit/data/XPM_8.xpm263
-rw-r--r--vcl/source/filter/graphicfilter.cxx2
-rw-r--r--vcl/source/filter/ixpm/xpmread.cxx3
-rw-r--r--vcl/workben/fftester.cxx2
-rw-r--r--vcl/workben/xpmfuzzer.cxx2
10 files changed, 383 insertions, 4 deletions
diff --git a/vcl/CppunitTest_vcl_bitmap_test.mk b/vcl/CppunitTest_vcl_bitmap_test.mk
index 187bb6871845..3e28b96b62e9 100644
--- a/vcl/CppunitTest_vcl_bitmap_test.mk
+++ b/vcl/CppunitTest_vcl_bitmap_test.mk
@@ -17,6 +17,7 @@ $(eval $(call gb_CppunitTest_add_exception_objects,vcl_bitmap_test, \
vcl/qa/cppunit/BitmapScaleTest \
vcl/qa/cppunit/BitmapFilterTest \
vcl/qa/cppunit/BmpFilterTest \
+ vcl/qa/cppunit/XpmFilterTest \
))
$(eval $(call gb_CppunitTest_use_externals,vcl_bitmap_test,\
diff --git a/vcl/source/filter/ixpm/xpmread.hxx b/vcl/inc/filter/XpmReader.hxx
index b9f7bf5cd7d8..b9f7bf5cd7d8 100644
--- a/vcl/source/filter/ixpm/xpmread.hxx
+++ b/vcl/inc/filter/XpmReader.hxx
diff --git a/vcl/qa/cppunit/XpmFilterTest.cxx b/vcl/qa/cppunit/XpmFilterTest.cxx
new file mode 100644
index 000000000000..121dc62a4fd6
--- /dev/null
+++ b/vcl/qa/cppunit/XpmFilterTest.cxx
@@ -0,0 +1,76 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <test/bootstrapfixture.hxx>
+
+#include <vcl/bitmapex.hxx>
+#include <tools/stream.hxx>
+#include <filter/XpmReader.hxx>
+#include <unotools/tempfile.hxx>
+
+class XpmFilterTest : public test::BootstrapFixture
+{
+public:
+ OUString maDataUrl;
+ OUString getFullUrl(std::u16string_view sFileName)
+ {
+ return m_directories.getURLFromSrc(maDataUrl) + sFileName;
+ }
+ XpmFilterTest()
+ : maDataUrl(u"/vcl/qa/cppunit/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(XpmFilterTest, testXPM_8bit)
+{
+ SvFileStream aFileStream(getFullUrl(u"XPM_8.xpm"), StreamMode::READ);
+ Graphic aGraphic;
+ CPPUNIT_ASSERT(ImportXPM(aFileStream, aGraphic));
+ auto aBitmap = aGraphic.GetBitmapEx();
+ CPPUNIT_ASSERT_EQUAL(tools::Long(4), aBitmap.GetSizePixel().Width());
+ CPPUNIT_ASSERT_EQUAL(tools::Long(4), aBitmap.GetSizePixel().Height());
+ CPPUNIT_ASSERT_EQUAL(sal_uInt16(8), aBitmap.GetBitCount());
+ CPPUNIT_ASSERT_EQUAL(COL_LIGHTBLUE, aBitmap.GetPixelColor(0, 0));
+ CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, aBitmap.GetPixelColor(2, 0));
+ CPPUNIT_ASSERT_EQUAL(COL_YELLOW, aBitmap.GetPixelColor(0, 2));
+ CPPUNIT_ASSERT_EQUAL(COL_LIGHTGREEN, aBitmap.GetPixelColor(2, 2));
+}
+
+CPPUNIT_TEST_FIXTURE(XpmFilterTest, testXPM_4bit)
+{
+ SvFileStream aFileStream(getFullUrl(u"XPM_4.xpm"), StreamMode::READ);
+ Graphic aGraphic;
+ CPPUNIT_ASSERT(ImportXPM(aFileStream, aGraphic));
+ auto aBitmap = aGraphic.GetBitmapEx();
+ CPPUNIT_ASSERT_EQUAL(tools::Long(4), aBitmap.GetSizePixel().Width());
+ CPPUNIT_ASSERT_EQUAL(tools::Long(4), aBitmap.GetSizePixel().Height());
+ CPPUNIT_ASSERT_EQUAL(sal_uInt16(4), aBitmap.GetBitCount());
+ CPPUNIT_ASSERT_EQUAL(COL_LIGHTBLUE, aBitmap.GetPixelColor(0, 0));
+ CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, aBitmap.GetPixelColor(2, 0));
+ CPPUNIT_ASSERT_EQUAL(COL_YELLOW, aBitmap.GetPixelColor(0, 2));
+ CPPUNIT_ASSERT_EQUAL(COL_LIGHTGREEN, aBitmap.GetPixelColor(2, 2));
+}
+
+CPPUNIT_TEST_FIXTURE(XpmFilterTest, testXPM_1bit)
+{
+ SvFileStream aFileStream(getFullUrl(u"XPM_1.xpm"), StreamMode::READ);
+ Graphic aGraphic;
+ CPPUNIT_ASSERT(ImportXPM(aFileStream, aGraphic));
+ auto aBitmap = aGraphic.GetBitmapEx();
+ CPPUNIT_ASSERT_EQUAL(tools::Long(10), aBitmap.GetSizePixel().Width());
+ CPPUNIT_ASSERT_EQUAL(tools::Long(10), aBitmap.GetSizePixel().Height());
+ CPPUNIT_ASSERT_EQUAL(sal_uInt16(1), aBitmap.GetBitCount());
+ CPPUNIT_ASSERT_EQUAL(Color(0xffffff), aBitmap.GetPixelColor(0, 0));
+ CPPUNIT_ASSERT_EQUAL(Color(0x72d1c8), aBitmap.GetPixelColor(1, 1));
+ CPPUNIT_ASSERT_EQUAL(Color(0x72d1c8), aBitmap.GetPixelColor(8, 8));
+ CPPUNIT_ASSERT_EQUAL(Color(0xffffff), aBitmap.GetPixelColor(9, 9));
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/qa/cppunit/data/XPM_1.xpm b/vcl/qa/cppunit/data/XPM_1.xpm
new file mode 100644
index 000000000000..7b9b94359c56
--- /dev/null
+++ b/vcl/qa/cppunit/data/XPM_1.xpm
@@ -0,0 +1,15 @@
+/* XPM */
+static char * sample_xpm[] = {
+"10 10 2 1",
+" c #FFFFFF",
+". c #72D1C8",
+" ",
+" ........ ",
+" ........ ",
+" ........ ",
+" ........ ",
+" ........ ",
+" ........ ",
+" ........ ",
+" ........ ",
+" "};
diff --git a/vcl/qa/cppunit/data/XPM_4.xpm b/vcl/qa/cppunit/data/XPM_4.xpm
new file mode 100644
index 000000000000..f958aa9a1f60
--- /dev/null
+++ b/vcl/qa/cppunit/data/XPM_4.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char * XPM_4_xpm[] = {
+"4 4 16 1",
+" c #000000",
+". c #800000",
+"+ c #008000",
+"@ c #808000",
+"# c #000080",
+"$ c #800080",
+"% c #008080",
+"& c #808080",
+"* c #C0C0C0",
+"= c #FF0000",
+"- c #00FF00",
+"; c #FFFF00",
+"> c #0000FF",
+", c #FF00FF",
+"' c #00FFFF",
+") c #FFFFFF",
+">>==",
+">>==",
+";;--",
+";;--"};
diff --git a/vcl/qa/cppunit/data/XPM_8.xpm b/vcl/qa/cppunit/data/XPM_8.xpm
new file mode 100644
index 000000000000..82c354dfd197
--- /dev/null
+++ b/vcl/qa/cppunit/data/XPM_8.xpm
@@ -0,0 +1,263 @@
+/* XPM */
+static char * XPM_4_xpm[] = {
+"4 4 256 2",
+" c #000000",
+". c #800000",
+"+ c #008000",
+"@ c #808000",
+"# c #000080",
+"$ c #800080",
+"% c #008080",
+"& c #C0C0C0",
+"* c #C0DCC0",
+"= c #A6CAF0",
+"- c #402000",
+"; c #602000",
+"> c #802000",
+", c #A02000",
+"' c #C02000",
+") c #E02000",
+"! c #004000",
+"~ c #204000",
+"{ c #404000",
+"] c #604000",
+"^ c #804000",
+"/ c #A04000",
+"( c #C04000",
+"_ c #E04000",
+": c #006000",
+"< c #206000",
+"[ c #406000",
+"} c #606000",
+"| c #806000",
+"1 c #A06000",
+"2 c #C06000",
+"3 c #E06000",
+"4 c #008000",
+"5 c #208000",
+"6 c #408000",
+"7 c #608000",
+"8 c #808000",
+"9 c #A08000",
+"0 c #C08000",
+"a c #E08000",
+"b c #00A000",
+"c c #20A000",
+"d c #40A000",
+"e c #60A000",
+"f c #80A000",
+"g c #A0A000",
+"h c #C0A000",
+"i c #E0A000",
+"j c #00C000",
+"k c #20C000",
+"l c #40C000",
+"m c #60C000",
+"n c #80C000",
+"o c #A0C000",
+"p c #C0C000",
+"q c #E0C000",
+"r c #00E000",
+"s c #20E000",
+"t c #40E000",
+"u c #60E000",
+"v c #80E000",
+"w c #A0E000",
+"x c #C0E000",
+"y c #E0E000",
+"z c #000040",
+"A c #200040",
+"B c #400040",
+"C c #600040",
+"D c #800040",
+"E c #A00040",
+"F c #C00040",
+"G c #E00040",
+"H c #002040",
+"I c #202040",
+"J c #402040",
+"K c #602040",
+"L c #802040",
+"M c #A02040",
+"N c #C02040",
+"O c #E02040",
+"P c #004040",
+"Q c #204040",
+"R c #404040",
+"S c #604040",
+"T c #804040",
+"U c #A04040",
+"V c #C04040",
+"W c #E04040",
+"X c #006040",
+"Y c #206040",
+"Z c #406040",
+"` c #606040",
+" . c #806040",
+".. c #A06040",
+"+. c #C06040",
+"@. c #E06040",
+"#. c #008040",
+"$. c #208040",
+"%. c #408040",
+"&. c #608040",
+"*. c #808040",
+"=. c #A08040",
+"-. c #C08040",
+";. c #E08040",
+">. c #00A040",
+",. c #20A040",
+"'. c #40A040",
+"). c #60A040",
+"!. c #80A040",
+"~. c #A0A040",
+"{. c #C0A040",
+"]. c #E0A040",
+"^. c #00C040",
+"/. c #20C040",
+"(. c #40C040",
+"_. c #60C040",
+":. c #80C040",
+"<. c #A0C040",
+"[. c #C0C040",
+"}. c #E0C040",
+"|. c #00E040",
+"1. c #20E040",
+"2. c #40E040",
+"3. c #60E040",
+"4. c #80E040",
+"5. c #A0E040",
+"6. c #C0E040",
+"7. c #E0E040",
+"8. c #000080",
+"9. c #200080",
+"0. c #400080",
+"a. c #600080",
+"b. c #800080",
+"c. c #A00080",
+"d. c #C00080",
+"e. c #E00080",
+"f. c #002080",
+"g. c #202080",
+"h. c #402080",
+"i. c #602080",
+"j. c #802080",
+"k. c #A02080",
+"l. c #C02080",
+"m. c #E02080",
+"n. c #004080",
+"o. c #204080",
+"p. c #404080",
+"q. c #604080",
+"r. c #804080",
+"s. c #A04080",
+"t. c #C04080",
+"u. c #E04080",
+"v. c #006080",
+"w. c #206080",
+"x. c #406080",
+"y. c #606080",
+"z. c #806080",
+"A. c #A06080",
+"B. c #C06080",
+"C. c #E06080",
+"D. c #008080",
+"E. c #208080",
+"F. c #408080",
+"G. c #608080",
+"H. c #808080",
+"I. c #A08080",
+"J. c #C08080",
+"K. c #E08080",
+"L. c #00A080",
+"M. c #20A080",
+"N. c #40A080",
+"O. c #60A080",
+"P. c #80A080",
+"Q. c #A0A080",
+"R. c #C0A080",
+"S. c #E0A080",
+"T. c #00C080",
+"U. c #20C080",
+"V. c #40C080",
+"W. c #60C080",
+"X. c #80C080",
+"Y. c #A0C080",
+"Z. c #C0C080",
+"`. c #E0C080",
+" + c #00E080",
+".+ c #20E080",
+"++ c #40E080",
+"@+ c #60E080",
+"#+ c #80E080",
+"$+ c #A0E080",
+"%+ c #C0E080",
+"&+ c #E0E080",
+"*+ c #0000C0",
+"=+ c #2000C0",
+"-+ c #4000C0",
+";+ c #6000C0",
+">+ c #8000C0",
+",+ c #A000C0",
+"'+ c #C000C0",
+")+ c #E000C0",
+"!+ c #0020C0",
+"~+ c #2020C0",
+"{+ c #4020C0",
+"]+ c #6020C0",
+"^+ c #8020C0",
+"/+ c #A020C0",
+"(+ c #C020C0",
+"_+ c #E020C0",
+":+ c #0040C0",
+"<+ c #2040C0",
+"[+ c #4040C0",
+"}+ c #6040C0",
+"|+ c #8040C0",
+"1+ c #A040C0",
+"2+ c #C040C0",
+"3+ c #E040C0",
+"4+ c #0060C0",
+"5+ c #2060C0",
+"6+ c #4060C0",
+"7+ c #6060C0",
+"8+ c #8060C0",
+"9+ c #A060C0",
+"0+ c #C060C0",
+"a+ c #E060C0",
+"b+ c #0080C0",
+"c+ c #2080C0",
+"d+ c #4080C0",
+"e+ c #6080C0",
+"f+ c #8080C0",
+"g+ c #A080C0",
+"h+ c #C080C0",
+"i+ c #E080C0",
+"j+ c #00A0C0",
+"k+ c #20A0C0",
+"l+ c #40A0C0",
+"m+ c #60A0C0",
+"n+ c #80A0C0",
+"o+ c #A0A0C0",
+"p+ c #C0A0C0",
+"q+ c #E0A0C0",
+"r+ c #00C0C0",
+"s+ c #20C0C0",
+"t+ c #40C0C0",
+"u+ c #60C0C0",
+"v+ c #80C0C0",
+"w+ c #A0C0C0",
+"x+ c #FFFBF0",
+"y+ c #A0A0A4",
+"z+ c #808080",
+"A+ c #FF0000",
+"B+ c #00FF00",
+"C+ c #FFFF00",
+"D+ c #0000FF",
+"E+ c #FF00FF",
+"F+ c #00FFFF",
+"G+ c #FFFFFF",
+"D+D+A+A+",
+"D+D+A+A+",
+"C+C+B+B+",
+"C+C+B+B+"};
diff --git a/vcl/source/filter/graphicfilter.cxx b/vcl/source/filter/graphicfilter.cxx
index be3e97bda2ef..cd29c5088a0e 100644
--- a/vcl/source/filter/graphicfilter.cxx
+++ b/vcl/source/filter/graphicfilter.cxx
@@ -45,7 +45,7 @@
#include <vcl/pdfread.hxx>
#include "jpeg/jpeg.hxx"
#include "ixbm/xbmread.hxx"
-#include "ixpm/xpmread.hxx"
+#include <filter/XpmReader.hxx>
#include <filter/TiffReader.hxx>
#include <filter/TiffWriter.hxx>
#include <filter/TgaReader.hxx>
diff --git a/vcl/source/filter/ixpm/xpmread.cxx b/vcl/source/filter/ixpm/xpmread.cxx
index 24e9cacb4fbe..77399dbdfd93 100644
--- a/vcl/source/filter/ixpm/xpmread.cxx
+++ b/vcl/source/filter/ixpm/xpmread.cxx
@@ -17,6 +17,8 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
+#include <filter/XpmReader.hxx>
+
#include <vcl/graph.hxx>
#include <tools/stream.hxx>
@@ -24,7 +26,6 @@
#include <graphic/GraphicReader.hxx>
#include "rgbtable.hxx"
-#include "xpmread.hxx"
#include <cstring>
#include <array>
diff --git a/vcl/workben/fftester.cxx b/vcl/workben/fftester.cxx
index 7d165d5a5957..cc39309ed91a 100644
--- a/vcl/workben/fftester.cxx
+++ b/vcl/workben/fftester.cxx
@@ -57,6 +57,7 @@
#include <filter/PcdReader.hxx>
#include <filter/PbmReader.hxx>
#include <filter/DxfReader.hxx>
+#include <filter/XpmReader.hxx>
#include <osl/file.hxx>
#include <osl/module.hxx>
#include <tools/stream.hxx>
@@ -64,7 +65,6 @@
#include "../source/filter/igif/gifread.hxx"
#include "../source/filter/ixbm/xbmread.hxx"
-#include "../source/filter/ixpm/xpmread.hxx"
#include "../source/filter/jpeg/jpeg.hxx"
using namespace ::com::sun::star::uno;
diff --git a/vcl/workben/xpmfuzzer.cxx b/vcl/workben/xpmfuzzer.cxx
index 700761d1725f..bd9413fb522f 100644
--- a/vcl/workben/xpmfuzzer.cxx
+++ b/vcl/workben/xpmfuzzer.cxx
@@ -8,7 +8,7 @@
*/
#include <tools/stream.hxx>
-#include <../source/filter/ixpm/xpmread.hxx>
+#include <filter/XpmReader.hxx>
#include "commonfuzzer.hxx"
#include <config_features.h>