writerperfect/source/filter/OdgGenerator.cxx |   48 +++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)

New commits:
commit 6c2581db2d2d03e8b12e5adacdf9ca4394ec9cc5
Author: Fridrich Å trba <[email protected]>
Date:   Fri Mar 2 18:48:04 2012 +0100

    Initial support of bitmap fills in OdgGenerator

diff --git a/writerperfect/source/filter/OdgGenerator.cxx 
b/writerperfect/source/filter/OdgGenerator.cxx
index 52f1329..ef54b93 100644
--- a/writerperfect/source/filter/OdgGenerator.cxx
+++ b/writerperfect/source/filter/OdgGenerator.cxx
@@ -248,6 +248,7 @@ public:
     // graphics styles
     std::vector<DocumentElement *> mGraphicsStrokeDashStyles;
     std::vector<DocumentElement *> mGraphicsGradientStyles;
+    std::vector<DocumentElement *> mGraphicsBitmapStyles;
     std::vector<DocumentElement *> mGraphicsMarkerStyles;
     std::vector<DocumentElement *> mGraphicsAutomaticStyles;
 
@@ -270,6 +271,7 @@ public:
     ::WPXPropertyListVector mxGradient;
     ::WPXPropertyListVector mxMarker;
     int miGradientIndex;
+    int miBitmapIndex;
     int miStartMarkerIndex;
     int miEndMarkerIndex;
     int miDashIndex;
@@ -289,6 +291,7 @@ OdgGeneratorPrivate::OdgGeneratorPrivate(OdfDocumentHandler 
*pHandler, const Odf
     mBodyElements(),
     mGraphicsStrokeDashStyles(),
     mGraphicsGradientStyles(),
+    mGraphicsBitmapStyles(),
     mGraphicsAutomaticStyles(),
     mPageAutomaticStyles(),
     mPageMasterStyles(),
@@ -299,6 +302,7 @@ OdgGeneratorPrivate::OdgGeneratorPrivate(OdfDocumentHandler 
*pHandler, const Odf
     mxStyle(), mxGradient(),
     mxMarker(),
     miGradientIndex(1),
+    miBitmapIndex(1),
     miStartMarkerIndex(1),
     miEndMarkerIndex(1),
     miDashIndex(1),
@@ -342,6 +346,12 @@ OdgGeneratorPrivate::~OdgGeneratorPrivate()
         delete((*iterGraphicsGradientStyles));
     }
 
+    for (std::vector<DocumentElement *>::iterator iterGraphicsBitmapStyles = 
mGraphicsBitmapStyles.begin();
+            iterGraphicsBitmapStyles != mGraphicsBitmapStyles.end(); 
++iterGraphicsBitmapStyles)
+    {
+        delete((*iterGraphicsBitmapStyles));
+    }
+
     for (std::vector<DocumentElement *>::iterator iterGraphicsMarkerStyles = 
mGraphicsMarkerStyles.begin();
             iterGraphicsMarkerStyles != mGraphicsMarkerStyles.end(); 
++iterGraphicsMarkerStyles)
     {
@@ -453,6 +463,12 @@ OdgGenerator::~OdgGenerator()
             (*iterGraphicsGradientStyles)->write(mpImpl->mpHandler);
         }
 
+        for (std::vector<DocumentElement *>::const_iterator 
iterGraphicsBitmapStyles = mpImpl->mGraphicsBitmapStyles.begin();
+                iterGraphicsBitmapStyles != 
mpImpl->mGraphicsBitmapStyles.end(); ++iterGraphicsBitmapStyles)
+        {
+            (*iterGraphicsBitmapStyles)->write(mpImpl->mpHandler);
+        }
+
         for (std::vector<DocumentElement *>::const_iterator 
iterGraphicsMarkerStyles = mpImpl->mGraphicsMarkerStyles.begin();
                 iterGraphicsMarkerStyles != 
mpImpl->mGraphicsMarkerStyles.end(); ++iterGraphicsMarkerStyles)
         {
@@ -1234,6 +1250,20 @@ void OdgGeneratorPrivate::_writeGraphicsStyle()
             delete pDrawOpacityElement;
     }
 
+    if(mxStyle["draw:fill"] && mxStyle["draw:fill"]->getStr() == "bitmap" &&
+            mxStyle["draw:fill-image"] && mxStyle["libwpg:mime-type"])
+    {
+        TagOpenElement *pDrawBitmapElement = new 
TagOpenElement("draw:fill-image");
+        WPXString sValue;
+        sValue.sprintf("Bitmap_%i", miBitmapIndex++);
+        pDrawBitmapElement->addAttribute("draw:name", sValue);
+        mGraphicsBitmapStyles.push_back(pDrawBitmapElement);
+        mGraphicsBitmapStyles.push_back(new 
TagOpenElement("office:binary-data"));
+        mGraphicsBitmapStyles.push_back(new 
CharDataElement(mxStyle["draw:fill-image"]->getStr()));
+        mGraphicsBitmapStyles.push_back(new 
TagCloseElement("office:binary-data"));
+        mGraphicsBitmapStyles.push_back(new 
TagCloseElement("draw:fill-image"));
+    }
+
     TagOpenElement *pStyleStyleElement = new TagOpenElement("style:style");
     WPXString sValue;
     sValue.sprintf("gr%i",  miGraphicsStyleIndex);
@@ -1327,6 +1357,24 @@ void OdgGeneratorPrivate::_writeGraphicsStyle()
         }
     }
 
+    if(mxStyle["draw:fill"] && mxStyle["draw:fill"]->getStr() == "bitmap")
+    {
+        if (mxStyle["draw:fill-image"] && mxStyle["libwpg:mime-type"])
+        {
+            pStyleGraphicsPropertiesElement->addAttribute("draw:fill", 
"bitmap");
+            sValue.sprintf("Bitmap_%i", miBitmapIndex-1);
+            
pStyleGraphicsPropertiesElement->addAttribute("draw:fill-image-name", sValue);
+            if (mxStyle["svg:width"])
+                
pStyleGraphicsPropertiesElement->addAttribute("draw:fill-image-width", 
mxStyle["svg:width"]->getStr());
+            if (mxStyle["svg:height"])
+                
pStyleGraphicsPropertiesElement->addAttribute("draw:fill-image-height", 
mxStyle["svg:height"]->getStr());
+            if (mxStyle["style:repeat"])
+                pStyleGraphicsPropertiesElement->addAttribute("style:repeat", 
mxStyle["style:repeat"]->getStr());
+        }
+        else
+            pStyleGraphicsPropertiesElement->addAttribute("draw:fill", "none");
+    }
+
 
     if(mxStyle["draw:marker-start-path"])
     {
_______________________________________________
Libreoffice-commits mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to