[Libreoffice-commits] core.git: sw/source
Miklos Vajna
vmiklos at collabora.co.uk
Fri Dec 20 05:10:41 PST 2013
sw/source/filter/ww8/docxattributeoutput.cxx | 41 ++++++++++++++++++---------
1 file changed, 28 insertions(+), 13 deletions(-)
New commits:
commit a130de7e00bb426b15ec3b0ffc6bffc652d174ab
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Fri Dec 20 12:50:45 2013 +0100
sw: drawingml export of text frame back color transparency
CppunitTest_sw_ooxmlexport's testFdo66688 is a reproducer for this
problem.
Change-Id: Idbde9c0f8581652300ae29adcd27b83469f38b03
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index ce985b8..f16d047 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -5700,25 +5700,35 @@ void DocxAttributeOutput::FormatAnchor( const SwFmtAnchor& )
// Fly frames: anchors here aren't matching the anchors in docx
}
+boost::optional<sal_Int32> lcl_getDmlAlpha(const SvxBrushItem& rBrush)
+{
+ boost::optional<sal_Int32> oRet;
+ sal_Int32 nTransparency = rBrush.GetColor().GetTransparency();
+ if (nTransparency)
+ {
+ // Convert transparency to percent
+ sal_Int8 nTransparencyPercent = SvxBrushItem::TransparencyToPercent(nTransparency);
+
+ // Calculate alpha value
+ // Consider oox/source/drawingml/color.cxx : getTransparency() function.
+ sal_Int32 nAlpha = (::oox::drawingml::MAX_PERCENT - ( ::oox::drawingml::PER_PERCENT * nTransparencyPercent ) );
+ oRet = nAlpha;
+ }
+ return oRet;
+}
+
void DocxAttributeOutput::FormatBackground( const SvxBrushItem& rBrush )
{
OString sColor = msfilter::util::ConvertColor( rBrush.GetColor( ) );
+ boost::optional<sal_Int32> oAlpha = lcl_getDmlAlpha(rBrush);
if (m_bTextFrameSyntax)
{
// Handle 'Opacity'
- sal_Int32 nTransparency = rBrush.GetColor().GetTransparency();
- if (nTransparency)
+ if (oAlpha)
{
- // Convert transparency to percent
- sal_Int8 nTransparencyPercent = SvxBrushItem::TransparencyToPercent(nTransparency);
-
- // Calculate alpha value
- // Consider oox/source/drawingml/color.cxx : getTransparency() function.
- sal_Int32 nAlpha = (::oox::drawingml::MAX_PERCENT - ( ::oox::drawingml::PER_PERCENT * nTransparencyPercent ) );
-
// Calculate opacity value
// Consider oox/source/vml/vmlformatting.cxx : decodeColor() function.
- double fOpacity = (double)nAlpha * 65535 / ::oox::drawingml::MAX_PERCENT;
+ double fOpacity = (double)(*oAlpha) * 65535 / ::oox::drawingml::MAX_PERCENT;
OUString sOpacity = OUString::number(fOpacity);
if ( !m_pFlyFillAttrList )
@@ -5732,9 +5742,14 @@ void DocxAttributeOutput::FormatBackground( const SvxBrushItem& rBrush )
else if (m_bDMLTextFrameSyntax)
{
m_pSerializer->startElementNS(XML_a, XML_solidFill, FSEND);
- m_pSerializer->singleElementNS(XML_a, XML_srgbClr,
- XML_val, sColor,
- FSEND);
+ m_pSerializer->startElementNS(XML_a, XML_srgbClr,
+ XML_val, sColor,
+ FSEND);
+ if (oAlpha)
+ m_pSerializer->singleElementNS(XML_a, XML_alpha,
+ XML_val, OString::number(*oAlpha),
+ FSEND);
+ m_pSerializer->endElementNS(XML_a, XML_srgbClr);
m_pSerializer->endElementNS(XML_a, XML_solidFill);
}
else if ( !m_rExport.bOutPageDescs )
More information about the Libreoffice-commits
mailing list