summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKris De Gussem <kris.degussem@gmail.com>2013-04-12 21:27:16 +0000
committerKris <Kris.De.Gussem@hotmail.com>2013-04-12 21:27:16 +0000
commit17ff038eda24f39c002be1f5cab46f7729b561da (patch)
treed8b71d5fb04aa0eb46bf0a988c05f7106cafc92e /src
parentFix some broken Vim modelines (diff)
downloadinkscape-17ff038eda24f39c002be1f5cab46f7729b561da.tar.gz
inkscape-17ff038eda24f39c002be1f5cab46f7729b561da.zip
odg export: some work on gradients
(bzr r12276)
Diffstat (limited to 'src')
-rw-r--r--src/extension/internal/odf.cpp87
-rw-r--r--src/extension/internal/odf.h4
2 files changed, 36 insertions, 55 deletions
diff --git a/src/extension/internal/odf.cpp b/src/extension/internal/odf.cpp
index 9fc6ecfdb..70798099d 100644
--- a/src/extension/internal/odf.cpp
+++ b/src/extension/internal/odf.cpp
@@ -1315,7 +1315,7 @@ writePath(Writer &outs, Geom::PathVector const &pathv,
return nrPoints;
}
-bool OdfOutput::processStyle(Writer &outs, SPItem *item, const Glib::ustring &id, const Glib::ustring &gradientNameFill)//, Glib::ustring &styleString)
+bool OdfOutput::processStyle(Writer &outs, SPItem *item, const Glib::ustring &id, const Glib::ustring &gradientNameFill, const Glib::ustring &gradientNameStroke)
{
if (!item)
{
@@ -1409,8 +1409,7 @@ bool OdfOutput::processStyle(Writer &outs, SPItem *item, const Glib::ustring &id
styleLookupTable[id] = styleName;
Glib::ustring tmpstring = Glib::ustring::compose ("<style:style style:name=\"%1\" style:family=\"graphic\" style:parent-style-name=\"standard\">\n", si.name);
- // Glib::ustring tmpstring;
- tmpstring += "<style:graphic-properties ";
+ tmpstring += "<style:graphic-properties";
if (si.fill == "gradient")
{
tmpstring += Glib::ustring::compose (" draw:fill=\"gradient\" draw:fill-gradient-name=\"%1\"", gradientNameFill);
@@ -1420,19 +1419,22 @@ bool OdfOutput::processStyle(Writer &outs, SPItem *item, const Glib::ustring &id
tmpstring += Glib::ustring(" draw:fill=\"") + si.fill + "\"";
if(si.fill != "none")
{
- tmpstring += Glib::ustring::compose(" draw:fill-color=\"%1\" draw:fill-opacity=\"%2\"", si.fillColor, si.fillOpacity);
+ // tmpstring += Glib::ustring::compose(" draw:fill-color=\"%1\" draw:fill-opacity=\"%2\"", si.fillColor, si.fillOpacity);
+ tmpstring += Glib::ustring::compose(" draw:fill-color=\"%1\"", si.fillColor);
}
}
if (si.stroke == "gradient")
{
- tmpstring += Glib::ustring (" draw:stroke=\"gradient\" draw:stroke-gradient-name=\"NotYetProgrammedPleaseBePatient\"");
+ //does not seem to be supported by Open Office.org
+ tmpstring += Glib::ustring::compose (" draw:stroke=\"gradient\" draw:stroke-gradient-name=\"%1\"", gradientNameStroke);
}
else
{
tmpstring += Glib::ustring(" draw:stroke=\"") + si.stroke + "\"";
if (si.stroke != "none")
{
- tmpstring += Glib::ustring::compose (" svg:stroke-width=\"%1\" svg:stroke-color=\"%2\" svg:stroke-opacity=\"%3\" ", si.strokeWidth, si.strokeColor, si.strokeOpacity);
+ tmpstring += Glib::ustring::compose (" svg:stroke-width=\"%1\" svg:stroke-color=\"%2\" ", si.strokeWidth, si.strokeColor);
+ // tmpstring += Glib::ustring::compose (" svg:stroke-width=\"%1\" svg:stroke-color=\"%2\" draw:stroke-opacity=\"%3\" ", si.strokeWidth, si.strokeColor, si.strokeOpacity);
}
}
tmpstring += "/>\n</style:style>\n";
@@ -1441,7 +1443,7 @@ bool OdfOutput::processStyle(Writer &outs, SPItem *item, const Glib::ustring &id
return true;
}
-bool OdfOutput::processGradient(Writer &outs, SPItem *item,
+bool OdfOutput::processGradient(SPItem *item,
const Glib::ustring &id, Geom::Affine &/*tf*/,
Glib::ustring& gradientName, Glib::ustring& output, bool checkFillGradient)
{
@@ -1494,8 +1496,11 @@ bool OdfOutput::processGradient(Writer &outs, SPItem *item,
{
gi.style = "radial";
SPRadialGradient *radGrad = SP_RADIALGRADIENT(gradient);
- gi.cx = radGrad->cx.computed * 100.0;//ODG cx is percentages
- gi.cy = radGrad->cy.computed * 100.0;
+ SPRadialGradient tmpGrad = *radGrad;
+ tmpGrad.cx.unit= SVGLength::PERCENT;
+ tmpGrad.cy.unit= SVGLength::PERCENT;
+ gi.cx = tmpGrad.cx.computed;// * 100.0;//ODG cx is percentages
+ gi.cy = tmpGrad.cy.computed;// * 100.0;
}
else
{
@@ -1511,7 +1516,6 @@ bool OdfOutput::processGradient(Writer &outs, SPItem *item,
if (gi.equals(*iter))
{
//map to existing gradientTable entry
- // Glib::ustring gradientName = iter->name;
gradientName = iter->name;
gradientLookupTable[id] = gradientName;
gradientMatch = true;
@@ -1525,7 +1529,6 @@ bool OdfOutput::processGradient(Writer &outs, SPItem *item,
}
// No match, let us write a new entry
- // Glib::ustring gradientName = Glib::ustring::compose("gradient%1", gradientTable.size());
gradientName = Glib::ustring::compose("gradient%1", gradientTable.size());
gi.name = gradientName;
gradientTable.push_back(gi);
@@ -1552,16 +1555,12 @@ bool OdfOutput::processGradient(Writer &outs, SPItem *item,
return false;
}
output += Glib::ustring::compose("<draw:gradient draw:name=\"%1\"", gi.name);
- // "<draw:gradient id=\"%1\" draw:name=\"%2\"\n", gi.name, gi.name);
output += Glib::ustring::compose(" draw:display-name=\"imported linear %1\"", gradientCount);
output += " draw:style=\"linear\"";
- // outs.writeUString (tmpstring);
- // outs.printf(" draw:start-color=\"#%06lx\" draw:end-color=\"#%06lx\"\n", gi.stops[0].rgb, gi.stops[1].rgb);
snprintf(buf, 127, " draw:start-color=\"#%06lx\" draw:end-color=\"#%06lx\"", gi.stops[0].rgb, gi.stops[1].rgb);
output += buf;
- output += Glib::ustring::compose(" draw:start-intensity=\"%1\" draw:end-intensity=\"%2\" draw:angle=\"0\" draw:border=\"0%%\"/>\n",
- gi.stops[0].opacity * 100.0, gi.stops[1].opacity * 100.0);
- // outs.writeUString (tmpstring);
+ output += Glib::ustring::compose(" draw:start-intensity=\"%1\" draw:end-intensity=\"%2\" draw:angle=\"0\"/>\n",
+ gi.stops[0].opacity * 100.0, gi.stops[1].opacity * 100.0);// draw:border=\"0%%\"
}
else if (gi.style == "radial")
{
@@ -1582,33 +1581,14 @@ bool OdfOutput::processGradient(Writer &outs, SPItem *item,
g_warning("Need at least 2 stops for a radial gradient");
return false;
}
- /*
- outs.printf("<svg:radialGradient ");
- outs.printf("id=\"%s\" ", gi.name.c_str());
- outs.printf("draw:name=\"%s\"\n", gi.name.c_str());
- outs.printf(" draw:display-name=\"imported radial %d\"\n",
- gradientCount);
- outs.printf(" svg:gradientUnits=\"objectBoundingBox\"\n");
- outs.printf(" svg:cx=\"%05.3f\" svg:cy=\"%05.3f\"\n",
- gi.cx, gi.cy);
- outs.printf(" svg:fx=\"%05.3f\" svg:fy=\"%05.3f\"\n",
- gi.fx, gi.fy);
- outs.printf(" svg:r=\"%05.3f\">\n",
- gi.r);
- outs.printf(" <svg:stop\n");
- outs.printf(" svg:stop-color=\"#%06lx\"\n",
- gi.stops[0].rgb);
- outs.printf(" svg:stop-opacity=\"%f%%\"\n",
- gi.stops[0].opacity * 100.0);
- outs.printf(" svg:offset=\"0\"/>\n");
- outs.printf(" <svg:stop\n");
- outs.printf(" svg:stop-color=\"#%06lx\"\n",
- gi.stops[1].rgb);
- outs.printf(" svg:stop-opacity=\"%f%%\"\n",
- gi.stops[1].opacity * 100.0);
- outs.printf(" svg:offset=\"1\"/>\n");
- outs.printf("</svg:radialGradient>\n");
- */
+ output += Glib::ustring::compose("<draw:gradient draw:name=\"%1\" draw:display-name=\"imported radial %2\" ", gi.name, gradientCount);
+ snprintf(buf, 127, "draw:cx=\"%05.3f\" draw:cy=\"%05.3f\" ", gi.cx, gi.cy);
+ output += Glib::ustring("draw:style=\"radial\" ") + buf;
+ snprintf(buf, 127, "draw:start-color=\"#%06lx\" draw:end-color=\"#%06lx\" ", gi.stops[0].rgb, gi.stops[1].rgb);
+ output += buf;
+ snprintf(buf, 127, "draw:start-intensity=\"%f%%\" draw:end-intensity=\"%f%%\" ", gi.stops[0].opacity*100.0, gi.stops[1].opacity*100.0);
+ output += buf;
+ output += "/>\n";//draw:border=\"0%\"
}
else
{
@@ -1709,13 +1689,14 @@ bool OdfOutput::writeTree(Writer &couts, Writer &souts,
Glib::ustring gradientNameStroke;
Glib::ustring outputFill;
Glib::ustring outputStroke;
- // Glib::ustring styleString;
-
- processGradient(souts, item, id, tf, gradientNameFill, outputFill, 1);
+
+ processGradient(item, id, tf, gradientNameFill, outputFill, 1);
+ processGradient(item, id, tf, gradientNameStroke, outputStroke, 0);
souts.writeUString(outputFill);
+ souts.writeUString(outputStroke);
//# STYLE
- processStyle(souts, item, id, gradientNameFill);//, styleString);
+ processStyle(souts, item, id, gradientNameFill, gradientNameStroke);
//# ITEM DATA
@@ -1806,7 +1787,7 @@ bool OdfOutput::writeTree(Writer &couts, Writer &souts,
Glib::ustring styleName = siter->second;
couts.printf("draw:style-name=\"%s\" ", styleName.c_str());
}
- // couts.writeUString(styleString);
+ // couts.writeUString(styleString);
// std::map<Glib::ustring, Glib::ustring>::iterator giter;
// giter = gradientLookupTable.find(id);
@@ -1821,10 +1802,10 @@ bool OdfOutput::writeTree(Writer &couts, Writer &souts,
bbox_x, bbox_y);
couts.printf("svg:width=\"%.3fcm\" svg:height=\"%.3fcm\" ",
bbox_width, bbox_height);
- couts.printf("svg:viewBox=\"0.0 0.0 %.3f %.3f\"\n",
+ couts.printf("svg:viewBox=\"0.0 0.0 %.3f %.3f\"",
bbox_width * 1000.0, bbox_height * 1000.0);
- couts.printf(" svg:d=\"");
+ couts.printf(" svg:d=\"");
int nrPoints = writePath(couts, curve->get_pathvector(),
tf, bbox_x, bbox_y);
couts.writeString("\"");
@@ -1915,9 +1896,9 @@ bool OdfOutput::writeStyleFooter(Writer &outs)
outs.writeString("<!-- ####### 'Standard' styles ####### -->\n");
outs.writeString("<style:style style:name=\"dp1\" style:family=\"drawing-page\"/>\n");
outs.writeString("<style:style style:name=\"standard\" style:family=\"graphic\">\n");
-
+
///TODO: add default document style here
-
+
outs.writeString("</style:style>\n");
outs.writeString("<style:style style:name=\"gr1\" style:family=\"graphic\" style:parent-style-name=\"standard\">\n");
outs.writeString(" <style:graphic-properties draw:stroke=\"none\" draw:fill=\"none\"\n");
diff --git a/src/extension/internal/odf.h b/src/extension/internal/odf.h
index 5fcad2630..7dfbf9786 100644
--- a/src/extension/internal/odf.h
+++ b/src/extension/internal/odf.h
@@ -313,9 +313,9 @@ private:
bool writeStyle(ZipFile &zf);
- bool processStyle(Writer &outs, SPItem *item, const Glib::ustring &id, const Glib::ustring &gradientNameFill);//, Glib::ustring &styleString);
+ bool processStyle(Writer &outs, SPItem *item, const Glib::ustring &id, const Glib::ustring &gradientNameFill, const Glib::ustring &gradientNameStroke);
- bool processGradient(Writer &outs, SPItem *item,
+ bool processGradient(SPItem *item,
const Glib::ustring &id, Geom::Affine &tf, Glib::ustring& gradientName, Glib::ustring& output, bool checkFillGradient = 1);
bool writeStyleHeader(Writer &outs);