[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-6.2' - 2 commits - sw/qa sw/source
Miklos Vajna (via logerrit)
logerrit at kemper.freedesktop.org
Mon Feb 24 08:15:58 UTC 2020
sw/qa/extras/ooxmlexport/ooxmlexport13.cxx | 33 +++++++++++++++++
sw/source/filter/ww8/docxattributeoutput.cxx | 52 ++++++++++++++++-----------
sw/source/filter/ww8/docxattributeoutput.hxx | 1
3 files changed, 66 insertions(+), 20 deletions(-)
New commits:
commit 2b306411d6d0d2f3d791f2f2957fe245e420fc8f
Author: Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Tue Jan 21 21:25:08 2020 +0100
Commit: Miklos Vajna <vmiklos at collabora.com>
CommitDate: Mon Feb 24 09:15:41 2020 +0100
sw: add DOCX export for semi-transparent text
This is the case when the value is not in the grab-bag, that was already
supported.
(cherry picked from commit 6f6a64952d9aa4826e83ad94c2a6de2344cbe2de)
Conflicts:
sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
sw/source/filter/ww8/docxattributeoutput.cxx
Change-Id: I334333ec441644229540a358d7bf8811373618c7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/89222
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Miklos Vajna <vmiklos at collabora.com>
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
index f5fd6bc70b80..9dcc609fcf6a 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
@@ -27,6 +27,7 @@
#include <IDocumentSettingAccess.hxx>
#include <tools/lineend.hxx>
#include <xmloff/odffields.hxx>
+#include <oox/drawingml/drawingmltypes.hxx>
#include <editsh.hxx>
#include <frmatr.hxx>
@@ -510,6 +511,38 @@ CPPUNIT_TEST_FIXTURE(SwModelTestBase, testTableStyleConfNested)
assertXPath(pXmlDoc, "//w:body/w:tbl/w:tr/w:tc[2]/w:tcPr/w:tcBorders/w:top", "val", "nil");
}
+CPPUNIT_TEST_FIXTURE(SwModelTestBase, testSemiTransparentText)
+{
+ // Create an in-memory empty document.
+ loadURL("private:factory/swriter", nullptr);
+
+ // Set text to half-transparent and type a character.
+ uno::Reference<beans::XPropertySet> xParagraph(getParagraph(1), uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xParagraph.is());
+ sal_Int16 nTransparence = 75;
+ xParagraph->setPropertyValue("CharTransparence", uno::makeAny(nTransparence));
+ uno::Reference<text::XTextRange> xTextRange(xParagraph, uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xTextRange.is());
+ xTextRange->setString("x");
+
+ // Export to docx.
+ uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY);
+ utl::MediaDescriptor aMediaDescriptor;
+ aMediaDescriptor["FilterName"] <<= OUString("Office Open XML Text");
+ xStorable->storeToURL(maTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList());
+ mbExported = true;
+ xmlDocPtr pXmlDoc = parseExport("word/document.xml");
+ CPPUNIT_ASSERT(pXmlDoc);
+ OString aXPath
+ = "/w:document/w:body/w:p/w:r/w:rPr/w14:textFill/w14:solidFill/w14:srgbClr/w14:alpha";
+ double fValue = getXPath(pXmlDoc, aXPath, "val").toDouble();
+ sal_Int16 nActual = basegfx::fround(fValue / oox::drawingml::PER_PERCENT);
+
+ // Without the accompanying fix in place, this test would have failed, as the w14:textFill
+ // element was missing.
+ CPPUNIT_ASSERT_EQUAL(nTransparence, nActual);
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index c29326b8a287..d0ad6a0c11df 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -2577,7 +2577,6 @@ void DocxAttributeOutput::WriteCollectedRunProperties()
if ( m_pColorAttrList.is() )
{
XFastAttributeListRef xAttrList( m_pColorAttrList.get() );
- m_pColorAttrList.clear();
m_pSerializer->singleElementNS( XML_w, XML_color, xAttrList );
}
@@ -2596,6 +2595,24 @@ void DocxAttributeOutput::WriteCollectedRunProperties()
m_pSerializer->singleElementNS( XML_w, XML_lang, xAttrList );
}
+ if (m_nCharTransparence != 0 && m_pColorAttrList && m_aTextEffectsGrabBag.empty())
+ {
+ const char* pVal = nullptr;
+ m_pColorAttrList->getAsChar(FSNS(XML_w, XML_val), pVal);
+ if (OString("auto") != pVal)
+ {
+ m_pSerializer->startElementNS(XML_w14, XML_textFill, FSEND);
+ m_pSerializer->startElementNS(XML_w14, XML_solidFill, FSEND);
+ m_pSerializer->startElementNS(XML_w14, XML_srgbClr, FSNS(XML_w14, XML_val), pVal, FSEND);
+ sal_Int32 nTransparence = m_nCharTransparence * oox::drawingml::MAX_PERCENT / 255.0;
+ m_pSerializer->singleElementNS(XML_w14, XML_alpha, FSNS(XML_w14, XML_val), OString::number(nTransparence), FSEND);
+ m_pSerializer->endElementNS(XML_w14, XML_srgbClr);
+ m_pSerializer->endElementNS(XML_w14, XML_solidFill);
+ m_pSerializer->endElementNS(XML_w14, XML_textFill);
+ m_nCharTransparence = 0;
+ }
+ }
+ m_pColorAttrList.clear();
for (beans::PropertyValue & i : m_aTextEffectsGrabBag)
{
boost::optional<sal_Int32> aElementId = lclGetElementIdForName(i.Name);
@@ -6993,6 +7010,7 @@ void DocxAttributeOutput::CharColor( const SvxColorItem& rColor )
}
AddToAttrList( m_pColorAttrList, FSNS( XML_w, XML_val ), aColorString.getStr() );
+ m_nCharTransparence = aColor.GetTransparency();
}
void DocxAttributeOutput::CharContour( const SvxContourItem& rContour )
diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx
index 8994517184fa..7ecbf3202214 100644
--- a/sw/source/filter/ww8/docxattributeoutput.hxx
+++ b/sw/source/filter/ww8/docxattributeoutput.hxx
@@ -732,6 +732,7 @@ private:
bool m_bStartedParaSdt;
/// Attributes of the run color
rtl::Reference<sax_fastparser::FastAttributeList> m_pColorAttrList;
+ sal_uInt8 m_nCharTransparence = 0;
/// Attributes of the paragraph background
rtl::Reference<sax_fastparser::FastAttributeList> m_pBackgroundAttrList;
OUString m_sOriginalBackgroundColor;
commit f7f12d1a736daf26e7961db137bcd3e492c76e82
Author: Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Wed Nov 28 15:13:42 2018 +0200
Commit: Miklos Vajna <vmiklos at collabora.com>
CommitDate: Mon Feb 24 09:15:23 2020 +0100
remove unnecessary "if (!empty()" checks before loops
found with
git grep -n -A4 'if.*!.*empty' | grep -B3 -P
'(\bfor)|(\bwhile)|(\bdo)'
(cherry picked from commit 21de55596c0fdc2be736c6d0369bd9d3783020be)
Change-Id: I582235b7cf977a0f9fb4099eb306fdb4a07b5334
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/89221
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Miklos Vajna <vmiklos at collabora.com>
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index a8c2c08fcfe1..c29326b8a287 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -783,17 +783,14 @@ void DocxAttributeOutput::EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pT
m_pSerializer->mergeTopMarks(Tag_StartParagraph_1);
// Write framePr
- if(!aFramePrTextbox.empty())
+ for ( const auto & pFrame : aFramePrTextbox )
{
- for ( const auto & pFrame : aFramePrTextbox )
- {
- DocxTableExportContext aTableExportContext(*this);
- m_pCurrentFrame = pFrame.get();
- m_rExport.SdrExporter().writeOnlyTextOfFrame(pFrame.get());
- m_pCurrentFrame = nullptr;
- }
- aFramePrTextbox.clear();
+ DocxTableExportContext aTableExportContext(*this);
+ m_pCurrentFrame = pFrame.get();
+ m_rExport.SdrExporter().writeOnlyTextOfFrame(pFrame.get());
+ m_pCurrentFrame = nullptr;
}
+ aFramePrTextbox.clear();
// Check for end of cell, rows, tables here
FinishTableRowCell( pTextNodeInfoInner );
@@ -2599,20 +2596,17 @@ void DocxAttributeOutput::WriteCollectedRunProperties()
m_pSerializer->singleElementNS( XML_w, XML_lang, xAttrList );
}
- if (!m_aTextEffectsGrabBag.empty())
+ for (beans::PropertyValue & i : m_aTextEffectsGrabBag)
{
- for (beans::PropertyValue & i : m_aTextEffectsGrabBag)
+ boost::optional<sal_Int32> aElementId = lclGetElementIdForName(i.Name);
+ if(aElementId)
{
- boost::optional<sal_Int32> aElementId = lclGetElementIdForName(i.Name);
- if(aElementId)
- {
- uno::Sequence<beans::PropertyValue> aGrabBagSeq;
- i.Value >>= aGrabBagSeq;
- lclProcessRecursiveGrabBag(*aElementId, aGrabBagSeq, m_pSerializer);
- }
+ uno::Sequence<beans::PropertyValue> aGrabBagSeq;
+ i.Value >>= aGrabBagSeq;
+ lclProcessRecursiveGrabBag(*aElementId, aGrabBagSeq, m_pSerializer);
}
- m_aTextEffectsGrabBag.clear();
}
+ m_aTextEffectsGrabBag.clear();
}
void DocxAttributeOutput::EndRunProperties( const SwRedlineData* pRedlineData )
More information about the Libreoffice-commits
mailing list