summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJabier Arraiza <jabier.arraiza@marker.es>2018-06-25 19:58:20 +0000
committerJabier Arraiza <jabier.arraiza@marker.es>2018-08-05 00:38:53 +0000
commitd119fffbaf3a19c463edb28b232015cb40880445 (patch)
treec2dd998e9dfd73d9b2d9c2ab167a3d8f881f265a
parentUpdate to trunk and styling fixes (diff)
downloadinkscape-d119fffbaf3a19c463edb28b232015cb40880445.tar.gz
inkscape-d119fffbaf3a19c463edb28b232015cb40880445.zip
Fixes pointed by Tav
-rw-r--r--src/extension/internal/emf-inout.cpp27
-rw-r--r--src/extension/internal/wmf-inout.cpp7
-rw-r--r--src/extension/internal/wmf-print.cpp7
-rw-r--r--src/object/sp-item.cpp5
-rw-r--r--src/style-internal.cpp181
-rw-r--r--src/style-internal.h9
-rw-r--r--src/ui/dialog/inkscape-preferences.cpp4
-rw-r--r--src/widgets/dash-selector.cpp11
-rw-r--r--testfiles/src/style-test.cpp2
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"),