diff options
| author | Jabier Arraiza <jabier.arraiza@marker.es> | 2017-12-21 00:25:47 +0000 |
|---|---|---|
| committer | Jabier Arraiza <jabier.arraiza@marker.es> | 2017-12-21 00:25:47 +0000 |
| commit | e94c84e82f183e118b3f65c52d814c0155276c3f (patch) | |
| tree | 5e5717f9a0d6688113d12fb524c5c3dafd60bf1a /src/ui/tools/freehand-base.cpp | |
| parent | Tiny fix to improbe release pentool (diff) | |
| download | inkscape-e94c84e82f183e118b3f65c52d814c0155276c3f.tar.gz inkscape-e94c84e82f183e118b3f65c52d814c0155276c3f.zip | |
Refactoring pencil powerstroke
Diffstat (limited to 'src/ui/tools/freehand-base.cpp')
| -rw-r--r-- | src/ui/tools/freehand-base.cpp | 49 |
1 files changed, 46 insertions, 3 deletions
diff --git a/src/ui/tools/freehand-base.cpp b/src/ui/tools/freehand-base.cpp index 8d701d057..e09219a23 100644 --- a/src/ui/tools/freehand-base.cpp +++ b/src/ui/tools/freehand-base.cpp @@ -241,8 +241,51 @@ static void spdc_apply_powerstroke_shape(std::vector<Geom::Point> points, Freeha if (!c) { return; } - pt->addPowerStrokePencil(c); - sp_shape->setCurve(c, true); + if(dc->sa) { + c = dc->sa_overwrited->copy(); + Effect* lpe = SP_LPE_ITEM(dc->white_item)->getCurrentLPE(); + LPEPowerStroke* ps = static_cast<LPEPowerStroke*>(lpe); + std::vector<Geom::Point> points; + if (ps) { + if (dc->sa->start) { + points = ps->offset_points.reverse_controlpoints(false); + } else { + points = ps->offset_points.data(); + } + } + size_t sa_curve_size = dc->sa->curve->get_segment_count(); + for (auto ptp:pt->points) { + ptp[Geom::X] = ptp[Geom::X] + sa_curve_size; + points.push_back(ptp); + } + pt->addPowerStrokePencil(c); + if (lpe) { + gchar * pvector_str = sp_svg_write_path(c->get_pathvector()); + item->setAttribute("inkscape:original-d" , pvector_str); + g_free(pvector_str); + } else { + gchar * pvector_str = sp_svg_write_path(c->get_pathvector()); + item->setAttribute("d" , pvector_str); + g_free(pvector_str); + } + if (ps) { + ps->offset_points.param_set_and_write_new_value(points); + points.clear(); + return; + } + } else { + Effect* lpe = SP_LPE_ITEM(item)->getCurrentLPE(); + pt->addPowerStrokePencil(c); + if (lpe) { + gchar * pvector_str = sp_svg_write_path(c->get_pathvector()); + item->setAttribute("inkscape:original-d" , pvector_str); + g_free(pvector_str); + } else { + gchar * pvector_str = sp_svg_write_path(c->get_pathvector()); + item->setAttribute("d" , pvector_str); + g_free(pvector_str); + } + } } if(pt->points.empty()){ Inkscape::Preferences *prefs = Inkscape::Preferences::get(); @@ -868,7 +911,7 @@ static void spdc_flush_white(FreehandBase *dc, SPCurve *gc) Inkscape::Preferences *prefs = Inkscape::Preferences::get(); SPItem *item = SP_ITEM(desktop->currentLayer()->appendChildRepr(repr)); //Bend needs the transforms applied after, Other effects best before - (dc, item, c, true); + spdc_check_for_and_apply_waiting_LPE(dc, item, c, true); Inkscape::GC::release(repr); item->transform = SP_ITEM(desktop->currentLayer())->i2doc_affine().inverse(); item->updateRepr(); |
