summaryrefslogtreecommitdiffstats
path: root/src/extension/internal/wmf-inout.cpp
diff options
context:
space:
mode:
authorJabier Arraiza <jabier.arraiza@marker.es>2018-06-10 14:20:18 +0000
committerJabier Arraiza <jabier.arraiza@marker.es>2018-08-05 00:31:06 +0000
commit7aaeaacc08de60fd324646afe69f4dbed93f89d4 (patch)
tree13c87e946659151021e553dc3b752c3dbcd2f4a2 /src/extension/internal/wmf-inout.cpp
parentFix one symbolic icon bug (diff)
downloadinkscape-7aaeaacc08de60fd324646afe69f4dbed93f89d4.tar.gz
inkscape-7aaeaacc08de60fd324646afe69f4dbed93f89d4.zip
Allow inkscape handle units and percent in dasharray and dashoffset. Add pref optional to scale dashes on stroke scale
Diffstat (limited to 'src/extension/internal/wmf-inout.cpp')
-rw-r--r--src/extension/internal/wmf-inout.cpp33
1 files changed, 26 insertions, 7 deletions
diff --git a/src/extension/internal/wmf-inout.cpp b/src/extension/internal/wmf-inout.cpp
index 72d44e123..a3df20903 100644
--- a/src/extension/internal/wmf-inout.cpp
+++ b/src/extension/internal/wmf-inout.cpp
@@ -44,8 +44,10 @@
#include "extension/output.h"
#include "display/drawing.h"
#include "display/drawing-item.h"
+#include "object/sp-namedview.h"
#include "clear-n_.h"
#include "svg/svg.h"
+#include "svg/svg-length.h"
#include "util/units.h" // even though it is included indirectly by wmf-inout.h
#include "inkscape.h" // even though it is included indirectly by wmf-inout.h
@@ -889,10 +891,23 @@ Wmf::output_style(PWMF_CALLBACK_DATA d)
!d->dc[d->level].style.stroke_dasharray.values.empty())
{
tmp_style << "stroke-dasharray:";
+ SPDocument * document = SP_ACTIVE_DOCUMENT;
+ SPNamedView *nv = sp_document_namedview(document, NULL);
+ Geom::Rect vbox = document->getViewBox();
+ Glib::ustring display_unit = "px";
+ if (nv) {
+ display_unit = nv->display_units->abbr;
+ }
for (unsigned i=0; i<d->dc[d->level].style.stroke_dasharray.values.size(); i++) {
if (i)
tmp_style << ",";
- tmp_style << d->dc[d->level].style.stroke_dasharray.values[i];
+ if(d->dc[d->level].style.stroke_dasharray.values[i].unit == SVGLength::NONE) {
+ tmp_style << d->dc[d->level].style.stroke_dasharray.values[i].value;
+ } else if (d->dc[d->level].style.stroke_dasharray.values[i].unit == SVGLength::PERCENT) {
+ tmp_style << vbox.width() * d->dc[d->level].style.stroke_dasharray.values[i].value;
+ } else {
+ tmp_style << Inkscape::Util::Quantity::convert(d->dc[d->level].style.stroke_dasharray.values[i].computed, "px", display_unit.c_str());
+ }
}
tmp_style << ";";
tmp_style << "stroke-dashoffset:0;";
@@ -987,17 +1002,21 @@ Wmf::select_pen(PWMF_CALLBACK_DATA d, int index)
int penstyle = (up.Style & 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.values!=d->dc[d->level-1].style.stroke_dasharray.values)))
d->dc[d->level].style.stroke_dasharray.values.clear();
+ SVGLength svglength;
if (penstyle==U_PS_DASH || penstyle==U_PS_DASHDOT || penstyle==U_PS_DASHDOTDOT) {
- d->dc[d->level].style.stroke_dasharray.values.push_back( 3 );
- d->dc[d->level].style.stroke_dasharray.values.push_back( 1 );
+ svglength.read("3");
+ d->dc[d->level].style.stroke_dasharray.values.push_back( svglength );
+ svglength.read("1");
+ d->dc[d->level].style.stroke_dasharray.values.push_back( svglength );
}
+ svglength.read("1");
if (penstyle==U_PS_DOT || penstyle==U_PS_DASHDOT || penstyle==U_PS_DASHDOTDOT) {
- d->dc[d->level].style.stroke_dasharray.values.push_back( 1 );
- d->dc[d->level].style.stroke_dasharray.values.push_back( 1 );
+ d->dc[d->level].style.stroke_dasharray.values.push_back( svglength );
+ d->dc[d->level].style.stroke_dasharray.values.push_back( svglength );
}
if (penstyle==U_PS_DASHDOTDOT) {
- d->dc[d->level].style.stroke_dasharray.values.push_back( 1 );
- d->dc[d->level].style.stroke_dasharray.values.push_back( 1 );
+ d->dc[d->level].style.stroke_dasharray.values.push_back( svglength );
+ d->dc[d->level].style.stroke_dasharray.values.push_back( svglength );
}
d->dc[d->level].style.stroke_dasharray.set = 1;