From: cilix42 Date: Thu, 12 Jun 2008 13:23:30 +0000 (+0000) Subject: More infrastructure to have waiting LPEs that are freshly created and applied to... X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=8c7926cace1db665327e0354bc760b8dcad0ebe6;p=inkscape.git More infrastructure to have waiting LPEs that are freshly created and applied to yet-to-be-drawn paths --- diff --git a/src/draw-context.cpp b/src/draw-context.cpp index 4d60cda05..de030c7d5 100644 --- a/src/draw-context.cpp +++ b/src/draw-context.cpp @@ -115,7 +115,7 @@ sp_draw_context_init(SPDrawContext *dc) dc->green_color = 0x00ff007f; dc->red_curve_is_valid = false; - dc->waiting_LPE = Inkscape::LivePathEffect::INVALID_LPE; + dc->waiting_LPE_type = Inkscape::LivePathEffect::INVALID_LPE; new (&dc->sel_changed_connection) sigc::connection(); new (&dc->sel_modified_connection) sigc::connection(); @@ -245,20 +245,20 @@ sp_draw_context_root_handler(SPEventContext *ec, GdkEvent *event) /* * If we have an item and a waiting LPE, apply the effect to the item + * (spiro spline mode is treated separately) */ void spdc_check_for_and_apply_waiting_LPE(SPDrawContext *dc, SPItem *item) { using namespace Inkscape::LivePathEffect; - // TODO: sort this out as soon as we use automatic LPE application for other things than spiro mode, too if (item) { if (prefs_get_int_attribute("tools.freehand", "spiro-spline-mode", 0)) { Effect::createAndApply(SPIRO, dc->desktop->doc(), item); return; } - if (dc->waiting_LPE != INVALID_LPE) { - Effect::createAndApply(dc->waiting_LPE, dc->desktop->doc(), item); + if (dc->waiting_LPE_type != INVALID_LPE) { + Effect::createAndApply(dc->waiting_LPE_type, dc->desktop->doc(), item); } } } @@ -270,6 +270,8 @@ spdc_check_for_and_apply_waiting_LPE(SPDrawContext *dc, SPItem *item) static void spdc_selection_changed(Inkscape::Selection *sel, SPDrawContext *dc) { + // note: in draw context, selection_changed() is only called when a new item was created; + // otherwise the following function call would yield wrong results spdc_check_for_and_apply_waiting_LPE(dc, sel->singleItem()); if (dc->attach) { diff --git a/src/draw-context.h b/src/draw-context.h index c1166dcbd..afdec1981 100644 --- a/src/draw-context.h +++ b/src/draw-context.h @@ -70,7 +70,7 @@ struct SPDrawContext : public SPEventContext{ SPDrawAnchor *ea; /* type of the LPE that is to be applied automatically to a finished path (if any) */ - Inkscape::LivePathEffect::EffectType waiting_LPE; + Inkscape::LivePathEffect::EffectType waiting_LPE_type; sigc::connection sel_changed_connection; sigc::connection sel_modified_connection; diff --git a/src/pen-context.cpp b/src/pen-context.cpp index 4616c04ae..1091408b3 100644 --- a/src/pen-context.cpp +++ b/src/pen-context.cpp @@ -785,8 +785,14 @@ pen_handle_button_release(SPPenContext *const pc, GdkEventButton const &revent) SPEventContext *ec = SP_EVENT_CONTEXT(pc); Inkscape::Selection *selection = sp_desktop_selection (ec->desktop); - pc->waiting_LPE->acceptParamPath(SP_PATH(selection->singleItem())); - selection->add(SP_OBJECT(pc->waiting_item)); + if (pc->waiting_LPE) { + // we have an already created LPE waiting for a path + pc->waiting_LPE->acceptParamPath(SP_PATH(selection->singleItem())); + selection->add(SP_OBJECT(pc->waiting_item)); + } else { + // the case that we need to create a new LPE and apply it to the just-drawn path is + // handled in spdc_check_for_and_apply_waiting_LPE() in draw-context.cpp + } } } diff --git a/src/pen-context.h b/src/pen-context.h index 3e4e90924..fb5c22371 100644 --- a/src/pen-context.h +++ b/src/pen-context.h @@ -46,7 +46,7 @@ struct SPPenContext : public SPDrawContext { bool polylines_only; unsigned int expecting_clicks_for_LPE; // if positive, finish the path after this many clicks - Inkscape::LivePathEffect::Effect *waiting_LPE; + Inkscape::LivePathEffect::Effect *waiting_LPE; // if NULL, waiting_LPE_type in SPDrawContext is taken into account SPLPEItem *waiting_item; SPCanvasItem *c0, *c1, *cl0, *cl1;