diff options
| author | Jabier Arraiza <jabier.arraiza@marker.es> | 2018-06-25 19:58:20 +0000 |
|---|---|---|
| committer | Jabier Arraiza <jabier.arraiza@marker.es> | 2018-08-05 00:38:53 +0000 |
| commit | d119fffbaf3a19c463edb28b232015cb40880445 (patch) | |
| tree | c2dd998e9dfd73d9b2d9c2ab167a3d8f881f265a | |
| parent | Update to trunk and styling fixes (diff) | |
| download | inkscape-d119fffbaf3a19c463edb28b232015cb40880445.tar.gz inkscape-d119fffbaf3a19c463edb28b232015cb40880445.zip | |
Fixes pointed by Tav
| -rw-r--r-- | src/extension/internal/emf-inout.cpp | 27 | ||||
| -rw-r--r-- | src/extension/internal/wmf-inout.cpp | 7 | ||||
| -rw-r--r-- | src/extension/internal/wmf-print.cpp | 7 | ||||
| -rw-r--r-- | src/object/sp-item.cpp | 5 | ||||
| -rw-r--r-- | src/style-internal.cpp | 181 | ||||
| -rw-r--r-- | src/style-internal.h | 9 | ||||
| -rw-r--r-- | src/ui/dialog/inkscape-preferences.cpp | 4 | ||||
| -rw-r--r-- | src/widgets/dash-selector.cpp | 11 | ||||
| -rw-r--r-- | testfiles/src/style-test.cpp | 2 |
9 files changed, 102 insertions, 151 deletions
diff --git a/src/extension/internal/emf-inout.cpp b/src/extension/internal/emf-inout.cpp index a22a33e40..25228fe89 100644 --- a/src/extension/internal/emf-inout.cpp +++ b/src/extension/internal/emf-inout.cpp @@ -1095,17 +1095,16 @@ Emf::select_pen(PEMF_CALLBACK_DATA d, int index) case U_PS_DASHDOT: case U_PS_DASHDOTDOT: { - SPILength spilength; - spilength.read("1"); + SPILength spilength("temp", 1); int penstyle = (pEmr->lopn.lopnStyle & U_PS_STYLE_MASK); if (!d->dc[d->level].style.stroke_dasharray.values.empty() && (d->level == 0 || (d->level > 0 && d->dc[d->level].style.stroke_dasharray != d->dc[d->level - 1].style.stroke_dasharray))) d->dc[d->level].style.stroke_dasharray.values.clear(); if (penstyle==U_PS_DASH || penstyle==U_PS_DASHDOT || penstyle==U_PS_DASHDOTDOT) { - spilength.read("3"); + spilength.setDouble(3); d->dc[d->level].style.stroke_dasharray.values.push_back(spilength); - spilength.read("1"); + spilength.setDouble(1); d->dc[d->level].style.stroke_dasharray.values.push_back(spilength); } if (penstyle==U_PS_DOT || penstyle==U_PS_DASHDOT || penstyle==U_PS_DASHDOTDOT) { @@ -1190,13 +1189,9 @@ Emf::select_extpen(PEMF_CALLBACK_DATA d, int index) (d->level == 0 || (d->level > 0 && d->dc[d->level].style.stroke_dasharray != d->dc[d->level - 1].style.stroke_dasharray))) d->dc[d->level].style.stroke_dasharray.values.clear(); - SPILength spilength; for (unsigned int i=0; i<pEmr->elp.elpNumEntries; i++) { double dash_length = pix_to_abs_size( d, pEmr->elp.elpStyleEntry[i] ); - Inkscape::CSSOStringStream osarray; - osarray << dash_length; - spilength.read(osarray.str().c_str()); - d->dc[d->level].style.stroke_dasharray.values.push_back(spilength); + d->dc[d->level].style.stroke_dasharray.values.push_back(SPILength("temp", dash_length)); } d->dc[d->level].style.stroke_dasharray.set = 1; } else { @@ -1215,23 +1210,23 @@ Emf::select_extpen(PEMF_CALLBACK_DATA d, int index) (d->level == 0 || (d->level > 0 && d->dc[d->level].style.stroke_dasharray != d->dc[d->level - 1].style.stroke_dasharray))) d->dc[d->level].style.stroke_dasharray.values.clear(); - SPILength spilength; + SPILength spilength("temp"); if (penstyle==U_PS_DASH || penstyle==U_PS_DASHDOT || penstyle==U_PS_DASHDOTDOT) { - spilength.read("3"); + spilength.setDouble(3); d->dc[d->level].style.stroke_dasharray.values.push_back(spilength); - spilength.read("2"); + spilength.setDouble(2); d->dc[d->level].style.stroke_dasharray.values.push_back(spilength); } if (penstyle==U_PS_DOT || penstyle==U_PS_DASHDOT || penstyle==U_PS_DASHDOTDOT) { - spilength.read("1"); + spilength.setDouble(1); d->dc[d->level].style.stroke_dasharray.values.push_back(spilength); - spilength.read("2"); + spilength.setDouble(2); d->dc[d->level].style.stroke_dasharray.values.push_back(spilength); } if (penstyle==U_PS_DASHDOTDOT) { - spilength.read("1"); + spilength.setDouble(1); d->dc[d->level].style.stroke_dasharray.values.push_back(spilength); - spilength.read("2"); + spilength.setDouble(2); d->dc[d->level].style.stroke_dasharray.values.push_back(spilength); } diff --git a/src/extension/internal/wmf-inout.cpp b/src/extension/internal/wmf-inout.cpp index 1f8d4668d..3bc6b1b3d 100644 --- a/src/extension/internal/wmf-inout.cpp +++ b/src/extension/internal/wmf-inout.cpp @@ -985,16 +985,15 @@ Wmf::select_pen(PWMF_CALLBACK_DATA d, int index) case U_PS_DASHDOTDOT: { int penstyle = (up.Style & U_PS_STYLE_MASK); - SPILength spilength; - spilength.read("1"); + SPILength spilength("temp", 1); if (!d->dc[d->level].style.stroke_dasharray.values.empty() && (d->level == 0 || (d->level > 0 && d->dc[d->level].style.stroke_dasharray != d->dc[d->level - 1].style.stroke_dasharray))) d->dc[d->level].style.stroke_dasharray.values.clear(); if (penstyle==U_PS_DASH || penstyle==U_PS_DASHDOT || penstyle==U_PS_DASHDOTDOT) { - spilength.read("3"); + spilength.setDouble(3); d->dc[d->level].style.stroke_dasharray.values.push_back(spilength); - spilength.read("1"); + spilength.setDouble(1); d->dc[d->level].style.stroke_dasharray.values.push_back(spilength); } if (penstyle==U_PS_DOT || penstyle==U_PS_DASHDOT || penstyle==U_PS_DASHDOTDOT) { diff --git a/src/extension/internal/wmf-print.cpp b/src/extension/internal/wmf-print.cpp index 917aded32..3f6df1162 100644 --- a/src/extension/internal/wmf-print.cpp +++ b/src/extension/internal/wmf-print.cpp @@ -605,8 +605,11 @@ int PrintWmf::create_pen(SPStyle const *style, const Geom::Affine &transform) for (i=0;i<n_dash;i++) { int mark = style->stroke_dasharray.values[i].value; if (mark > mark_long) { - mark_long = mark; } - if (mark<mark_short) { mark_short = mark; } + mark_long = mark; + } + if (mark<mark_short) { + mark_short = mark; + } } if(mark_long == mark_short){ // only one mark size penstyle = U_PS_DOT; diff --git a/src/object/sp-item.cpp b/src/object/sp-item.cpp index 7d7edcc97..3b6329436 100644 --- a/src/object/sp-item.cpp +++ b/src/object/sp-item.cpp @@ -22,7 +22,6 @@ #include "bad-uri-exception.h" #include "svg/svg.h" -#include "svg/css-ostringstream.h" #include "print.h" #include "display/drawing-item.h" #include "attributes.h" @@ -1309,9 +1308,7 @@ void SPItem::adjust_stroke( gdouble ex ) if ( !style->stroke_dasharray.values.empty() ) { for (unsigned i = 0; i < style->stroke_dasharray.values.size(); i++) { double dash = style->stroke_dasharray.values[i].value * ex; - Inkscape::CSSOStringStream osarray; - osarray << dash; - style->stroke_dasharray.values[i].read(osarray.str().c_str()); + style->stroke_dasharray.values[i].setDouble(dash); } style->stroke_dashoffset.value *= ex; } diff --git a/src/style-internal.cpp b/src/style-internal.cpp index f22f77026..88bb50b46 100644 --- a/src/style-internal.cpp +++ b/src/style-internal.cpp @@ -37,9 +37,10 @@ #include "preferences.h" #include "streq.h" #include "strneq.h" -#include "svg/css-ostringstream.h" -#include "svg/svg-color.h" + #include "svg/svg.h" +#include "svg/svg-color.h" +#include "svg/css-ostringstream.h" #include "util/units.h" @@ -324,45 +325,7 @@ SPILength::write( guint const flags, SPStyleSrc const &style_src_req, SPIBase co if (this->inherit) { return (name + ":inherit;"); } else { - Inkscape::CSSOStringStream os; - switch (this->unit) { - case SP_CSS_UNIT_NONE: - os << name << ":" << this->computed; - break; - case SP_CSS_UNIT_PX: - os << name << ":" << this->computed << "px"; - break; - case SP_CSS_UNIT_PT: - os << name << ":" << Inkscape::Util::Quantity::convert(this->computed, "px", "pt") << "pt"; - break; - case SP_CSS_UNIT_PC: - os << name << ":" << Inkscape::Util::Quantity::convert(this->computed, "px", "pc") << "pc"; - break; - case SP_CSS_UNIT_MM: - os << name << ":" << Inkscape::Util::Quantity::convert(this->computed, "px", "mm") << "mm"; - break; - case SP_CSS_UNIT_CM: - os << name << ":" << Inkscape::Util::Quantity::convert(this->computed, "px", "cm") << "cm"; - break; - case SP_CSS_UNIT_IN: - os << name << ":" << Inkscape::Util::Quantity::convert(this->computed, "px", "in") << "in"; - break; - case SP_CSS_UNIT_EM: - os << name << ":" << this->value << "em"; - break; - case SP_CSS_UNIT_EX: - os << name << ":" << this->value << "ex"; - break; - case SP_CSS_UNIT_PERCENT: - os << name << ":" << (this->value * 100.0) << "%"; - break; - default: - /* Invalid */ - break; - } - os << important_str(); - os << ";"; - return os.str(); + return toString(true); } } return Glib::ustring(""); @@ -430,58 +393,62 @@ SPILength::merge( const SPIBase* const parent ) { } } -// Generate a string useful for passing dasharray without name, etc. -const Glib::ustring SPILength::toString(guint const flags, SPStyleSrc const &style_src_req, - SPIBase const *const base) const +void +SPILength::setDouble(double v) { + unit = SP_CSS_UNIT_NONE; + value = v; + computed = v; + value_default = v; +} + +// Generate a string and allow emove name for parsing dasharray, etc. +const Glib::ustring +SPILength::toString(bool wname) const { - SPILength const *const my_base = dynamic_cast<const SPILength *>(base); - bool dfp = (!inherits || !my_base || (my_base != this)); // Different from parent - bool src = (style_src_req == style_src || !(flags & SP_STYLE_FLAG_IFSRC)); - if (should_write(flags, set, dfp, src)) { - if (this->inherit) { - return ("inherit"); - } - else { - Inkscape::CSSOStringStream os; - switch (this->unit) { - case SP_CSS_UNIT_NONE: - os << this->computed; - break; - case SP_CSS_UNIT_PX: - os << this->computed << "px"; - break; - case SP_CSS_UNIT_PT: - os << Inkscape::Util::Quantity::convert(this->computed, "px", "pt") << "pt"; - break; - case SP_CSS_UNIT_PC: - os << Inkscape::Util::Quantity::convert(this->computed, "px", "pc") << "pc"; - break; - case SP_CSS_UNIT_MM: - os << Inkscape::Util::Quantity::convert(this->computed, "px", "mm") << "mm"; - break; - case SP_CSS_UNIT_CM: - os << Inkscape::Util::Quantity::convert(this->computed, "px", "cm") << "cm"; - break; - case SP_CSS_UNIT_IN: - os << Inkscape::Util::Quantity::convert(this->computed, "px", "in") << "in"; - break; - case SP_CSS_UNIT_EM: - os << this->value << "em"; - break; - case SP_CSS_UNIT_EX: - os << this->value << "ex"; - break; - case SP_CSS_UNIT_PERCENT: - os << (this->value * 100.0) << "%"; - break; - default: - /* Invalid */ - break; - } - return os.str(); - } - } - return Glib::ustring(""); + Inkscape:CSSOStringStream os; + if (wname) { + os << name << ":"; + } + switch (this->unit) { + case SP_CSS_UNIT_NONE: + os << this->computed; + break; + case SP_CSS_UNIT_PX: + os << this->computed << "px"; + break; + case SP_CSS_UNIT_PT: + os << Inkscape::Util::Quantity::convert(this->computed, "px", "pt") << "pt"; + break; + case SP_CSS_UNIT_PC: + os << Inkscape::Util::Quantity::convert(this->computed, "px", "pc") << "pc"; + break; + case SP_CSS_UNIT_MM: + os << Inkscape::Util::Quantity::convert(this->computed, "px", "mm") << "mm"; + break; + case SP_CSS_UNIT_CM: + os << Inkscape::Util::Quantity::convert(this->computed, "px", "cm") << "cm"; + break; + case SP_CSS_UNIT_IN: + os << Inkscape::Util::Quantity::convert(this->computed, "px", "in") << "in"; + break; + case SP_CSS_UNIT_EM: + os << this->value << "em"; + break; + case SP_CSS_UNIT_EX: + os << this->value << "ex"; + break; + case SP_CSS_UNIT_PERCENT: + os << (this->value * 100.0) << "%"; + break; + default: + /* Invalid */ + break; + } + if (wname) { + os << important_str(); + os << ";"; + } + return os.str(); } bool @@ -2089,27 +2056,25 @@ SPIDashArray::read( gchar const *str ) { gchar *e = NULL; bool LineSolid = true; - SPDocument *document = NULL; - if (style) { - document = (style->object) ? style->object->document : NULL; - } + for (auto token : tokens) { - SPILength spilength; + SPILength spilength("temp"); spilength.read(token.c_str()); if (spilength.value > 0.00000001) LineSolid = false; double dash = spilength.value; - if (document) { - if (spilength.unit == SPCSSUnit::SP_CSS_UNIT_PERCENT) { - dash = document->getViewBox().width() * spilength.value; - } - else if (spilength.unit != SPCSSUnit::SP_CSS_UNIT_NONE) { - dash = spilength.computed / document->getDocumentScale()[0]; - } - } - Inkscape::CSSOStringStream osarray; - osarray << dash; - spilength.read(osarray.str().c_str()); + //Currently inkscape handle unit conversion in dasharray but need + //a active document to do it, so put document inside a check for units + //and supose units are not included in tests + if (spilength.unit == SPCSSUnit::SP_CSS_UNIT_PERCENT) { + SPDocument *document = SP_ACTIVE_DOCUMENT; + dash = document->getViewBox().width() * spilength.value; + } + else if (spilength.unit != SPCSSUnit::SP_CSS_UNIT_NONE) { + SPDocument *document = SP_ACTIVE_DOCUMENT; + dash = spilength.computed / document->getDocumentScale()[0]; + } + spilength.setDouble(dash); values.push_back(spilength); } if (LineSolid) { diff --git a/src/style-internal.h b/src/style-internal.h index 935bf0630..c0e86d510 100644 --- a/src/style-internal.h +++ b/src/style-internal.h @@ -402,10 +402,8 @@ public: bool operator!=(const SPIBase& rhs) override { return !(*this == rhs); } - - virtual const Glib::ustring toString(guint const flags = SP_STYLE_FLAG_IFSET, - SPStyleSrc const &style_src_req = SP_STYLE_SRC_STYLE_PROP, - SPIBase const *const base = nullptr) const; + void setDouble(double v); + virtual const Glib::ustring toString(bool wname = false) const; // To do: make private public: @@ -1013,10 +1011,9 @@ public: return !(*this == rhs); } - // To do: make private, change double to SVGLength public: - std::vector<SPILength> values; + std::vector<SPILength> values; }; /// Filter type internal to SPStyle diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp index f452f4812..ad5b2186f 100644 --- a/src/ui/dialog/inkscape-preferences.cpp +++ b/src/ui/dialog/inkscape-preferences.cpp @@ -1448,8 +1448,8 @@ void InkscapePreferences::initPageBehavior() this->AddPage(_page_transforms, _("Transforms"), iter_behavior, PREFS_PAGE_BEHAVIOR_TRANSFORMS); - _dash_scale.init(_("Stroke width change dashes"), "/options/dash/scale", true); - _page_dashes.add_line(false, "", _dash_scale, "", _("When chage stroke width, scale the dash array")); + _dash_scale.init(_("Scale dashes with stroke"), "/options/dash/scale", true); + _page_dashes.add_line(false, "", _dash_scale, "", _("When changing stroke width, scale dash array")); this->AddPage(_page_dashes, _("Dashes"), iter_behavior, PREFS_PAGE_BEHAVIOR_DASHES); diff --git a/src/widgets/dash-selector.cpp b/src/widgets/dash-selector.cpp index 9956b9062..3f1c91dc3 100644 --- a/src/widgets/dash-selector.cpp +++ b/src/widgets/dash-selector.cpp @@ -152,8 +152,6 @@ void SPDashSelector::set_dash (int ndash, double *dash, double o) int pos = -1; // Allows custom patterns to remain unscathed by this. int count = 0; // will hold the NULL terminator at the end of the dashes list if (ndash > 0) { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - gboolean scale = prefs->getBool("/options/dash/scale", true); double delta = 0.0; for (int i = 0; i < ndash; i++) delta += dash[i]; @@ -167,13 +165,8 @@ void SPDashSelector::set_dash (int ndash, double *dash, double o) if (np == ndash) { int j; for (j = 0; j < ndash; j++) { - if (scale) { - if (!Geom::are_near(dash[j], pattern[j], delta)) - break; - } - else { - if (!Geom::are_near(dash[j], pattern[j], delta)) - break; + if (!Geom::are_near(dash[j], pattern[j], delta)) { + break; } } if (j == ndash) { diff --git a/testfiles/src/style-test.cpp b/testfiles/src/style-test.cpp index c7a5a22f8..e1069ae04 100644 --- a/testfiles/src/style-test.cpp +++ b/testfiles/src/style-test.cpp @@ -214,6 +214,8 @@ std::vector<StyleRead> getStyleData() StyleRead("marker-mid:url(#Arrow)"), StyleRead("marker-end:url(#Arrow)"), StyleRead("stroke-opacity:0.5"), // SPIScale24 + //Currently inkscape handle unit conversion in dasharray but need + //a active document to do it, so we can't include in any test StyleRead("stroke-dasharray:0, 1, 0, 1"), // SPIDashArray StyleRead("stroke-dasharray:0 1 0 1","stroke-dasharray:0, 1, 0, 1"), StyleRead("stroke-dasharray:0 1 2 3","stroke-dasharray:0, 1, 2, 3"), |
