diff options
author | Miklos Vajna <vmiklos@suse.cz> | 2013-04-18 17:07:22 +0200 |
---|---|---|
committer | Fridrich Strba <fridrich@documentfoundation.org> | 2013-04-18 15:23:40 +0000 |
commit | cacdb29329cf6398df183b27b3dcb23d18d897d0 (patch) | |
tree | 6c12862f833fc90a23543538223c844897312bcc | |
parent | ff5292c22808c2c4a2abb986fbcbb7999dec565f (diff) |
fdo#63023 incorrect RTF background color in header
(cherry picked from commits 3d4fef85d05269e613316a7af6245f05d207d76e and
08dc5de900b2e5cca9d9443fc5d4ea7756842af9)
Change-Id: I33f5c8a856206860ac9cdb23dd6b5222cb785bf7
Reviewed-on: https://gerrit.libreoffice.org/3461
Reviewed-by: Fridrich Strba <fridrich@documentfoundation.org>
Tested-by: Fridrich Strba <fridrich@documentfoundation.org>
-rw-r--r-- | sw/qa/extras/inc/swmodeltestbase.hxx | 34 | ||||
-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, 55 insertions, 9 deletions
diff --git a/sw/qa/extras/inc/swmodeltestbase.hxx b/sw/qa/extras/inc/swmodeltestbase.hxx index ae0af3db2daf..a4e821329aac 100644 --- a/sw/qa/extras/inc/swmodeltestbase.hxx +++ b/sw/qa/extras/inc/swmodeltestbase.hxx @@ -29,6 +29,8 @@ #include <com/sun/star/style/XStyleFamiliesSupplier.hpp> #include <com/sun/star/text/XTextDocument.hpp> #include <com/sun/star/text/XTextRange.hpp> +#include <com/sun/star/text/XTextTable.hpp> +#include <com/sun/star/table/XCell.hpp> #include <test/bootstrapfixture.hxx> #include <unotest/macros_test.hxx> @@ -189,19 +191,39 @@ protected: } // Get paragraph (counted from 1), optionally check it contains the given text. - uno::Reference< text::XTextRange > getParagraph( int number, OUString content = OUString() ) 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::XTextRange > paragraph( paraEnum->nextElement(), uno::UNO_QUERY ); + uno::Reference< text::XTextContent> const xElem(paraEnum->nextElement(), + uno::UNO_QUERY_THROW); + return xElem; + } + + uno::Reference< text::XTextRange > getParagraph( int number, OUString content = OUString() ) const + { + uno::Reference<text::XTextRange> const xParagraph( + getParagraphOrTable(number), uno::UNO_QUERY_THROW); if( !content.isEmpty()) - CPPUNIT_ASSERT_EQUAL( content, paragraph->getString()); - return paragraph; + 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. 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 246358eb4c89..c02dac5db5be 100644 --- a/sw/qa/extras/rtfimport/rtfimport.cxx +++ b/sw/qa/extras/rtfimport/rtfimport.cxx @@ -146,6 +146,7 @@ public: void testFdo37716(); void testFdo51916(); void testFdo61193(); + void testFdo63023(); CPPUNIT_TEST_SUITE(Test); #if !defined(MACOSX) && !defined(WNT) @@ -262,6 +263,7 @@ void Test::run() {"fdo37716.rtf", &Test::testFdo37716}, {"fdo51916.rtf", &Test::testFdo51916}, {"hello.rtf", &Test::testFdo61193}, + {"fdo63023.rtf", &Test::testFdo63023}, }; for (unsigned int i = 0; i < SAL_N_ELEMENTS(aMethods); ++i) { @@ -1205,6 +1207,13 @@ 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(); diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index 954c08f7e67f..0a2348d89311 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -572,9 +572,14 @@ void RTFDocumentImpl::seek(sal_uInt32 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) |