Date: prev next · Thread: first prev next last
2016 Archives by date, by thread · List index


Hello everyone,

I just have some times to look at tdf#41253.
(https://bugs.documentfoundation.org/41253) But I don't promise I
could finish it, so I still didn't assign myself into a bug. Anyway,
let me explain (and ask) about it:

The bug is about importing pptx file which has shadowed text (one of
the text effects apart from bold, italic, underlined), but LibO can't
import "shadowing text".

The problem is, in OOXML structure, shadowing is declared in
<a:outerShdw> element, which is a child of <a:effectLst>. For more
info, please see http://www.datypic.com/sc/ooxml/e-a_effectLst-1.html

This is the OOXML sample comparing shadowed and non-shadowed text
(cropped from slide1.xml of an extracted pptx file):
---cut---
<a:p>
    <a:r>
        <a:rPr lang="en-US" dirty="0" smtClean="0">
            <a:effectLst>
                <a:outerShdw blurRad="38100" dist="38100"
dir="2700000" algn="tl"><a:srgbClr val="000000"><a:alpha val="43137"/>
                    </a:srgbClr>
                </a:outerShdw>
            </a:effectLst>
        </a:rPr>
        <a:t>Text with shadow</a:t>
    </a:r>
</a:p>
<a:p>
    <a:r>
        <a:rPr lang="en-US" dirty="0" smtClean="0"/>
         <a:t>Text without shadow</a:t>
    </a:r>
    <a:endParaRPr lang="th-TH" dirty="0"/>
</a:p>
---cut---

And the code parsing <a:effectLst> is still unsupported, see:
http://opengrok.libreoffice.org/xref/core/oox/source/drawingml/textcharacterpropertiescontext.cxx#101

This is my patch (also attached to this email). It compiled
successfully, but the shadowing still didn't work:

---cut---
diff --git a/oox/inc/drawingml/textcharacterproperties.hxx
b/oox/inc/drawingml/textcharacterproperties.hxx
index 055e58f..2dca075 100644
--- a/oox/inc/drawingml/textcharacterproperties.hxx
+++ b/oox/inc/drawingml/textcharacterproperties.hxx
@@ -56,6 +56,7 @@ struct TextCharacterProperties
     OptValue< bool >    moUnderlineLineFollowText;
     OptValue< bool >    moUnderlineFillFollowText;
     FillProperties      maFillProperties;
+    OptValue< bool >    moCharShadowed;

     std::vector<css::beans::PropertyValue> maTextEffectsProperties;

diff --git a/oox/source/drawingml/textcharacterproperties.cxx
b/oox/source/drawingml/textcharacterproperties.cxx
index 48803de..c5e1253 100644
--- a/oox/source/drawingml/textcharacterproperties.cxx
+++ b/oox/source/drawingml/textcharacterproperties.cxx
@@ -151,6 +151,10 @@ void TextCharacterProperties::pushToPropMap(
PropertyMap& rPropMap, const XmlFil
         rPropMap.setProperty( PROP_CharUnderlineHasColor, true);
         rPropMap.setProperty( PROP_CharUnderlineColor,
maUnderlineColor.getColor( rFilter.getGraphicHelper() ));
     }
+
+    bool bCharShadowed = moCharShadowed.get(false);
+    SAL_DEBUG(bCharShadowed);
+    rPropMap.setProperty( PROP_CharShadowed, /*true */bCharShadowed);
 }

 void pushToGrabBag( PropertySet& rPropSet, const
std::vector<PropertyValue>& aVectorOfProperyValues )
---cut---

In textcharacterproperties.cxx, it is where the shadowing process
done. If I change the argument to "true", like this:
    rPropMap.setProperty( PROP_CharShadowed, true);
Then all texts will got shadowed. The problem is, bCharShadowed is
never "true" in current patch, and I couldn't get it to be "true".

