summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMaximilian Albert <maximilian.albert@gmail.com>2008-06-12 13:23:30 +0000
committercilix42 <cilix42@users.sourceforge.net>2008-06-12 13:23:30 +0000
commit30dd228b3490bc81b04c6fa3fb36f8c91ceec4e6 (patch)
treecbf33c264f6e4a6e048508046ae011a7dd237d7f /src
parentInfrastructure in class LivePathEffect::Effect to put Inkscape into 'wait for... (diff)
downloadinkscape-30dd228b3490bc81b04c6fa3fb36f8c91ceec4e6.tar.gz
inkscape-30dd228b3490bc81b04c6fa3fb36f8c91ceec4e6.zip
More infrastructure to have waiting LPEs that are freshly created and applied to yet-to-be-drawn paths
(bzr r5903)
Diffstat (limited to 'src')
-rw-r--r--src/draw-context.cpp10
-rw-r--r--src/draw-context.h2
-rw-r--r--src/pen-context.cpp10
-rw-r--r--src/pen-context.h2
4 files changed, 16 insertions, 8 deletions
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;