summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorSzymon Kłos <szymon.klos@collabora.com>2017-06-07 09:36:06 +0200
committerAndras Timar <andras.timar@collabora.com>2017-06-15 11:20:58 +0200
commitb802f3691fb2ac16d42f67f625d869fdab458ff7 (patch)
treecafeac07ff9907ece877dc45fad65d1e04a97d22 /sw
parent3f9f35973d935784edcc11b20c02382e47c13f70 (diff)
Watermark: RTF font import and export
* font size * font family * rotation * TextPath geometry - working transparency & color * revert TextBox export removed by mistake Change-Id: I3f6df86809ae57dc40c275652a96b19d2a3d7eba Reviewed-on: https://gerrit.libreoffice.org/38494 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Jenkins <ci@libreoffice.org> (cherry picked from commit dd0df1c8a213ab6f0959145396bc273bf885af39) Signed-off-by: Andras Timar <andras.timar@collabora.com>
Diffstat (limited to 'sw')
-rw-r--r--sw/qa/extras/rtfexport/rtfexport.cxx10
-rw-r--r--sw/source/filter/ww8/rtfsdrexport.cxx41
2 files changed, 48 insertions, 3 deletions
diff --git a/sw/qa/extras/rtfexport/rtfexport.cxx b/sw/qa/extras/rtfexport/rtfexport.cxx
index 69f305f53e92..46bf22190358 100644
--- a/sw/qa/extras/rtfexport/rtfexport.cxx
+++ b/sw/qa/extras/rtfexport/rtfexport.cxx
@@ -1153,9 +1153,19 @@ DECLARE_RTFEXPORT_TEST(testWatermark, "watermark.rtf")
CPPUNIT_ASSERT_EQUAL(OUString("WatermarkRTF"), xShape->getString());
uno::Reference<beans::XPropertySet> xPropertySet(xShape, uno::UNO_QUERY);
+ OUString aFont;
+ float nFontSize;
// Check transparency
CPPUNIT_ASSERT_EQUAL(sal_Int16(50), getProperty<sal_Int16>(xShape, "FillTransparence"));
+
+ // Check font family
+ CPPUNIT_ASSERT(xPropertySet->getPropertyValue("CharFontName") >>= aFont);
+ CPPUNIT_ASSERT_EQUAL(OUString("DejaVu Serif"), aFont);
+
+ // Check font size
+ CPPUNIT_ASSERT(xPropertySet->getPropertyValue("CharHeight") >>= nFontSize);
+ CPPUNIT_ASSERT_EQUAL((float)66, nFontSize);
}
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/source/filter/ww8/rtfsdrexport.cxx b/sw/source/filter/ww8/rtfsdrexport.cxx
index b8863f19f9b0..352833aa6a2c 100644
--- a/sw/source/filter/ww8/rtfsdrexport.cxx
+++ b/sw/source/filter/ww8/rtfsdrexport.cxx
@@ -20,14 +20,19 @@
#include "rtfsdrexport.hxx"
#include "rtfattributeoutput.hxx"
#include <svtools/rtfkeywd.hxx>
+#include <svtools/unitconv.hxx>
#include <filter/msfilter/rtfutil.hxx>
#include <editeng/editobj.hxx>
+#include <editeng/editids.hrc>
+#include <editeng/fontitem.hxx>
+#include <editeng/fhgtitem.hxx>
#include <svx/svdotext.hxx>
#include <svx/unoapi.hxx>
#include <vcl/cvtgrf.hxx>
#include <textboxhelper.hxx>
#include <dcontact.hxx>
#include <algorithm>
+#include <filter/msfilter/rtfutil.hxx>
using namespace css;
@@ -554,9 +559,39 @@ sal_Int32 RtfSdrExport::StartShape()
if (pParaObj)
{
- const EditTextObject& rEditObj = pParaObj->GetTextObject();
- lcl_AppendSP(m_rAttrOutput.RunText(), "gtextUNICODE",
- msfilter::rtfutil::OutString(rEditObj.GetText(0), m_rExport.m_eCurrentEncoding));
+ // this is reached only in case some text is attached to the shape
+ // Watermark or TextBox?
+ if (pTextObj->TakeObjNameSingul().match("Text Frame"))
+ WriteOutliner(*pParaObj, TXT_HFTXTBOX);
+ else
+ {
+ const EditTextObject& rEditObj = pParaObj->GetTextObject();
+ const SfxItemSet& rItemSet = rEditObj.GetParaAttribs(0);
+
+ lcl_AppendSP(m_rAttrOutput.RunText(), "gtextUNICODE",
+ msfilter::rtfutil::OutString(rEditObj.GetText(0), m_rExport.m_eCurrentEncoding));
+
+ const SvxFontItem* pFontFamily = static_cast<const SvxFontItem*>(rItemSet.GetItem(SID_ATTR_CHAR_FONT));
+ if (pFontFamily)
+ {
+ lcl_AppendSP(m_rAttrOutput.RunText(), "gtextFont",
+ msfilter::rtfutil::OutString(pFontFamily->GetFamilyName(), m_rExport.m_eCurrentEncoding));
+ }
+
+ const SvxFontHeightItem* pFontHeight = static_cast<const SvxFontHeightItem*>(rItemSet.GetItem(SID_ATTR_CHAR_FONTHEIGHT));
+ if (pFontHeight)
+ {
+ long nFontHeight = TransformMetric(pFontHeight->GetHeight(), FUNIT_TWIP, FUNIT_POINT);
+ lcl_AppendSP(m_rAttrOutput.RunText(), "gtextSize",
+ msfilter::rtfutil::OutString(OUString::number(nFontHeight * RTF_MULTIPLIER), m_rExport.m_eCurrentEncoding));
+ }
+
+ // RTF angle: 0-360 * 2^16 clockwise
+ // LO angle: 0-360 * 100 counter-clockwise
+ sal_Int32 nRotation = -1 * pTextObj->GetGeoStat().nRotationAngle * RTF_MULTIPLIER / 100;
+ lcl_AppendSP(m_rAttrOutput.RunText(), "rotation",
+ msfilter::rtfutil::OutString(OUString::number(nRotation), m_rExport.m_eCurrentEncoding));
+ }
}
}