diff options
| author | Martin Owens <doctormo@gmail.com> | 2013-04-21 00:19:01 +0000 |
|---|---|---|
| committer | Martin Owens <doctormo@gmail.com> | 2013-04-21 00:19:01 +0000 |
| commit | 1ccc84f1bf89ffca03f0be9eccb386ed061cae5b (patch) | |
| tree | ccb055cd835484d952c7ad29baadbd7856184b88 | |
| parent | Remove GLib error and remove some cruft (diff) | |
| parent | Group bbox update (Bug 1168979) (diff) | |
| download | inkscape-1ccc84f1bf89ffca03f0be9eccb386ed061cae5b.tar.gz inkscape-1ccc84f1bf89ffca03f0be9eccb386ed061cae5b.zip | |
Pull Merge
(bzr r12287)
| -rw-r--r-- | src/extension/internal/odf.cpp | 69 | ||||
| -rw-r--r-- | src/extension/internal/odf.h | 2 | ||||
| -rw-r--r-- | src/selection-chemistry.cpp | 1 | ||||
| -rw-r--r-- | src/ui/dialog/xml-tree.cpp | 1 |
4 files changed, 35 insertions, 38 deletions
diff --git a/src/extension/internal/odf.cpp b/src/extension/internal/odf.cpp index 70798099d..b23378fc3 100644 --- a/src/extension/internal/odf.cpp +++ b/src/extension/internal/odf.cpp @@ -47,7 +47,7 @@ #include <stdio.h> #include <time.h> #include <vector> - +#include <math.h> //# Inkscape includes #include "clear-n_.h" @@ -1315,8 +1315,9 @@ writePath(Writer &outs, Geom::PathVector const &pathv, return nrPoints; } -bool OdfOutput::processStyle(Writer &outs, SPItem *item, const Glib::ustring &id, const Glib::ustring &gradientNameFill, const Glib::ustring &gradientNameStroke) +bool OdfOutput::processStyle(SPItem *item, const Glib::ustring &id, const Glib::ustring &gradientNameFill, const Glib::ustring &gradientNameStroke, Glib::ustring& output) { + output.clear(); if (!item) { return false; @@ -1408,37 +1409,34 @@ bool OdfOutput::processStyle(Writer &outs, SPItem *item, const Glib::ustring &id styleTable.push_back(si); 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); - tmpstring += "<style:graphic-properties"; + output = Glib::ustring::compose ("<style:style style:name=\"%1\" style:family=\"graphic\" style:parent-style-name=\"standard\">\n", si.name); + output += "<style:graphic-properties"; if (si.fill == "gradient") { - tmpstring += Glib::ustring::compose (" draw:fill=\"gradient\" draw:fill-gradient-name=\"%1\"", gradientNameFill); + output += Glib::ustring::compose (" draw:fill=\"gradient\" draw:fill-gradient-name=\"%1\"", gradientNameFill); } else { - tmpstring += Glib::ustring(" draw:fill=\"") + si.fill + "\""; + output += 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\"", si.fillColor); + output += Glib::ustring::compose(" draw:fill-color=\"%1\"", si.fillColor); } } if (si.stroke == "gradient") { //does not seem to be supported by Open Office.org - tmpstring += Glib::ustring::compose (" draw:stroke=\"gradient\" draw:stroke-gradient-name=\"%1\"", gradientNameStroke); + output += Glib::ustring::compose (" draw:stroke=\"gradient\" draw:stroke-gradient-name=\"%1\"", gradientNameStroke); } else { - tmpstring += Glib::ustring(" draw:stroke=\"") + si.stroke + "\""; + output += Glib::ustring(" draw:stroke=\"") + si.stroke + "\""; if (si.stroke != "none") { - 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); + output += Glib::ustring::compose (" svg:stroke-width=\"%1\" svg:stroke-color=\"%2\" ", si.strokeWidth, si.strokeColor); } } - tmpstring += "/>\n</style:style>\n"; - outs.writeUString (tmpstring); + output += "/>\n</style:style>\n"; return true; } @@ -1483,6 +1481,7 @@ bool OdfOutput::processGradient(SPItem *item, gi.stops.push_back(gs); } + Glib::ustring gradientName2; if (SP_IS_LINEARGRADIENT(gradient)) { gi.style = "linear"; @@ -1491,16 +1490,16 @@ bool OdfOutput::processGradient(SPItem *item, gi.y1 = linGrad->y1.value; gi.x2 = linGrad->x2.value; gi.y2 = linGrad->y2.value; + gradientName2 = Glib::ustring::compose("ImportedLinearGradient%1", gradientTable.size()); } else if (SP_IS_RADIALGRADIENT(gradient)) { gi.style = "radial"; SPRadialGradient *radGrad = SP_RADIALGRADIENT(gradient); - 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; + Geom::OptRect bbox = item->documentVisualBounds(); + gi.cx = (radGrad->cx.value-bbox->left())/bbox->width(); + gi.cy = (radGrad->cy.value-bbox->top())/bbox->height(); + gradientName2 = Glib::ustring::compose("ImportedRadialGradient%1", gradientTable.size()); } else { @@ -1529,7 +1528,7 @@ bool OdfOutput::processGradient(SPItem *item, } // No match, let us write a new entry - gradientName = Glib::ustring::compose("gradient%1", gradientTable.size()); + gradientName = gradientName2; gi.name = gradientName; gradientTable.push_back(gi); gradientLookupTable[id] = gradientName; @@ -1555,12 +1554,17 @@ bool OdfOutput::processGradient(SPItem *item, return false; } output += Glib::ustring::compose("<draw:gradient draw:name=\"%1\"", gi.name); - output += Glib::ustring::compose(" draw:display-name=\"imported linear %1\"", gradientCount); + output += Glib::ustring::compose(" draw:display-name=\"%1\"", gi.name); output += " draw:style=\"linear\""; 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\"/>\n", - gi.stops[0].opacity * 100.0, gi.stops[1].opacity * 100.0);// draw:border=\"0%%\" + //TODO: apply maths, to define begin of gradient, taking gradient begin and end, as well as object boundary into account + double angle = (gi.y2-gi.y1); + angle = (angle != 0.) ? (atan((gi.x2-gi.x1)/(gi.y2-gi.y1))* 180. / pi) : 90; + angle = (angle < 0)?(180+angle):angle; + angle = angle * 10; //why do we need this: precision????????????? + output += Glib::ustring::compose(" draw:start-intensity=\"%1\" draw:end-intensity=\"%2\" draw:angle=\"%3\"/>\n", + gi.stops[0].opacity * 100.0, gi.stops[1].opacity * 100.0, angle);// draw:border=\"0%%\" } else if (gi.style == "radial") { @@ -1581,8 +1585,8 @@ bool OdfOutput::processGradient(SPItem *item, g_warning("Need at least 2 stops for a radial gradient"); return false; } - 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::compose("<draw:gradient draw:name=\"%1\" draw:display-name=\"%1\" ", gi.name); + snprintf(buf, 127, "draw:cx=\"%05.3f\" draw:cy=\"%05.3f\" ", gi.cx*100, gi.cy*100); 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; @@ -1689,6 +1693,7 @@ bool OdfOutput::writeTree(Writer &couts, Writer &souts, Glib::ustring gradientNameStroke; Glib::ustring outputFill; Glib::ustring outputStroke; + Glib::ustring outputStyle; processGradient(item, id, tf, gradientNameFill, outputFill, 1); processGradient(item, id, tf, gradientNameStroke, outputStroke, 0); @@ -1696,8 +1701,8 @@ bool OdfOutput::writeTree(Writer &couts, Writer &souts, souts.writeUString(outputStroke); //# STYLE - processStyle(souts, item, id, gradientNameFill, gradientNameStroke); - + processStyle(item, id, gradientNameFill, gradientNameStroke, outputStyle); + souts.writeUString(outputStyle); //# ITEM DATA if (nodeName == "image" || nodeName == "svg:image") @@ -1787,16 +1792,6 @@ bool OdfOutput::writeTree(Writer &couts, Writer &souts, Glib::ustring styleName = siter->second; couts.printf("draw:style-name=\"%s\" ", styleName.c_str()); } - // couts.writeUString(styleString); - - // std::map<Glib::ustring, Glib::ustring>::iterator giter; - // giter = gradientLookupTable.find(id); - // if (giter != gradientLookupTable.end()) - // { - // Glib::ustring gradientName = giter->second; - // couts.printf("draw:fill-gradient-name=\"%s\" ", - // gradientName.c_str()); - // } couts.printf("draw:layer=\"layout\" svg:x=\"%.3fcm\" svg:y=\"%.3fcm\" ", bbox_x, bbox_y); diff --git a/src/extension/internal/odf.h b/src/extension/internal/odf.h index 7dfbf9786..6b915e347 100644 --- a/src/extension/internal/odf.h +++ b/src/extension/internal/odf.h @@ -313,7 +313,7 @@ private: bool writeStyle(ZipFile &zf); - bool processStyle(Writer &outs, SPItem *item, const Glib::ustring &id, const Glib::ustring &gradientNameFill, const Glib::ustring &gradientNameStroke); + bool processStyle(SPItem *item, const Glib::ustring &id, const Glib::ustring &gradientNameFill, const Glib::ustring &gradientNameStroke, Glib::ustring& output); bool processGradient(SPItem *item, const Glib::ustring &id, Geom::Affine &tf, Glib::ustring& gradientName, Glib::ustring& output, bool checkFillGradient = 1); diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index 41ebc9bfc..fc410897a 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -360,6 +360,7 @@ void sp_selection_delete(SPDesktop *desktop) selection->clear(); sp_selection_delete_impl(selected); g_slist_free(const_cast<GSList *>(selected)); + reinterpret_cast<SPObject *>(desktop->currentLayer())->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); /* a tool may have set up private information in it's selection context * that depends on desktop items. I think the only sane way to deal with diff --git a/src/ui/dialog/xml-tree.cpp b/src/ui/dialog/xml-tree.cpp index 29dbc4b93..a537b7fca 100644 --- a/src/ui/dialog/xml-tree.cpp +++ b/src/ui/dialog/xml-tree.cpp @@ -986,6 +986,7 @@ void XmlTree::cmd_delete_node() g_assert(selected_repr != NULL); sp_repr_unparent(selected_repr); + reinterpret_cast<SPObject *>(current_desktop->currentLayer())->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); DocumentUndo::done(current_document, SP_VERB_DIALOG_XML_EDITOR, Q_("nodeAsInXMLinHistoryDialog|Delete node")); } |
