diff options
| author | Jabier Arraiza <jabier.arraiza@marker.es> | 2018-06-10 14:20:18 +0000 |
|---|---|---|
| committer | Jabier Arraiza <jabier.arraiza@marker.es> | 2018-08-05 00:31:06 +0000 |
| commit | 7aaeaacc08de60fd324646afe69f4dbed93f89d4 (patch) | |
| tree | 13c87e946659151021e553dc3b752c3dbcd2f4a2 /src/extension/internal/cairo-render-context.cpp | |
| parent | Fix one symbolic icon bug (diff) | |
| download | inkscape-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/cairo-render-context.cpp')
| -rw-r--r-- | src/extension/internal/cairo-render-context.cpp | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/src/extension/internal/cairo-render-context.cpp b/src/extension/internal/cairo-render-context.cpp index da0797600..6d2267fde 100644 --- a/src/extension/internal/cairo-render-context.cpp +++ b/src/extension/internal/cairo-render-context.cpp @@ -48,7 +48,8 @@ #include "object/sp-pattern.h" #include "object/sp-mask.h" #include "object/sp-clippath.h" - +#include "object/sp-namedview.h" +#include "inkscape.h" #include "util/units.h" #ifdef WIN32 #include "libnrtype/FontFactory.h" // USE_PANGO_WIN32 @@ -1435,10 +1436,31 @@ CairoRenderContext::_setStrokeStyle(SPStyle const *style, Geom::OptRect const &p { size_t ndashes = style->stroke_dasharray.values.size(); double* dashes =(double*)malloc(ndashes*sizeof(double)); + 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 < ndashes; ++i ) { - dashes[i] = style->stroke_dasharray.values[i]; + if(style->stroke_dasharray.values[i].unit == SVGLength::NONE) { + dashes[i] = style->stroke_dasharray.values[i].value; + } else if (style->stroke_dasharray.values[i].unit == SVGLength::PERCENT) { + dashes[i] = vbox.width() * style->stroke_dasharray.values[i].value; + } else { + dashes[i] = Inkscape::Util::Quantity::convert(style->stroke_dasharray.values[i].computed, "px", display_unit.c_str()); + } + } + double dash_offset = 0; + if (style->stroke_dashoffset.unit == SVGLength::NONE) { + dash_offset = style->stroke_dashoffset.value; + } else if (style->stroke_dashoffset.unit == SVGLength::PERCENT) { + dash_offset = vbox.width() * style->stroke_dashoffset.value ; + } else { + dash_offset = Inkscape::Util::Quantity::convert(style->stroke_dashoffset.computed, "px", display_unit.c_str()); } - cairo_set_dash(_cr, dashes, ndashes, style->stroke_dashoffset.value); + cairo_set_dash(_cr, dashes, ndashes, dash_offset); free(dashes); } else { cairo_set_dash(_cr, nullptr, 0, 0.0); // disable dashing |
