summaryrefslogtreecommitdiffstats
path: root/src/ui/tools/freehand-base.cpp
diff options
context:
space:
mode:
authorJabier Arraiza <jabier.arraiza@marker.es>2017-12-21 00:25:47 +0000
committerJabier Arraiza <jabier.arraiza@marker.es>2017-12-21 00:25:47 +0000
commite94c84e82f183e118b3f65c52d814c0155276c3f (patch)
tree5e5717f9a0d6688113d12fb524c5c3dafd60bf1a /src/ui/tools/freehand-base.cpp
parentTiny fix to improbe release pentool (diff)
downloadinkscape-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.cpp49
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();