---cut---
diff --git a/oox/source/drawingml/textcharacterpropertiescontext.cxx
b/oox/source/drawingml/textcharacterpropertiescontext.cxx
index 1c62c1d..ef24ab1 100644
--- a/oox/source/drawingml/textcharacterpropertiescontext.cxx
+++ b/oox/source/drawingml/textcharacterpropertiescontext.cxx
@@ -217,6 +223,10 @@ ContextHandlerRef
TextCharacterPropertiesContext::onCreateContext( sal_Int32 aEl
                 return new TextEffectsContext( *this, aElementToken,
mrTextCharacterProperties.maTextEffectsProperties );
             }
             break;
+        case A_TOKEN(outerShdw):
+            SAL_DEBUG("A_TOKEN now True");
+            mrTextCharacterProperties.moCharShadowed = true;
+            break;
         default:
             SAL_WARN("oox",
"TextCharacterPropertiesContext::onCreateContext: unhandled element: "
<< getBaseToken(aElementToken));
             break;
---cut---

I don't know why bCharShadowed is never "true". But I think this
approach is likely inappropriate because we already have these:

---cut---
        // EG_EffectProperties
        case A_TOKEN( effectDag ):  // CT_EffectContainer 5.1.10.25
        case A_TOKEN( effectLst ):  // CT_EffectList 5.1.10.26
        break;
---cut---

in textcharacterpropertiescontext.cxx line 99-102, which I think it's
more correct to start from these codes.

So, should I start over from the line:
        case A_TOKEN( effectLst ):  // CT_EffectList 5.1.10.26
or any advise about my patch would be much appreciated.


Thank you very much.
Best Regards,
-- 
Korrawit Pruegsanusak
diff --git a/oox/inc/drawingml/textcharacterproperties.hxx 
b/oox/inc/drawingml/textcharacterproperties.hxx
index 055e58f..2dca075 100644
--- a/oox/inc/drawingml/textcharacterproperties.hxx
+++ b/oox/inc/drawingml/textcharacterproperties.hxx
@@ -56,6 +56,7 @@ struct TextCharacterProperties
     OptValue< bool >    moUnderlineLineFollowText;
     OptValue< bool >    moUnderlineFillFollowText;
     FillProperties      maFillProperties;
+    OptValue< bool >    moCharShadowed;
 
     std::vector<css::beans::PropertyValue> maTextEffectsProperties;
 
diff --git a/oox/source/drawingml/textcharacterproperties.cxx 
b/oox/source/drawingml/textcharacterproperties.cxx
index 48803de..c5e1253 100644
--- a/oox/source/drawingml/textcharacterproperties.cxx
+++ b/oox/source/drawingml/textcharacterproperties.cxx
@@ -151,6 +151,10 @@ void TextCharacterProperties::pushToPropMap( PropertyMap& rPropMap, const 
XmlFil
         rPropMap.setProperty( PROP_CharUnderlineHasColor, true);
         rPropMap.setProperty( PROP_CharUnderlineColor, maUnderlineColor.getColor( 
rFilter.getGraphicHelper() ));
     }
+
+    bool bCharShadowed = moCharShadowed.get(false);
+    SAL_DEBUG(bCharShadowed);
+    rPropMap.setProperty( PROP_CharShadowed, /*true */bCharShadowed);
 }
 
 void pushToGrabBag( PropertySet& rPropSet, const std::vector<PropertyValue>& 
aVectorOfProperyValues )
diff --git a/oox/source/drawingml/textcharacterpropertiescontext.cxx 
b/oox/source/drawingml/textcharacterpropertiescontext.cxx
index 1c62c1d..ef24ab1 100644
--- a/oox/source/drawingml/textcharacterpropertiescontext.cxx
+++ b/oox/source/drawingml/textcharacterpropertiescontext.cxx
@@ -217,6 +223,10 @@ ContextHandlerRef TextCharacterPropertiesContext::onCreateContext( sal_Int32 
aEl
                 return new TextEffectsContext( *this, aElementToken, 
mrTextCharacterProperties.maTextEffectsProperties );
             }
             break;
+        case A_TOKEN(outerShdw):
+            SAL_DEBUG("A_TOKEN now True");
+            mrTextCharacterProperties.moCharShadowed = true;
+            break;
         default:
             SAL_WARN("oox", "TextCharacterPropertiesContext::onCreateContext: unhandled element: " 
<< getBaseToken(aElementToken));
             break;

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.