summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@suse.cz>2013-04-18 14:42:22 +0200
committerMiklos Vajna <vmiklos@suse.cz>2013-04-18 15:54:05 +0200
commit3d4fef85d05269e613316a7af6245f05d207d76e (patch)
tree3d33fa69ee57089ca91f34845187ead3f5aad871
parent85f88a20b44a8c4742a6fdd6263e31cf023cfc36 (diff)
fdo#63023 incorrect RTF background color in header
Change-Id: I33f5c8a856206860ac9cdb23dd6b5222cb785bf7
-rw-r--r--sw/qa/extras/inc/swmodeltestbase.hxx18
-rw-r--r--sw/qa/extras/rtfimport/data/fdo63023.rtf10
-rw-r--r--sw/qa/extras/rtfimport/rtfimport.cxx9
-rw-r--r--writerfilter/source/rtftok/rtfdocumentimpl.cxx11
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)
{