index a9f9508a92fa339506f8ac9372cd5ad11c1c96da..9ad2610989b6da0dfa60856ba91084c2a9f5ecef 100644 (file)
*
* Authors:
* Bob Jamison
+ * Abhishek Sharma
*
* Copyright (C) 2006 Bob Jamison
*
#include <dom/io/stringstream.h>
#include <dom/uri.h>
-#include <glib.h>
+#include <glibmm.h>
#include "extension/implementation/implementation.h"
#include <dom/util/ziptool.h>
#include <dom/io/domstream.h>
-
+#include "sp-item.h"
namespace Inkscape
{
return true;
}
- std::string name;
- std::string stroke;
- std::string strokeColor;
- std::string strokeWidth;
- std::string strokeOpacity;
- std::string fill;
- std::string fillColor;
- std::string fillOpacity;
+ Glib::ustring name;
+ Glib::ustring stroke;
+ Glib::ustring strokeColor;
+ Glib::ustring strokeWidth;
+ Glib::ustring strokeOpacity;
+ Glib::ustring fill;
+ Glib::ustring fillColor;
+ Glib::ustring fillOpacity;
+
+};
+
+
+
+class GradientStop
+{
+public:
+ GradientStop()
+ {}
+ GradientStop(unsigned long rgbArg, double opacityArg)
+ { rgb = rgbArg; opacity = opacityArg; }
+ virtual ~GradientStop()
+ {}
+ GradientStop(const GradientStop &other)
+ { assign(other); }
+ virtual GradientStop operator=(const GradientStop &other)
+ { assign(other); return *this; }
+ void assign(const GradientStop &other)
+ {
+ rgb = other.rgb;
+ opacity = other.opacity;
+ }
+ unsigned long rgb;
+ double opacity;
};
+
class GradientInfo
{
public:
y1 = other.y1;
x2 = other.x2;
y2 = other.y2;
+ stops = other.stops;
}
void init()
y1 = 0.0;
x2 = 0.0;
y2 = 0.0;
+ stops.clear();
}
virtual ~GradientInfo()
y2 != other.y2
)
return false;
+ if (stops.size() != other.stops.size())
+ return false;
+ for (unsigned int i=0 ; i<stops.size() ; i++)
+ {
+ GradientStop g1 = stops[i];
+ GradientStop g2 = other.stops[i];
+ if (g1.rgb != g2.rgb)
+ return false;
+ if (g1.opacity != g2.opacity)
+ return false;
+ }
return true;
}
- std::string name;
- std::string style;
+ Glib::ustring name;
+ Glib::ustring style;
double cx;
double cy;
double fx;
double y1;
double x2;
double y2;
+ std::vector<GradientStop> stops;
};
void save (Inkscape::Extension::Output *mod,
SPDocument *doc,
- const gchar *uri);
+ gchar const *filename);
static void init (void);
void reset();
//cc or dc metadata name/value pairs
- std::map<std::string, std::string> metadata;
+ std::map<Glib::ustring, Glib::ustring> metadata;
/* Style table
Uses a two-stage lookup to avoid style duplication.
but check for errors, of course
*/
//element id -> style entry name
- std::map<std::string, std::string> styleLookupTable;
+ std::map<Glib::ustring, Glib::ustring> styleLookupTable;
//style entry name -> style info
std::vector<StyleInfo> styleTable;
//element id -> gradient entry name
- std::map<std::string, std::string> gradientLookupTable;
+ std::map<Glib::ustring, Glib::ustring> gradientLookupTable;
//gradient entry name -> gradient info
std::vector<GradientInfo> gradientTable;
//for renaming image file names
- std::map<std::string, std::string> imageTable;
+ std::map<Glib::ustring, Glib::ustring> imageTable;
void preprocess(ZipFile &zf, Inkscape::XML::Node *node);
bool writeMeta(ZipFile &zf);
- bool writeStyle(Writer &outs);
+ bool writeStyle(ZipFile &zf);
+
+ bool processStyle(Writer &outs, SPItem *item, const Glib::ustring &id);
+
+ bool processGradient(Writer &outs, SPItem *item,
+ const Glib::ustring &id, Geom::Matrix &tf);
+
+ bool writeStyleHeader(Writer &outs);
+
+ bool writeStyleFooter(Writer &outs);
+
+ bool writeContentHeader(Writer &outs);
+
+ bool writeContentFooter(Writer &outs);
- bool writeTree(Writer &outs, Inkscape::XML::Node *node);
+ bool writeTree(Writer &couts, Writer &souts, Inkscape::XML::Node *node);
bool writeContent(ZipFile &zf, Inkscape::XML::Node *node);