summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMaximilian Albert <maximilian.albert@gmail.com>2008-07-31 12:43:10 +0000
committercilix42 <cilix42@users.sourceforge.net>2008-07-31 12:43:10 +0000
commit26288df8eb283c526aa8459e6779d780d8813a2e (patch)
tree84cdbbd51732f88f506cf7492450cb0e63b1ae1a /src
parentFix wrong toggle activation in pen/pencil toolbar after startup (diff)
downloadinkscape-26288df8eb283c526aa8459e6779d780d8813a2e.tar.gz
inkscape-26288df8eb283c526aa8459e6779d780d8813a2e.zip
New 'zigzag' (polylines) mode in pen tool
(bzr r6485)
Diffstat (limited to 'src')
-rw-r--r--src/draw-context.cpp4
-rw-r--r--src/pen-context.cpp8
-rw-r--r--src/widgets/toolbox.cpp21
3 files changed, 24 insertions, 9 deletions
diff --git a/src/draw-context.cpp b/src/draw-context.cpp
index e067e4545..c7676be9e 100644
--- a/src/draw-context.cpp
+++ b/src/draw-context.cpp
@@ -278,7 +278,7 @@ spdc_check_for_and_apply_waiting_LPE(SPDrawContext *dc, SPItem *item)
using namespace Inkscape::LivePathEffect;
if (item && SP_IS_LPE_ITEM(item)) {
- if (prefs_get_int_attribute(tool_name(dc), "freehand-mode", 0)) {
+ if (prefs_get_int_attribute(tool_name(dc), "freehand-mode", 0) == 1) {
Effect::createAndApply(SPIRO, dc->desktop->doc(), item);
}
@@ -368,7 +368,7 @@ spdc_check_for_and_apply_waiting_LPE(SPDrawContext *dc, SPItem *item)
dc->waiting_LPE_type = INVALID_LPE;
}
if (SP_IS_PEN_CONTEXT(dc)) {
- SP_PEN_CONTEXT(dc)->polylines_only = false;
+ SP_PEN_CONTEXT(dc)->polylines_only = (prefs_get_int_attribute("tools.freehand.pen", "freehand-mode", 0) == 2);
}
}
}
diff --git a/src/pen-context.cpp b/src/pen-context.cpp
index 46ae695fb..58dbc3cc3 100644
--- a/src/pen-context.cpp
+++ b/src/pen-context.cpp
@@ -145,7 +145,7 @@ sp_pen_context_init(SPPenContext *pc)
pc->events_disabled = 0;
- pc->polylines_only = false;
+ pc->polylines_only = prefs_get_int_attribute("tools.freehand.pen", "freehand-mode", 0);
pc->waiting_LPE = NULL;
}
@@ -178,8 +178,6 @@ sp_pen_context_dispose(GObject *object)
G_OBJECT_CLASS(pen_parent_class)->dispose(object);
- pc->polylines_only = false;
- pc->waiting_LPE = NULL;
if (pc->expecting_clicks_for_LPE > 0) {
// we received too few clicks to sanely set the parameter path so we remove the LPE from the item
sp_lpe_item_remove_current_path_effect(pc->waiting_item, false);
@@ -783,7 +781,7 @@ pen_handle_button_release(SPPenContext *const pc, GdkEventButton const &revent)
// TODO: can we be sure that the path was created correctly?
// TODO: should we offer an option to collect the clicks in a list?
if (pc->expecting_clicks_for_LPE == 0 && sp_pen_context_has_waiting_LPE(pc)) {
- pc->polylines_only = false;
+ pc->polylines_only = prefs_get_int_attribute("tools.freehand.pen", "freehand-mode", 0);
SPEventContext *ec = SP_EVENT_CONTEXT(pc);
Inkscape::Selection *selection = sp_desktop_selection (ec->desktop);
@@ -793,7 +791,7 @@ pen_handle_button_release(SPPenContext *const pc, GdkEventButton const &revent)
pc->waiting_LPE->acceptParamPath(SP_PATH(selection->singleItem()));
selection->add(SP_OBJECT(pc->waiting_item));
pc->waiting_LPE = NULL;
- pc->polylines_only = false;
+ pc->polylines_only = prefs_get_int_attribute("tools.freehand.pen", "freehand-mode", 0);
} 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/widgets/toolbox.cpp b/src/widgets/toolbox.cpp
index b62ecb0b2..9dfb0c249 100644
--- a/src/widgets/toolbox.cpp
+++ b/src/widgets/toolbox.cpp
@@ -66,7 +66,7 @@
#include "connector-context.h"
#include "node-context.h"
-#include "draw-context.h"
+#include "pen-context.h"
#include "shape-editor.h"
#include "tweak-context.h"
#include "sp-rect.h"
@@ -3279,7 +3279,15 @@ freehand_tool_name(GObject *dataKludge)
static void sp_pc_freehand_mode_changed(EgeSelectOneAction* act, GObject* tbl)
{
- prefs_set_int_attribute(freehand_tool_name(tbl), "freehand-mode", ege_select_one_action_get_active(act));
+ gint mode = ege_select_one_action_get_active(act);
+
+ prefs_set_int_attribute(freehand_tool_name(tbl), "freehand-mode", mode);
+
+ SPDesktop *desktop = (SPDesktop *) g_object_get_data(tbl, "desktop");
+ if (SP_IS_PEN_CONTEXT(desktop->event_context)) {
+ SPPenContext *pc = SP_PEN_CONTEXT(desktop->event_context);
+ pc->polylines_only = (mode == 2);
+ }
}
static void sp_add_freehand_mode_toggle(GtkActionGroup* mainActions, GObject* holder, bool tool_is_pencil)
@@ -3307,6 +3315,15 @@ static void sp_add_freehand_mode_toggle(GtkActionGroup* mainActions, GObject* ho
2, "spiro_splines_mode",
-1 );
+ if (!tool_is_pencil) {
+ gtk_list_store_append( model, &iter );
+ gtk_list_store_set( model, &iter,
+ 0, _("Zigzag"),
+ 1, _("Create a sequence of straight line segments"),
+ 2, "polylines_mode",
+ -1 );
+ }
+
EgeSelectOneAction* act = ege_select_one_action_new(tool_is_pencil ?
"FreehandModeActionPencil" :
"FreehandModeActionPen",