[Libreoffice-commits] core.git: 4 commits - sw/qa sw/source
Miklos Vajna
vmiklos at suse.cz
Mon Apr 15 04:37:17 PDT 2013
sw/qa/extras/rtfexport/data/textframe-borders.rtf | 49 +++++++++++++++++
sw/qa/extras/rtfexport/rtfexport.cxx | 21 +++++++
sw/source/filter/ww8/rtfattributeoutput.cxx | 61 +++++++++++++++++++++-
3 files changed, 129 insertions(+), 2 deletions(-)
New commits:
commit bb9fce28d6d5f1cabc2af533bfdc7997ffb7184a
Author: Miklos Vajna <vmiklos at suse.cz>
Date: Mon Apr 15 13:31:01 2013 +0200
sw: RTF export of TextFrame border/shadow testcase
Change-Id: I85b85afb6d1b170d71633f93d56f7ce4fffdf0a3
diff --git a/sw/qa/extras/rtfexport/data/textframe-borders.rtf b/sw/qa/extras/rtfexport/data/textframe-borders.rtf
new file mode 100644
index 0000000..9aa1805
--- /dev/null
+++ b/sw/qa/extras/rtfexport/data/textframe-borders.rtf
@@ -0,0 +1,49 @@
+{\rtf1
+{\shp
+{\*\shpinst\shpleft-540\shptop152\shpright9900\shpbottom1592\shpfhdr0\shpbxcolumn\shpbxignore\shpbypara\shpbyignore\shpwr3\shpwrk0\shpfblwtxt0\shpz0\shplid1026
+{\sp
+{\sn shapeType}
+{\sv 1}
+}
+{\sp
+{\sn fFitShapeToText}
+{\sv 1}
+}
+{\sp
+{\sn fillColor}
+{\sv 9737689}
+}
+{\sp
+{\sn lineColor}
+{\sv 5066944}
+}
+{\sp
+{\sn lineWidth}
+{\sv 12700}
+}
+{\sp
+{\sn shadowType}
+{\sv 2}
+}
+{\sp
+{\sn shadowColor}
+{\sv 2303074}
+}
+{\sp
+{\sn shadowOffsetX}
+{\sv 12700}
+}
+{\sp
+{\sn shadowSecondOffsetX}
+{\sv -38100}
+}
+{\sp
+{\sn fShadow}
+{\sv 1}
+}
+{\shptxt aaa
+}
+}
+}
+\par
+}
diff --git a/sw/qa/extras/rtfexport/rtfexport.cxx b/sw/qa/extras/rtfexport/rtfexport.cxx
index ba8defd..f9ca432 100644
--- a/sw/qa/extras/rtfexport/rtfexport.cxx
+++ b/sw/qa/extras/rtfexport/rtfexport.cxx
@@ -28,6 +28,8 @@
#include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
#include <com/sun/star/drawing/EnhancedCustomShapeParameterPair.hpp>
#include <com/sun/star/frame/XStorable.hpp>
+#include <com/sun/star/table/BorderLine2.hpp>
+#include <com/sun/star/table/ShadowFormat.hpp>
#include <com/sun/star/text/XFootnotesSupplier.hpp>
#include <com/sun/star/text/XPageCursor.hpp>
#include <com/sun/star/text/XTextViewCursorSupplier.hpp>
@@ -77,6 +79,7 @@ public:
void testI120928();
void testBookmark();
void testHyperlink();
+ void testTextFrameBorders();
CPPUNIT_TEST_SUITE(Test);
#if !defined(MACOSX) && !defined(WNT)
@@ -128,6 +131,7 @@ void Test::run()
{"i120928.rtf", &Test::testI120928},
{"bookmark.rtf", &Test::testBookmark},
{"hyperlink.rtf", &Test::testHyperlink},
+ {"textframe-borders.rtf", &Test::testTextFrameBorders},
};
// Don't test the first import of these, for some reason those tests fail
const char* aBlacklist[] = {
@@ -557,6 +561,23 @@ void Test::testHyperlink()
CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(getRun(getParagraph(1), 3, "!"), "HyperLinkURL"));
}
+void Test::testTextFrameBorders()
+{
+ uno::Reference<text::XTextFramesSupplier> xTextFramesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xFrame(xIndexAccess->getByIndex(0), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0xD99594), getProperty<sal_Int32>(xFrame, "BackColor"));
+
+ table::BorderLine2 aBorder = getProperty<table::BorderLine2>(xFrame, "TopBorder");
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0xC0504D), aBorder.Color);
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(35), aBorder.LineWidth);
+
+ table::ShadowFormat aShadowFormat = getProperty<table::ShadowFormat>(xFrame, "ShadowFormat");
+ CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_BOTTOM_RIGHT, aShadowFormat.Location);
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(48), aShadowFormat.ShadowWidth);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0x622423), aShadowFormat.Color);
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(Test);
CPPUNIT_PLUGIN_IMPLEMENT();
commit d74ba0c4147f33abd9d0c03883cc88f15e160ee5
Author: Miklos Vajna <vmiklos at suse.cz>
Date: Mon Apr 15 13:01:22 2013 +0200
RtfAttributeOutput::FormatBackground: export fillColor
Change-Id: I9d187fc5b52a27ff5b8bc847a52fe95c63558a40
diff --git a/sw/source/filter/ww8/rtfattributeoutput.cxx b/sw/source/filter/ww8/rtfattributeoutput.cxx
index 5c92b3a..f645c87 100644
--- a/sw/source/filter/ww8/rtfattributeoutput.cxx
+++ b/sw/source/filter/ww8/rtfattributeoutput.cxx
@@ -2950,7 +2950,13 @@ void RtfAttributeOutput::FormatBackground( const SvxBrushItem& rBrush )
{
SAL_INFO("sw.rtf", OSL_THIS_FUNC);
- if( !rBrush.GetColor().GetTransparency() )
+ if (m_rExport.bRTFFlySyntax)
+ {
+ const Color& rColor = rBrush.GetColor();
+ // We in fact need RGB to BGR, but the transformation is symmetric.
+ m_aFlyProperties.push_back(std::make_pair<OString, OString>("fillColor", OString::number(msfilter::util::BGRToRGB(rColor.GetColor()))));
+ }
+ else if( !rBrush.GetColor().GetTransparency() )
{
m_aStyles.append(OOO_STRING_SVTOOLS_RTF_CBPAT);
m_aStyles.append((sal_Int32)m_rExport.GetColor(rBrush.GetColor()));
commit d897033777400e029de8751df98f2fc0b0cf34f5
Author: Miklos Vajna <vmiklos at suse.cz>
Date: Mon Apr 15 12:53:16 2013 +0200
RtfAttributeOutput: export fShadow, shadowColor, shadowOffset*
Change-Id: Ia6d27eadb41d66de558c290bc07b6d1c491f5f1c
diff --git a/sw/source/filter/ww8/rtfattributeoutput.cxx b/sw/source/filter/ww8/rtfattributeoutput.cxx
index 1521b75..5c92b3a 100644
--- a/sw/source/filter/ww8/rtfattributeoutput.cxx
+++ b/sw/source/filter/ww8/rtfattributeoutput.cxx
@@ -64,6 +64,7 @@
#include <editeng/frmdiritem.hxx>
#include <editeng/blinkitem.hxx>
#include <editeng/charhiddenitem.hxx>
+#include <editeng/shaditem.hxx>
#include <svx/svdmodel.hxx>
#include <svx/fmglob.hxx>
#include <svx/svdouno.hxx>
@@ -1487,6 +1488,38 @@ void RtfAttributeOutput::WriteHeaderFooter_Impl( const SwFrmFmt& rFmt, bool bHea
m_aRun = aRun;
}
+void lcl_TextFrameShadow(std::vector< std::pair<OString, OString> >& rFlyProperties, const SwFrmFmt& rFrmFmt)
+{
+ SvxShadowItem aShadowItem = rFrmFmt.GetShadow();
+ if (aShadowItem.GetLocation() == SVX_SHADOW_NONE)
+ return;
+
+ rFlyProperties.push_back(std::make_pair<OString, OString>("fShadow", OString::number(1)));
+
+ const Color& rColor = aShadowItem.GetColor();
+ // We in fact need RGB to BGR, but the transformation is symmetric.
+ rFlyProperties.push_back(std::make_pair<OString, OString>("shadowColor", OString::number(msfilter::util::BGRToRGB(rColor.GetColor()))));
+
+ // Twips -> points -> EMUs -- hacky, the intermediate step hides rounding errors on roundtrip.
+ OString aShadowWidth = OString::number(sal_Int32(aShadowItem.GetWidth() / 20) * 12700);
+ OString aOffsetX;
+ OString aOffsetY;
+ switch (aShadowItem.GetLocation())
+ {
+ case SVX_SHADOW_TOPLEFT: aOffsetX = "-" + aShadowWidth; aOffsetY = "-" + aShadowWidth; break;
+ case SVX_SHADOW_TOPRIGHT: aOffsetX = aShadowWidth; aOffsetY = "-" + aShadowWidth; break;
+ case SVX_SHADOW_BOTTOMLEFT: aOffsetX = "-" + aShadowWidth; aOffsetY = aShadowWidth; break;
+ case SVX_SHADOW_BOTTOMRIGHT: aOffsetX = aShadowWidth; aOffsetY = aShadowWidth; break;
+ case SVX_SHADOW_NONE:
+ case SVX_SHADOW_END:
+ break;
+ }
+ if (!aOffsetX.isEmpty())
+ rFlyProperties.push_back(std::make_pair<OString, OString>("shadowOffsetX", OString(aOffsetX)));
+ if (!aOffsetY.isEmpty())
+ rFlyProperties.push_back(std::make_pair<OString, OString>("shadowOffsetY", OString(aOffsetY)));
+}
+
void RtfAttributeOutput::OutputFlyFrame_Impl( const sw::Frame& rFrame, const Point& /*rNdTopLeft*/ )
{
SAL_INFO("sw.rtf", OSL_THIS_FUNC);
@@ -1519,6 +1552,9 @@ void RtfAttributeOutput::OutputFlyFrame_Impl( const sw::Frame& rFrame, const Poi
m_rExport.bOutFlyFrmAttrs = m_rExport.bRTFFlySyntax = false;
m_pFlyFrameSize = 0;
+ const SwFrmFmt& rFrmFmt = rFrame.GetFrmFmt();
+ lcl_TextFrameShadow(m_aFlyProperties, rFrmFmt);
+
for (size_t i = 0; i < m_aFlyProperties.size(); ++i)
{
m_rExport.Strm() << "{" OOO_STRING_SVTOOLS_RTF_SP "{";
@@ -1546,7 +1582,6 @@ void RtfAttributeOutput::OutputFlyFrame_Impl( const sw::Frame& rFrame, const Poi
m_bSingleEmptyRun = false;
m_rExport.bRTFFlySyntax = true;
- const SwFrmFmt& rFrmFmt = rFrame.GetFrmFmt( );
const SwNodeIndex* pNodeIndex = rFrmFmt.GetCntnt().GetCntntIdx();
sal_uLong nStt = pNodeIndex ? pNodeIndex->GetIndex()+1 : 0;
sal_uLong nEnd = pNodeIndex ? pNodeIndex->GetNode().EndOfSectionIndex() : 0;
commit 9e6a5b94e00f0054b058dbb42c2c0b6c75236c9d
Author: Miklos Vajna <vmiklos at suse.cz>
Date: Mon Apr 15 11:52:44 2013 +0200
RtfAttributeOutput::FormatBox: export line{Color,Width} shape properties
Change-Id: Id1fd8b4c7ebcc8ffd3b6914596385eb3eda922c6
diff --git a/sw/source/filter/ww8/rtfattributeoutput.cxx b/sw/source/filter/ww8/rtfattributeoutput.cxx
index 2918e5d..1521b75 100644
--- a/sw/source/filter/ww8/rtfattributeoutput.cxx
+++ b/sw/source/filter/ww8/rtfattributeoutput.cxx
@@ -2948,6 +2948,22 @@ void RtfAttributeOutput::FormatBox( const SvxBoxItem& rBox )
m_aFlyProperties.push_back(std::make_pair<OString, OString>("dyTextTop", OString::number(rBox.GetDistance(BOX_LINE_TOP) * 635)));
m_aFlyProperties.push_back(std::make_pair<OString, OString>("dxTextRight", OString::number(rBox.GetDistance(BOX_LINE_RIGHT) * 635)));
m_aFlyProperties.push_back(std::make_pair<OString, OString>("dyTextBottom", OString::number(rBox.GetDistance(BOX_LINE_BOTTOM) * 635)));
+
+ const SvxBorderLine* pLeft = rBox.GetLine(BOX_LINE_LEFT);
+ const SvxBorderLine* pRight = rBox.GetLine(BOX_LINE_RIGHT);
+ const SvxBorderLine* pTop = rBox.GetLine(BOX_LINE_TOP);
+ const SvxBorderLine* pBottom = rBox.GetLine(BOX_LINE_BOTTOM);
+ if (pLeft && pRight && pTop && pBottom && *pLeft == *pRight && *pLeft == *pTop && *pLeft == *pBottom)
+ {
+ const Color& rColor = pTop->GetColor();
+ // We in fact need RGB to BGR, but the transformation is symmetric.
+ m_aFlyProperties.push_back(std::make_pair<OString, OString>("lineColor", OString::number(msfilter::util::BGRToRGB(rColor.GetColor()))));
+
+ double const fConverted(editeng::ConvertBorderWidthToWord(pTop->GetBorderLineStyle(), pTop->GetWidth()));
+ sal_Int32 nWidth = sal_Int32(fConverted * 635); // Twips -> EMUs
+ m_aFlyProperties.push_back(std::make_pair<OString, OString>("lineWidth", OString::number(nWidth)));
+ }
+
return;
}
More information about the Libreoffice-commits
mailing list