diff options
author | Miklos Vajna <vmiklos@suse.cz> | 2013-04-18 14:42:22 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@suse.cz> | 2013-04-18 15:54:05 +0200 |
commit | 3d4fef85d05269e613316a7af6245f05d207d76e (patch) | |
tree | 3d33fa69ee57089ca91f34845187ead3f5aad871 | |
parent | 85f88a20b44a8c4742a6fdd6263e31cf023cfc36 (diff) |
fdo#63023 incorrect RTF background color in header
Change-Id: I33f5c8a856206860ac9cdb23dd6b5222cb785bf7
-rw-r--r-- | sw/qa/extras/inc/swmodeltestbase.hxx | 18 | ||||
-rw-r--r-- | sw/qa/extras/rtfimport/data/fdo63023.rtf | 10 | ||||
-rw-r--r-- | sw/qa/extras/rtfimport/rtfimport.cxx | 9 | ||||
-rw-r--r-- | writerfilter/source/rtftok/rtfdocumentimpl.cxx | 11 |
4 files changed, 42 insertions, 6 deletions
diff --git a/sw/qa/extras/inc/swmodeltestbase.hxx b/sw/qa/extras/inc/swmodeltestbase.hxx index 86547b8848ad..94b5d7e58e04 100644 --- a/sw/qa/extras/inc/swmodeltestbase.hxx +++ b/sw/qa/extras/inc/swmodeltestbase.hxx @@ -195,16 +195,22 @@ protected: nRet++; } return nRet; } // Get paragraph (counted from 1), optionally check it contains the given text. - uno::Reference<text::XTextContent> getParagraphOrTable(int number) const + uno::Reference<text::XTextContent> getParagraphOrTable(int number, uno::Reference<text::XText> xText = uno::Reference<text::XText>()) const { - uno::Reference<text::XTextDocument> textDocument(mxComponent, uno::UNO_QUERY); - uno::Reference<container::XEnumerationAccess> paraEnumAccess(textDocument->getText(), uno::UNO_QUERY); + uno::Reference<container::XEnumerationAccess> paraEnumAccess; + if (xText.is()) + paraEnumAccess.set(xText, uno::UNO_QUERY); + else + { + uno::Reference<text::XTextDocument> textDocument(mxComponent, uno::UNO_QUERY); + paraEnumAccess.set(textDocument->getText(), uno::UNO_QUERY); + } uno::Reference<container::XEnumeration> paraEnum = paraEnumAccess->createEnumeration(); for( int i = 1; i < number; ++i ) paraEnum->nextElement(); uno::Reference< text::XTextContent> const xElem(paraEnum->nextElement(), @@ -218,12 +224,18 @@ protected: getParagraphOrTable(number), uno::UNO_QUERY_THROW); if( !content.isEmpty()) CPPUNIT_ASSERT_EQUAL( content, xParagraph->getString()); return xParagraph; } + uno::Reference<text::XTextRange> getParagraphOfText(int number, uno::Reference<text::XText> xText) const + { + uno::Reference<text::XTextRange> const xParagraph(getParagraphOrTable(number, xText), uno::UNO_QUERY_THROW); + return xParagraph; + } + /// Get run (counted from 1) of a paragraph, optionally check it contains the given text. uno::Reference<text::XTextRange> getRun(uno::Reference<text::XTextRange> xParagraph, int number, OUString content = OUString()) const { uno::Reference<container::XEnumerationAccess> xRunEnumAccess(xParagraph, uno::UNO_QUERY); uno::Reference<container::XEnumeration> xRunEnum = xRunEnumAccess->createEnumeration(); for (int i = 1; i < number; ++i) diff --git a/sw/qa/extras/rtfimport/data/fdo63023.rtf b/sw/qa/extras/rtfimport/data/fdo63023.rtf new file mode 100644 index 000000000000..c246dc634b10 --- /dev/null +++ b/sw/qa/extras/rtfimport/data/fdo63023.rtf @@ -0,0 +1,10 @@ +{\rtf1 +{\colortbl;\red0\green0\blue0;\red0\green0\blue128;\red92\green133\blue38;\red153\green153\blue255;\red220\green35\blue0;\red255\green255\blue153;\red128\green128\blue128;} +{\header +{\cf4\chcbpat6 +Yellow 2 Background with Violet Text} +\pard\par +} +body text +\pard\par +} diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx index 0b3d758c5fa5..950c95b31337 100644 --- a/sw/qa/extras/rtfimport/rtfimport.cxx +++ b/sw/qa/extras/rtfimport/rtfimport.cxx @@ -148,12 +148,13 @@ public: void testFdo60722(); void testFdo61909(); void testFdo62288(); void testFdo37716(); void testFdo51916(); void testFdo61193(); + void testFdo63023(); CPPUNIT_TEST_SUITE(Test); #if !defined(MACOSX) && !defined(WNT) CPPUNIT_TEST(run); #endif CPPUNIT_TEST_SUITE_END(); @@ -271,12 +272,13 @@ void Test::run() {"fdo60722.rtf", &Test::testFdo60722}, {"fdo61909.rtf", &Test::testFdo61909}, {"fdo62288.rtf", &Test::testFdo62288}, {"fdo37716.rtf", &Test::testFdo37716}, {"fdo51916.rtf", &Test::testFdo51916}, {"hello.rtf", &Test::testFdo61193}, + {"fdo63023.rtf", &Test::testFdo63023}, }; header(); for (unsigned int i = 0; i < SAL_N_ELEMENTS(aMethods); ++i) { MethodEntry<Test>& rEntry = aMethods[i]; AllSettings aSavedSettings(Application::GetSettings()); @@ -1230,11 +1232,18 @@ void Test::testFdo37716() void Test::testFdo51916() { // Complex nested table caused a crash. } +void Test::testFdo63023() +{ + uno::Reference<text::XText> xHeaderText = getProperty< uno::Reference<text::XText> >(getStyles("PageStyles")->getByName(DEFAULT_STYLE), "HeaderText"); + // Back color was black (0) in the header, due to missing color table in the substream. + CPPUNIT_ASSERT_EQUAL(sal_Int32(0xFFFF99), getProperty<sal_Int32>(getRun(getParagraphOfText(1, xHeaderText), 1), "CharBackColor")); +} + CPPUNIT_TEST_SUITE_REGISTRATION(Test); CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index f1268f546d50..8d88a27052b3 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -575,15 +575,20 @@ void RTFDocumentImpl::seek(sal_uInt32 nPos) { Strm().Seek(nPos); } sal_uInt32 RTFDocumentImpl::getColorTable(sal_uInt32 nIndex) { - if (nIndex < m_aColorTable.size()) - return m_aColorTable[nIndex]; - return 0; + if (!m_pSuperstream) + { + if (nIndex < m_aColorTable.size()) + return m_aColorTable[nIndex]; + return 0; + } + else + return m_pSuperstream->getColorTable(nIndex); } rtl_TextEncoding RTFDocumentImpl::getEncoding(sal_uInt32 nFontIndex) { if (!m_pSuperstream) { |