From db164d8341a6dca5cab6fdc4576234bc656ac6f7 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Sun, 12 Nov 2017 18:10:11 +0100 Subject: Base refactor --- src/ui/tools/freehand-base.cpp | 40 +++++++++++++++++----------------------- 1 file changed, 17 insertions(+), 23 deletions(-) (limited to 'src/ui/tools/freehand-base.cpp') diff --git a/src/ui/tools/freehand-base.cpp b/src/ui/tools/freehand-base.cpp index 064a83a5a..e6b55b6ce 100644 --- a/src/ui/tools/freehand-base.cpp +++ b/src/ui/tools/freehand-base.cpp @@ -235,39 +235,33 @@ static void spdc_apply_powerstroke_shape(std::vector points, Freeha Inkscape::Preferences *prefs = Inkscape::Preferences::get(); if (dc->input_has_pressure) { SPShape *sp_shape = dynamic_cast(item); + Geom::Path path; if (sp_shape) { SPCurve * c = sp_shape->getCurve(); if (!c) { + pt->points.clear(); return; } - pt->addPowerStrokePencil(c); + path = c->get_pathvector()[0]; } + pt->removePowerStrokePreview(); + double zoom = SP_EVENT_CONTEXT(dc)->desktop->current_zoom() * 5.0; + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + double min = prefs->getIntLimited("/tools/freehand/pencil/minpressure", 0, 1, 100) / 100.0; + double max = prefs->getIntLimited("/tools/freehand/pencil/maxpressure", 100, 1, 100) / 100.0; + if (min > max){ + min = max; + } + Geom::Affine transformCoordinate = SP_ITEM(SP_ACTIVE_DESKTOP->currentLayer())->i2dt_affine(); + Geom::Coord scale = transformCoordinate.expansionX(); + double pressure_shirnked = (1.0 * (max - min)) + min; + double pressure_computed = (pressure_shirnked * 8.0 * scale) / zoom; if(pt->points.empty()){ - //if use mouse give a line - double zoom = SP_EVENT_CONTEXT(dc)->desktop->current_zoom() * 5.0; - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - double min = prefs->getIntLimited("/tools/freehand/pencil/minpressure", 0, 1, 100) / 100.0; - double max = prefs->getIntLimited("/tools/freehand/pencil/maxpressure", 100, 1, 100) / 100.0; - if (min > max){ - min = max; - } - Geom::Affine transformCoordinate = SP_ITEM(SP_ACTIVE_DESKTOP->currentLayer())->i2dt_affine(); - Geom::Coord scale = transformCoordinate.expansionX(); - double pressure_shirnked = (1.0 * (max - min)) + min; - double pressure_computed = (pressure_shirnked * 8.0 * scale) / zoom; - pt->points.push_back(Geom::Point(0,pressure_computed)); + pt->points.push_back(Geom::Point(0, pressure_computed)); } Effect::createAndApply(POWERSTROKE, dc->desktop->doc(), item); Effect* lpe = SP_LPE_ITEM(item)->getCurrentLPE(); - if(prefs->getBool("/tools/freehand/pencil/optimus-powerstroke",true)) { - lpe->getRepr()->setAttribute("start_linecap_type", "round"); - lpe->getRepr()->setAttribute("end_linecap_type", "round"); - lpe->getRepr()->setAttribute("sort_points", "true"); - lpe->getRepr()->setAttribute("interpolator_type", "CentripetalCatmullRom"); - lpe->getRepr()->setAttribute("interpolator_beta", "0.2"); - lpe->getRepr()->setAttribute("miter_limit", "4"); - lpe->getRepr()->setAttribute("linejoin_type", "round"); - } + lpe->getRepr()->setAttribute("interpolator_type" , "CubicBezierSmooth"); static_cast(lpe)->offset_points.param_set_and_write_new_value(pt->points); pt->points.clear(); return; -- cgit v1.2.3 From b363482ca06fc72ffedd0fd05f5663b128352f89 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Mon, 13 Nov 2017 00:24:23 +0100 Subject: Added speed improbements --- src/ui/tools/freehand-base.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'src/ui/tools/freehand-base.cpp') diff --git a/src/ui/tools/freehand-base.cpp b/src/ui/tools/freehand-base.cpp index e6b55b6ce..52f578d13 100644 --- a/src/ui/tools/freehand-base.cpp +++ b/src/ui/tools/freehand-base.cpp @@ -235,14 +235,18 @@ static void spdc_apply_powerstroke_shape(std::vector points, Freeha Inkscape::Preferences *prefs = Inkscape::Preferences::get(); if (dc->input_has_pressure) { SPShape *sp_shape = dynamic_cast(item); - Geom::Path path; + Geom::PathVector pathv; if (sp_shape) { SPCurve * c = sp_shape->getCurve(); if (!c) { pt->points.clear(); return; } - path = c->get_pathvector()[0]; + pathv = c->get_pathvector(); + SPCurve * tmp_curve_to_adjust = new SPCurve(); + tmp_curve_to_adjust->set_pathvector(pt->pressure_pv); + sp_shape->setCurve(tmp_curve_to_adjust, true); + tmp_curve_to_adjust->unref(); } pt->removePowerStrokePreview(); double zoom = SP_EVENT_CONTEXT(dc)->desktop->current_zoom() * 5.0; @@ -262,7 +266,17 @@ static void spdc_apply_powerstroke_shape(std::vector points, Freeha Effect::createAndApply(POWERSTROKE, dc->desktop->doc(), item); Effect* lpe = SP_LPE_ITEM(item)->getCurrentLPE(); lpe->getRepr()->setAttribute("interpolator_type" , "CubicBezierSmooth"); - static_cast(lpe)->offset_points.param_set_and_write_new_value(pt->points); + LPEPowerStroke* pslpe = static_cast(lpe); + if (pslpe) { + pslpe->offset_points.param_set_and_write_new_value(pt->points); + if (sp_shape) { + SPCurve * tmp_curve_to_adjust = new SPCurve(); + tmp_curve_to_adjust->set_pathvector(pathv); + sp_shape->setCurve(tmp_curve_to_adjust, true); + tmp_curve_to_adjust->unref(); + pslpe->adjustForNewPath(pt->pressure_pv); + } + } pt->points.clear(); return; } -- cgit v1.2.3 From 3ff3539433be9d91f2d77eb5b45f9b1faeb577ec Mon Sep 17 00:00:00 2001 From: Jabiertxo Arraiza Cenoz Date: Mon, 13 Nov 2017 23:06:14 +0100 Subject: Working refactor --- src/ui/tools/freehand-base.cpp | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) (limited to 'src/ui/tools/freehand-base.cpp') diff --git a/src/ui/tools/freehand-base.cpp b/src/ui/tools/freehand-base.cpp index 52f578d13..bff24346a 100644 --- a/src/ui/tools/freehand-base.cpp +++ b/src/ui/tools/freehand-base.cpp @@ -235,20 +235,13 @@ static void spdc_apply_powerstroke_shape(std::vector points, Freeha Inkscape::Preferences *prefs = Inkscape::Preferences::get(); if (dc->input_has_pressure) { SPShape *sp_shape = dynamic_cast(item); - Geom::PathVector pathv; if (sp_shape) { SPCurve * c = sp_shape->getCurve(); if (!c) { - pt->points.clear(); return; } - pathv = c->get_pathvector(); - SPCurve * tmp_curve_to_adjust = new SPCurve(); - tmp_curve_to_adjust->set_pathvector(pt->pressure_pv); - sp_shape->setCurve(tmp_curve_to_adjust, true); - tmp_curve_to_adjust->unref(); + pt->addPowerStrokePencil(c); } - pt->removePowerStrokePreview(); double zoom = SP_EVENT_CONTEXT(dc)->desktop->current_zoom() * 5.0; Inkscape::Preferences *prefs = Inkscape::Preferences::get(); double min = prefs->getIntLimited("/tools/freehand/pencil/minpressure", 0, 1, 100) / 100.0; @@ -265,18 +258,7 @@ static void spdc_apply_powerstroke_shape(std::vector points, Freeha } Effect::createAndApply(POWERSTROKE, dc->desktop->doc(), item); Effect* lpe = SP_LPE_ITEM(item)->getCurrentLPE(); - lpe->getRepr()->setAttribute("interpolator_type" , "CubicBezierSmooth"); - LPEPowerStroke* pslpe = static_cast(lpe); - if (pslpe) { - pslpe->offset_points.param_set_and_write_new_value(pt->points); - if (sp_shape) { - SPCurve * tmp_curve_to_adjust = new SPCurve(); - tmp_curve_to_adjust->set_pathvector(pathv); - sp_shape->setCurve(tmp_curve_to_adjust, true); - tmp_curve_to_adjust->unref(); - pslpe->adjustForNewPath(pt->pressure_pv); - } - } + static_cast(lpe)->offset_points.param_set_and_write_new_value(pt->points); pt->points.clear(); return; } -- cgit v1.2.3 From 4c790c63b7918e2745420c082bfa13e69cec74bd Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Sun, 19 Nov 2017 02:47:56 +0100 Subject: Working on fix smooth draw --- src/ui/tools/freehand-base.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/ui/tools/freehand-base.cpp') diff --git a/src/ui/tools/freehand-base.cpp b/src/ui/tools/freehand-base.cpp index bff24346a..ae91f1f8b 100644 --- a/src/ui/tools/freehand-base.cpp +++ b/src/ui/tools/freehand-base.cpp @@ -258,6 +258,9 @@ static void spdc_apply_powerstroke_shape(std::vector points, Freeha } Effect::createAndApply(POWERSTROKE, dc->desktop->doc(), item); Effect* lpe = SP_LPE_ITEM(item)->getCurrentLPE(); + lpe->getRepr()->setAttribute("sort_points", "true"); + lpe->getRepr()->setAttribute("interpolator_type", "CentripetalCatmullRom"); + lpe->getRepr()->setAttribute("linejoin_type", "round"); static_cast(lpe)->offset_points.param_set_and_write_new_value(pt->points); pt->points.clear(); return; -- cgit v1.2.3 From d91112f7116f50489bd93047f6e7bc0985512c68 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Sun, 19 Nov 2017 23:54:21 +0100 Subject: Working on coontinuing paths --- src/ui/tools/freehand-base.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'src/ui/tools/freehand-base.cpp') diff --git a/src/ui/tools/freehand-base.cpp b/src/ui/tools/freehand-base.cpp index ae91f1f8b..0d539b0f3 100644 --- a/src/ui/tools/freehand-base.cpp +++ b/src/ui/tools/freehand-base.cpp @@ -242,24 +242,24 @@ static void spdc_apply_powerstroke_shape(std::vector points, Freeha } pt->addPowerStrokePencil(c); } - double zoom = SP_EVENT_CONTEXT(dc)->desktop->current_zoom() * 5.0; - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - double min = prefs->getIntLimited("/tools/freehand/pencil/minpressure", 0, 1, 100) / 100.0; - double max = prefs->getIntLimited("/tools/freehand/pencil/maxpressure", 100, 1, 100) / 100.0; - if (min > max){ - min = max; - } - Geom::Affine transformCoordinate = SP_ITEM(SP_ACTIVE_DESKTOP->currentLayer())->i2dt_affine(); - Geom::Coord scale = transformCoordinate.expansionX(); - double pressure_shirnked = (1.0 * (max - min)) + min; - double pressure_computed = (pressure_shirnked * 8.0 * scale) / zoom; if(pt->points.empty()){ - pt->points.push_back(Geom::Point(0, pressure_computed)); + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + SPCSSAttr *css_item = sp_css_attr_from_object(item, SP_STYLE_FLAG_ALWAYS); + const char *stroke_width = sp_repr_css_property(css_item, "stroke-width", "0"); + double swidth; + sp_svg_number_read_d(stroke_width, &swidth); + swidth = prefs->getDouble("/live_effect/power_stroke/width", swidth/2); + if (!swidth) { + swidth = swidth/2; + } + pt->points.push_back(Geom::Point(0, swidth)); } Effect::createAndApply(POWERSTROKE, dc->desktop->doc(), item); Effect* lpe = SP_LPE_ITEM(item)->getCurrentLPE(); lpe->getRepr()->setAttribute("sort_points", "true"); lpe->getRepr()->setAttribute("interpolator_type", "CentripetalCatmullRom"); + lpe->getRepr()->setAttribute("interpolator_beta", "0.2"); + lpe->getRepr()->setAttribute("miter_limit", "4"); lpe->getRepr()->setAttribute("linejoin_type", "round"); static_cast(lpe)->offset_points.param_set_and_write_new_value(pt->points); pt->points.clear(); -- cgit v1.2.3 From b861f310ab1c2c71ec3aae2dd231baffbc8080be Mon Sep 17 00:00:00 2001 From: Jabiertxo Arraiza Cenoz Date: Mon, 20 Nov 2017 22:29:38 +0100 Subject: Smoothing start and end --- src/ui/tools/freehand-base.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/ui/tools/freehand-base.cpp') diff --git a/src/ui/tools/freehand-base.cpp b/src/ui/tools/freehand-base.cpp index 0d539b0f3..1259d411f 100644 --- a/src/ui/tools/freehand-base.cpp +++ b/src/ui/tools/freehand-base.cpp @@ -259,8 +259,8 @@ static void spdc_apply_powerstroke_shape(std::vector points, Freeha lpe->getRepr()->setAttribute("sort_points", "true"); lpe->getRepr()->setAttribute("interpolator_type", "CentripetalCatmullRom"); lpe->getRepr()->setAttribute("interpolator_beta", "0.2"); - lpe->getRepr()->setAttribute("miter_limit", "4"); - lpe->getRepr()->setAttribute("linejoin_type", "round"); + lpe->getRepr()->setAttribute("miter_limit", "100"); + lpe->getRepr()->setAttribute("linejoin_type", "miter"); static_cast(lpe)->offset_points.param_set_and_write_new_value(pt->points); pt->points.clear(); return; -- cgit v1.2.3 From 157d892c95684c195bfe9ad050e8c881cc3d4555 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Wed, 22 Nov 2017 23:58:26 +0100 Subject: Working on continuous paths --- src/ui/tools/freehand-base.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'src/ui/tools/freehand-base.cpp') diff --git a/src/ui/tools/freehand-base.cpp b/src/ui/tools/freehand-base.cpp index 1259d411f..15027b6f3 100644 --- a/src/ui/tools/freehand-base.cpp +++ b/src/ui/tools/freehand-base.cpp @@ -330,7 +330,6 @@ static void spdc_check_for_and_apply_waiting_LPE(FreehandBase *dc, SPItem *item, { using namespace Inkscape::LivePathEffect; Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - if (item && SP_IS_LPE_ITEM(item)) { //Store the clipboard path to apply in the future without the use of clipboard static Geom::PathVector previous_shape_pathv; @@ -397,11 +396,16 @@ static void spdc_check_for_and_apply_waiting_LPE(FreehandBase *dc, SPItem *item, } if (SP_IS_PENCIL_CONTEXT(dc)) { if (dc->input_has_pressure) { - std::vector points; - spdc_apply_powerstroke_shape(points, dc, item); - shape = NONE; - //To allow retain color - shape_applied = true; + if (shape == NONE) { + std::vector points; + spdc_apply_powerstroke_shape(points, dc, item); + //To allow retain color + shape_applied = true; + } else { + PencilTool *pt = SP_PENCIL_CONTEXT(dc); + pt->removePowerStrokePreview(); + shape == NONE; + } } } #define SHAPE_LENGTH 10 @@ -865,7 +869,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 - spdc_check_for_and_apply_waiting_LPE(dc, item, c, true); + (dc, item, c, true); Inkscape::GC::release(repr); item->transform = SP_ITEM(desktop->currentLayer())->i2doc_affine().inverse(); item->updateRepr(); -- cgit v1.2.3 From d383c6fe801cf851bffb7927d508b5251e19522c Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Tue, 28 Nov 2017 22:47:59 +0100 Subject: Working on BSPline interpolator --- src/ui/tools/freehand-base.cpp | 87 ++++++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 42 deletions(-) (limited to 'src/ui/tools/freehand-base.cpp') diff --git a/src/ui/tools/freehand-base.cpp b/src/ui/tools/freehand-base.cpp index 15027b6f3..b685e461e 100644 --- a/src/ui/tools/freehand-base.cpp +++ b/src/ui/tools/freehand-base.cpp @@ -85,7 +85,7 @@ FreehandBase::FreehandBase(gchar const *const *cursor_shape) , green_anchor(NULL) , green_closed(false) , white_item(NULL) - , overwrite_curve(NULL) + , sa_overwrited(NULL) , sa(NULL) , ea(NULL) , waiting_LPE_type(Inkscape::LivePathEffect::INVALID_LPE) @@ -144,7 +144,7 @@ void FreehandBase::setup() { this->green_closed = FALSE; // Create start anchor alternative curve - this->overwrite_curve = new SPCurve(); + this->sa_overwrited = new SPCurve(); this->attach = TRUE; spdc_attach_selection(this, this->selection); @@ -254,15 +254,22 @@ static void spdc_apply_powerstroke_shape(std::vector points, Freeha } pt->points.push_back(Geom::Point(0, swidth)); } - Effect::createAndApply(POWERSTROKE, dc->desktop->doc(), item); Effect* lpe = SP_LPE_ITEM(item)->getCurrentLPE(); - lpe->getRepr()->setAttribute("sort_points", "true"); - lpe->getRepr()->setAttribute("interpolator_type", "CentripetalCatmullRom"); - lpe->getRepr()->setAttribute("interpolator_beta", "0.2"); - lpe->getRepr()->setAttribute("miter_limit", "100"); - lpe->getRepr()->setAttribute("linejoin_type", "miter"); - static_cast(lpe)->offset_points.param_set_and_write_new_value(pt->points); - pt->points.clear(); + LPEPowerStroke* ps = static_cast(lpe); + if (!ps) { + Effect::createAndApply(POWERSTROKE, dc->desktop->doc(), item); + lpe = SP_LPE_ITEM(item)->getCurrentLPE(); + ps = static_cast(lpe); + } + if (ps) { + lpe->getRepr()->setAttribute("sort_points", "true"); + lpe->getRepr()->setAttribute("interpolator_type", "CentripetalCatmullRom"); + lpe->getRepr()->setAttribute("interpolator_beta", "0.2"); + lpe->getRepr()->setAttribute("miter_limit", "100"); + lpe->getRepr()->setAttribute("linejoin_type", "miter"); + ps->offset_points.param_set_and_write_new_value(pt->points); + pt->points.clear(); + } return; } } @@ -596,6 +603,9 @@ static void spdc_selection_modified(Inkscape::Selection *sel, guint /*flags*/, F static void spdc_attach_selection(FreehandBase *dc, Inkscape::Selection */*sel*/) { + if (SP_IS_PENCIL_CONTEXT(dc) && dc->sa && dc->input_has_pressure) { + return; + } // We reset white and forget white/start/end anchors spdc_reset_white(dc); dc->sa = NULL; @@ -718,7 +728,6 @@ void spdc_concat_colors_and_flush(FreehandBase *dc, gboolean forceclosed) c->unref(); return; } - // Step A - test, whether we ended on green anchor if ( (forceclosed && (!dc->sa || (dc->sa && dc->sa->curve->is_empty()))) || @@ -732,7 +741,6 @@ void spdc_concat_colors_and_flush(FreehandBase *dc, gboolean forceclosed) c->unref(); return; } - // Step B - both start and end anchored to same curve if ( dc->sa && dc->ea && ( dc->sa->curve == dc->ea->curve ) @@ -741,38 +749,21 @@ void spdc_concat_colors_and_flush(FreehandBase *dc, gboolean forceclosed) { // We hit bot start and end of single curve, closing paths dc->desktop->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Closing path.")); - if (dc->sa->start && !(dc->sa->curve->is_closed()) ) { - c = reverse_then_unref(c); - } - if(prefs->getInt(tool_name(dc) + "/freehand-mode", 0) == 1 || - prefs->getInt(tool_name(dc) + "/freehand-mode", 0) == 2){ - dc->overwrite_curve->append_continuous(c, 0.0625); - c->unref(); - dc->overwrite_curve->closepath_current(); - if(dc->sa){ - dc->white_curves.erase(std::find(dc->white_curves.begin(),dc->white_curves.end(), dc->sa->curve)); - dc->white_curves.push_back(dc->overwrite_curve); - } - }else{ - dc->sa->curve->append_continuous(c, 0.0625); - c->unref(); - dc->sa->curve->closepath_current(); + dc->sa_overwrited->append_continuous(c, 0.0625); + c->unref(); + dc->sa_overwrited->closepath_current(); + if(dc->sa){ + dc->white_curves.erase(std::find(dc->white_curves.begin(),dc->white_curves.end(), dc->sa->curve)); + dc->white_curves.push_back(dc->sa_overwrited); } + spdc_flush_white(dc, NULL); return; } - // Step C - test start if (dc->sa) { - SPCurve *s = dc->sa->curve; - dc->white_curves.erase(std::find(dc->white_curves.begin(),dc->white_curves.end(), s)); - if(prefs->getInt(tool_name(dc) + "/freehand-mode", 0) == 1 || - prefs->getInt(tool_name(dc) + "/freehand-mode", 0) == 2){ - s = dc->overwrite_curve; - } - if (dc->sa->start) { - s = reverse_then_unref(s); - } + dc->white_curves.erase(std::find(dc->white_curves.begin(),dc->white_curves.end(), dc->sa->curve)); + SPCurve *s = dc->sa_overwrited; s->append_continuous(c, 0.0625); c->unref(); c = s; @@ -804,7 +795,6 @@ void spdc_concat_colors_and_flush(FreehandBase *dc, gboolean forceclosed) c->append_continuous(e, 0.0625); e->unref(); } - if (forceclosed) { dc->desktop->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Path is closed.")); @@ -869,7 +859,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(); @@ -879,8 +869,17 @@ static void spdc_flush_white(FreehandBase *dc, SPCurve *gc) if(previous_shape_type == BEND_CLIPBOARD){ repr->parent()->removeChild(repr); } + } else if (SP_IS_PENCIL_CONTEXT(dc)) { + if (dc->input_has_pressure) { + spdc_check_for_and_apply_waiting_LPE(dc, dc->white_item, c, false); +// Inkscape::Preferences *prefs = Inkscape::Preferences::get(); +// shapeType shape = (shapeType)prefs->getInt(tool_name(dc) + "/shape", 0); +// if (shape == NONE) { +// std::vector points; +// spdc_apply_powerstroke_shape(points, dc, dc->white_item); +// } + } } - DocumentUndo::done(doc, SP_IS_PEN_CONTEXT(dc)? SP_VERB_CONTEXT_PEN : SP_VERB_CONTEXT_PENCIL, _("Draw path")); @@ -949,7 +948,11 @@ static void spdc_free_colors(FreehandBase *dc) if (dc->blue_curve) { dc->blue_curve = dc->blue_curve->unref(); } - + + // Overwrite start anchor curve + if (dc->sa_overwrited) { + dc->sa_overwrited = dc->sa_overwrited->unref(); + } // Green for (auto i : dc->green_bpaths) sp_canvas_item_destroy(i); -- cgit v1.2.3 From c1bf7779c6a607c29fb6cca06e39d183e4de31c7 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Fri, 1 Dec 2017 22:31:36 +0100 Subject: Cleaninng --- src/ui/tools/freehand-base.cpp | 87 ++++++++++++++++++++---------------------- 1 file changed, 42 insertions(+), 45 deletions(-) (limited to 'src/ui/tools/freehand-base.cpp') diff --git a/src/ui/tools/freehand-base.cpp b/src/ui/tools/freehand-base.cpp index b685e461e..15027b6f3 100644 --- a/src/ui/tools/freehand-base.cpp +++ b/src/ui/tools/freehand-base.cpp @@ -85,7 +85,7 @@ FreehandBase::FreehandBase(gchar const *const *cursor_shape) , green_anchor(NULL) , green_closed(false) , white_item(NULL) - , sa_overwrited(NULL) + , overwrite_curve(NULL) , sa(NULL) , ea(NULL) , waiting_LPE_type(Inkscape::LivePathEffect::INVALID_LPE) @@ -144,7 +144,7 @@ void FreehandBase::setup() { this->green_closed = FALSE; // Create start anchor alternative curve - this->sa_overwrited = new SPCurve(); + this->overwrite_curve = new SPCurve(); this->attach = TRUE; spdc_attach_selection(this, this->selection); @@ -254,22 +254,15 @@ static void spdc_apply_powerstroke_shape(std::vector points, Freeha } pt->points.push_back(Geom::Point(0, swidth)); } + Effect::createAndApply(POWERSTROKE, dc->desktop->doc(), item); Effect* lpe = SP_LPE_ITEM(item)->getCurrentLPE(); - LPEPowerStroke* ps = static_cast(lpe); - if (!ps) { - Effect::createAndApply(POWERSTROKE, dc->desktop->doc(), item); - lpe = SP_LPE_ITEM(item)->getCurrentLPE(); - ps = static_cast(lpe); - } - if (ps) { - lpe->getRepr()->setAttribute("sort_points", "true"); - lpe->getRepr()->setAttribute("interpolator_type", "CentripetalCatmullRom"); - lpe->getRepr()->setAttribute("interpolator_beta", "0.2"); - lpe->getRepr()->setAttribute("miter_limit", "100"); - lpe->getRepr()->setAttribute("linejoin_type", "miter"); - ps->offset_points.param_set_and_write_new_value(pt->points); - pt->points.clear(); - } + lpe->getRepr()->setAttribute("sort_points", "true"); + lpe->getRepr()->setAttribute("interpolator_type", "CentripetalCatmullRom"); + lpe->getRepr()->setAttribute("interpolator_beta", "0.2"); + lpe->getRepr()->setAttribute("miter_limit", "100"); + lpe->getRepr()->setAttribute("linejoin_type", "miter"); + static_cast(lpe)->offset_points.param_set_and_write_new_value(pt->points); + pt->points.clear(); return; } } @@ -603,9 +596,6 @@ static void spdc_selection_modified(Inkscape::Selection *sel, guint /*flags*/, F static void spdc_attach_selection(FreehandBase *dc, Inkscape::Selection */*sel*/) { - if (SP_IS_PENCIL_CONTEXT(dc) && dc->sa && dc->input_has_pressure) { - return; - } // We reset white and forget white/start/end anchors spdc_reset_white(dc); dc->sa = NULL; @@ -728,6 +718,7 @@ void spdc_concat_colors_and_flush(FreehandBase *dc, gboolean forceclosed) c->unref(); return; } + // Step A - test, whether we ended on green anchor if ( (forceclosed && (!dc->sa || (dc->sa && dc->sa->curve->is_empty()))) || @@ -741,6 +732,7 @@ void spdc_concat_colors_and_flush(FreehandBase *dc, gboolean forceclosed) c->unref(); return; } + // Step B - both start and end anchored to same curve if ( dc->sa && dc->ea && ( dc->sa->curve == dc->ea->curve ) @@ -749,21 +741,38 @@ void spdc_concat_colors_and_flush(FreehandBase *dc, gboolean forceclosed) { // We hit bot start and end of single curve, closing paths dc->desktop->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Closing path.")); - dc->sa_overwrited->append_continuous(c, 0.0625); - c->unref(); - dc->sa_overwrited->closepath_current(); - if(dc->sa){ - dc->white_curves.erase(std::find(dc->white_curves.begin(),dc->white_curves.end(), dc->sa->curve)); - dc->white_curves.push_back(dc->sa_overwrited); + if (dc->sa->start && !(dc->sa->curve->is_closed()) ) { + c = reverse_then_unref(c); + } + if(prefs->getInt(tool_name(dc) + "/freehand-mode", 0) == 1 || + prefs->getInt(tool_name(dc) + "/freehand-mode", 0) == 2){ + dc->overwrite_curve->append_continuous(c, 0.0625); + c->unref(); + dc->overwrite_curve->closepath_current(); + if(dc->sa){ + dc->white_curves.erase(std::find(dc->white_curves.begin(),dc->white_curves.end(), dc->sa->curve)); + dc->white_curves.push_back(dc->overwrite_curve); + } + }else{ + dc->sa->curve->append_continuous(c, 0.0625); + c->unref(); + dc->sa->curve->closepath_current(); } - spdc_flush_white(dc, NULL); return; } + // Step C - test start if (dc->sa) { - dc->white_curves.erase(std::find(dc->white_curves.begin(),dc->white_curves.end(), dc->sa->curve)); - SPCurve *s = dc->sa_overwrited; + SPCurve *s = dc->sa->curve; + dc->white_curves.erase(std::find(dc->white_curves.begin(),dc->white_curves.end(), s)); + if(prefs->getInt(tool_name(dc) + "/freehand-mode", 0) == 1 || + prefs->getInt(tool_name(dc) + "/freehand-mode", 0) == 2){ + s = dc->overwrite_curve; + } + if (dc->sa->start) { + s = reverse_then_unref(s); + } s->append_continuous(c, 0.0625); c->unref(); c = s; @@ -795,6 +804,7 @@ void spdc_concat_colors_and_flush(FreehandBase *dc, gboolean forceclosed) c->append_continuous(e, 0.0625); e->unref(); } + if (forceclosed) { dc->desktop->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Path is closed.")); @@ -859,7 +869,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 - spdc_check_for_and_apply_waiting_LPE(dc, item, c, true); + (dc, item, c, true); Inkscape::GC::release(repr); item->transform = SP_ITEM(desktop->currentLayer())->i2doc_affine().inverse(); item->updateRepr(); @@ -869,17 +879,8 @@ static void spdc_flush_white(FreehandBase *dc, SPCurve *gc) if(previous_shape_type == BEND_CLIPBOARD){ repr->parent()->removeChild(repr); } - } else if (SP_IS_PENCIL_CONTEXT(dc)) { - if (dc->input_has_pressure) { - spdc_check_for_and_apply_waiting_LPE(dc, dc->white_item, c, false); -// Inkscape::Preferences *prefs = Inkscape::Preferences::get(); -// shapeType shape = (shapeType)prefs->getInt(tool_name(dc) + "/shape", 0); -// if (shape == NONE) { -// std::vector points; -// spdc_apply_powerstroke_shape(points, dc, dc->white_item); -// } - } } + DocumentUndo::done(doc, SP_IS_PEN_CONTEXT(dc)? SP_VERB_CONTEXT_PEN : SP_VERB_CONTEXT_PENCIL, _("Draw path")); @@ -948,11 +949,7 @@ static void spdc_free_colors(FreehandBase *dc) if (dc->blue_curve) { dc->blue_curve = dc->blue_curve->unref(); } - - // Overwrite start anchor curve - if (dc->sa_overwrited) { - dc->sa_overwrited = dc->sa_overwrited->unref(); - } + // Green for (auto i : dc->green_bpaths) sp_canvas_item_destroy(i); -- cgit v1.2.3 From b95f5438b75deffac0e8780857733257e21b1f68 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Sat, 2 Dec 2017 11:51:39 +0100 Subject: Remobing bspline interpolator --- src/ui/tools/freehand-base.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/ui/tools/freehand-base.cpp') diff --git a/src/ui/tools/freehand-base.cpp b/src/ui/tools/freehand-base.cpp index 15027b6f3..89d9074ba 100644 --- a/src/ui/tools/freehand-base.cpp +++ b/src/ui/tools/freehand-base.cpp @@ -258,6 +258,7 @@ static void spdc_apply_powerstroke_shape(std::vector points, Freeha Effect* lpe = SP_LPE_ITEM(item)->getCurrentLPE(); lpe->getRepr()->setAttribute("sort_points", "true"); lpe->getRepr()->setAttribute("interpolator_type", "CentripetalCatmullRom"); + lpe->getRepr()->setAttribute("interpolate_original", "true"); lpe->getRepr()->setAttribute("interpolator_beta", "0.2"); lpe->getRepr()->setAttribute("miter_limit", "100"); lpe->getRepr()->setAttribute("linejoin_type", "miter"); -- cgit v1.2.3 From 3d059a10fd17411f73e88ccde2cd853642ee7dc3 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Mon, 18 Dec 2017 01:11:36 +0100 Subject: Working on powerstroke fixes to pentool --- src/ui/tools/freehand-base.cpp | 4 ---- 1 file changed, 4 deletions(-) (limited to 'src/ui/tools/freehand-base.cpp') diff --git a/src/ui/tools/freehand-base.cpp b/src/ui/tools/freehand-base.cpp index b72eb84db..e294c37a2 100644 --- a/src/ui/tools/freehand-base.cpp +++ b/src/ui/tools/freehand-base.cpp @@ -259,10 +259,6 @@ static void spdc_apply_powerstroke_shape(std::vector points, Freeha Effect* lpe = SP_LPE_ITEM(item)->getCurrentLPE(); lpe->getRepr()->setAttribute("sort_points", "true"); lpe->getRepr()->setAttribute("interpolator_type", "CentripetalCatmullRom"); - lpe->getRepr()->setAttribute("interpolate_original", "true"); - lpe->getRepr()->setAttribute("interpolator_beta", "0.2"); - lpe->getRepr()->setAttribute("miter_limit", "100"); - lpe->getRepr()->setAttribute("linejoin_type", "miter"); static_cast(lpe)->offset_points.param_set_and_write_new_value(pt->points); pt->points.clear(); return; -- cgit v1.2.3 From daae1f8c25dcd6e35a469f488c24c751132dbffc Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Mon, 18 Dec 2017 01:20:41 +0100 Subject: Tiny fix to improbe release pentool --- src/ui/tools/freehand-base.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/ui/tools/freehand-base.cpp') diff --git a/src/ui/tools/freehand-base.cpp b/src/ui/tools/freehand-base.cpp index e294c37a2..8d701d057 100644 --- a/src/ui/tools/freehand-base.cpp +++ b/src/ui/tools/freehand-base.cpp @@ -242,6 +242,7 @@ static void spdc_apply_powerstroke_shape(std::vector points, Freeha return; } pt->addPowerStrokePencil(c); + sp_shape->setCurve(c, true); } if(pt->points.empty()){ Inkscape::Preferences *prefs = Inkscape::Preferences::get(); -- cgit v1.2.3 From e94c84e82f183e118b3f65c52d814c0155276c3f Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Thu, 21 Dec 2017 01:25:47 +0100 Subject: Refactoring pencil powerstroke --- src/ui/tools/freehand-base.cpp | 49 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 46 insertions(+), 3 deletions(-) (limited to 'src/ui/tools/freehand-base.cpp') 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 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(lpe); + std::vector 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(); -- cgit v1.2.3 From d9211f4fcd295d5a63bb713463487049311a24a2 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Tue, 26 Dec 2017 00:45:37 +0100 Subject: Fix start anchors --- src/ui/tools/freehand-base.cpp | 158 +++++++++++++++++------------------------ 1 file changed, 65 insertions(+), 93 deletions(-) (limited to 'src/ui/tools/freehand-base.cpp') diff --git a/src/ui/tools/freehand-base.cpp b/src/ui/tools/freehand-base.cpp index e09219a23..d2ef1e00d 100644 --- a/src/ui/tools/freehand-base.cpp +++ b/src/ui/tools/freehand-base.cpp @@ -23,6 +23,7 @@ #include "live_effects/lpe-bendpath.h" #include "live_effects/lpe-patternalongpath.h" #include "live_effects/lpe-simplify.h" +#include "live_effects/lpe-powerstroke.h" #include "display/canvas-bpath.h" #include "svg/svg.h" #include "display/curve.h" @@ -37,7 +38,6 @@ #include "selection-chemistry.h" #include "sp-item-group.h" #include "sp-rect.h" -#include "live_effects/lpe-powerstroke.h" #include "style.h" #include "ui/control-manager.h" // clipboard support @@ -92,7 +92,8 @@ FreehandBase::FreehandBase(gchar const *const *cursor_shape) , waiting_LPE_type(Inkscape::LivePathEffect::INVALID_LPE) , red_curve_is_valid(false) , anchor_statusbar(false) - , input_has_pressure(false) + , tablet_enabled(false) + , is_tablet(false) , pressure(DEFAULT_PRESSURE) { } @@ -234,78 +235,52 @@ static void spdc_apply_powerstroke_shape(std::vector points, Freeha if (SP_IS_PENCIL_CONTEXT(dc)) { PencilTool *pt = SP_PENCIL_CONTEXT(dc); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - if (dc->input_has_pressure) { + if (dc->tablet_enabled) { SPShape *sp_shape = dynamic_cast(item); if (sp_shape) { SPCurve * c = sp_shape->getCurve(); if (!c) { return; } - if(dc->sa) { - c = dc->sa_overwrited->copy(); - Effect* lpe = SP_LPE_ITEM(dc->white_item)->getCurrentLPE(); - LPEPowerStroke* ps = static_cast(lpe); - std::vector 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; - } + Effect* lpe = SP_LPE_ITEM(item)->getCurrentLPE(); + LPEPowerStroke* ps = NULL; + pt->addPowerStrokePencil(c); + if (lpe) { + ps = static_cast(lpe); + gchar * pvector_str = sp_svg_write_path(c->get_pathvector()); + item->setAttribute("inkscape:original-d" , pvector_str); + g_free(pvector_str); } 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); + gchar * pvector_str = sp_svg_write_path(c->get_pathvector()); + item->setAttribute("d" , pvector_str); + g_free(pvector_str); + } + if (ps && dc->sa) { + ps->offset_points.param_set_and_write_new_value(pt->points); + return; + } + if(pt->points.empty()){ + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + SPCSSAttr *css_item = sp_css_attr_from_object(item, SP_STYLE_FLAG_ALWAYS); + const char *stroke_width = sp_repr_css_property(css_item, "stroke-width", "0"); + double swidth; + sp_svg_number_read_d(stroke_width, &swidth); + swidth = prefs->getDouble("/live_effect/power_stroke/width", swidth/2); + if (!swidth) { + swidth = swidth/2; } + points.push_back(Geom::Point(0, swidth)); } - } - if(pt->points.empty()){ - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - SPCSSAttr *css_item = sp_css_attr_from_object(item, SP_STYLE_FLAG_ALWAYS); - const char *stroke_width = sp_repr_css_property(css_item, "stroke-width", "0"); - double swidth; - sp_svg_number_read_d(stroke_width, &swidth); - swidth = prefs->getDouble("/live_effect/power_stroke/width", swidth/2); - if (!swidth) { - swidth = swidth/2; + Effect::createAndApply(POWERSTROKE, dc->desktop->doc(), item); + lpe = SP_LPE_ITEM(item)->getCurrentLPE(); + ps = static_cast(lpe); + if (ps) { + ps->getRepr()->setAttribute("sort_points", "true"); + ps->getRepr()->setAttribute("interpolator_type", "CentripetalCatmullRom"); + ps->offset_points.param_set_and_write_new_value(pt->points); } - pt->points.push_back(Geom::Point(0, swidth)); + return; } - Effect::createAndApply(POWERSTROKE, dc->desktop->doc(), item); - Effect* lpe = SP_LPE_ITEM(item)->getCurrentLPE(); - lpe->getRepr()->setAttribute("sort_points", "true"); - lpe->getRepr()->setAttribute("interpolator_type", "CentripetalCatmullRom"); - static_cast(lpe)->offset_points.param_set_and_write_new_value(pt->points); - pt->points.clear(); - return; } } @@ -437,17 +412,12 @@ static void spdc_check_for_and_apply_waiting_LPE(FreehandBase *dc, SPItem *item, swidth = swidth/2; } if (SP_IS_PENCIL_CONTEXT(dc)) { - if (dc->input_has_pressure) { - if (shape == NONE) { - std::vector points; - spdc_apply_powerstroke_shape(points, dc, item); - //To allow retain color - shape_applied = true; - } else { - PencilTool *pt = SP_PENCIL_CONTEXT(dc); - pt->removePowerStrokePreview(); - shape == NONE; - } + if (dc->tablet_enabled) { + std::vector points; + spdc_apply_powerstroke_shape(points, dc, item); + shape_applied = true; + shape = NONE; + previous_shape_type = NONE; } } #define SHAPE_LENGTH 10 @@ -653,7 +623,7 @@ static void spdc_selection_modified(Inkscape::Selection *sel, guint /*flags*/, F static void spdc_attach_selection(FreehandBase *dc, Inkscape::Selection */*sel*/) { - if (SP_IS_PENCIL_CONTEXT(dc) && dc->sa && dc->input_has_pressure) { + if (SP_IS_PENCIL_CONTEXT(dc) && dc->sa) { return; } // We reset white and forget white/start/end anchors @@ -804,24 +774,27 @@ void spdc_concat_colors_and_flush(FreehandBase *dc, gboolean forceclosed) dc->sa_overwrited->append_continuous(c, 0.0625); c->unref(); dc->sa_overwrited->closepath_current(); - if(dc->sa){ + if (!dc->white_curves.empty()) { dc->white_curves.erase(std::find(dc->white_curves.begin(),dc->white_curves.end(), dc->sa->curve)); - dc->white_curves.push_back(dc->sa_overwrited); } - + dc->white_curves.push_back(dc->sa_overwrited); spdc_flush_white(dc, NULL); return; } // Step C - test start if (dc->sa) { - dc->white_curves.erase(std::find(dc->white_curves.begin(),dc->white_curves.end(), dc->sa->curve)); + if (!dc->white_curves.empty()) { + dc->white_curves.erase(std::find(dc->white_curves.begin(),dc->white_curves.end(), dc->sa->curve)); + } SPCurve *s = dc->sa_overwrited; s->append_continuous(c, 0.0625); c->unref(); c = s; } else /* Step D - test end */ if (dc->ea) { SPCurve *e = dc->ea->curve; - dc->white_curves.erase(std::find(dc->white_curves.begin(),dc->white_curves.end(), e)); + if (!dc->white_curves.empty()) { + dc->white_curves.erase(std::find(dc->white_curves.begin(),dc->white_curves.end(), e)); + } if (!dc->ea->start) { e = reverse_then_unref(e); } @@ -876,8 +849,8 @@ static void spdc_flush_white(FreehandBase *dc, SPCurve *gc) // Now we have to go back to item coordinates at last c->transform( dc->white_item - ? (dc->white_item)->dt2i_affine() - : dc->desktop->dt2doc() ); + ? (dc->white_item)->dt2i_affine() + : dc->desktop->dt2doc() ); SPDesktop *desktop = dc->desktop; SPDocument *doc = desktop->getDocument(); @@ -906,9 +879,18 @@ static void spdc_flush_white(FreehandBase *dc, SPCurve *gc) repr->setAttribute("d", str); g_free(str); + if (SP_IS_PENCIL_CONTEXT(dc)) { + if (dc->tablet_enabled) { + if (!dc->white_item) { + dc->white_item = SP_ITEM(desktop->currentLayer()->appendChildRepr(repr)); + } + std::cout << "lololololo----------------------lololo" << std::endl; + spdc_check_for_and_apply_waiting_LPE(dc, dc->white_item, c, false); + dc->selection->set(dc->white_item); + } + } if (!dc->white_item) { // Attach repr - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); SPItem *item = SP_ITEM(desktop->currentLayer()->appendChildRepr(repr)); //Bend needs the transforms applied after, Other effects best before spdc_check_for_and_apply_waiting_LPE(dc, item, c, true); @@ -921,16 +903,6 @@ static void spdc_flush_white(FreehandBase *dc, SPCurve *gc) if(previous_shape_type == BEND_CLIPBOARD){ repr->parent()->removeChild(repr); } - } else if (SP_IS_PENCIL_CONTEXT(dc)) { - if (dc->input_has_pressure) { - spdc_check_for_and_apply_waiting_LPE(dc, dc->white_item, c, false); -// Inkscape::Preferences *prefs = Inkscape::Preferences::get(); -// shapeType shape = (shapeType)prefs->getInt(tool_name(dc) + "/shape", 0); -// if (shape == NONE) { -// std::vector points; -// spdc_apply_powerstroke_shape(points, dc, dc->white_item); -// } - } } DocumentUndo::done(doc, SP_IS_PEN_CONTEXT(dc)? SP_VERB_CONTEXT_PEN : SP_VERB_CONTEXT_PENCIL, _("Draw path")); -- cgit v1.2.3 From d25de3679d94cc03fdba8aba4de20fab723b4b27 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Tue, 26 Dec 2017 17:14:27 +0100 Subject: Fix power stroke closed path and minor tweacks for pencil powerstroke --- src/ui/tools/freehand-base.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'src/ui/tools/freehand-base.cpp') diff --git a/src/ui/tools/freehand-base.cpp b/src/ui/tools/freehand-base.cpp index d2ef1e00d..8a078d510 100644 --- a/src/ui/tools/freehand-base.cpp +++ b/src/ui/tools/freehand-base.cpp @@ -884,7 +884,6 @@ static void spdc_flush_white(FreehandBase *dc, SPCurve *gc) if (!dc->white_item) { dc->white_item = SP_ITEM(desktop->currentLayer()->appendChildRepr(repr)); } - std::cout << "lololololo----------------------lololo" << std::endl; spdc_check_for_and_apply_waiting_LPE(dc, dc->white_item, c, false); dc->selection->set(dc->white_item); } -- cgit v1.2.3