[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