Index: src/file.cpp =================================================================== --- src/file.cpp (revisjon 17885) +++ src/file.cpp (arbeidskopi) @@ -690,6 +690,12 @@ if (attr) default_extension = attr; //g_message("%s: extension name: '%s'", __FUNCTION__, default_extension); + Glib::ustring filename_extension = ".svg"; + extension = dynamic_cast + (Inkscape::Extension::db.get(default_extension.c_str())); + g_warning("%s: extension ptr: 0x%x", __FUNCTION__, (unsigned int)extension); + if (extension) + filename_extension = extension->get_extension(); Glib::ustring save_path; Glib::ustring save_loc; @@ -698,13 +704,6 @@ char formatBuf[256]; int i = 1; - Glib::ustring filename_extension = ".svg"; - extension = dynamic_cast - (Inkscape::Extension::db.get(default_extension.c_str())); - //g_warning("%s: extension ptr: 0x%x", __FUNCTION__, (unsigned int)extension); - if (extension) - filename_extension = extension->get_extension(); - attr = (char *)prefs_get_string_attribute("dialogs.save_as", "path"); if (attr) save_path = attr; Index: src/pencil-context.cpp =================================================================== --- src/pencil-context.cpp (revisjon 17885) +++ src/pencil-context.cpp (arbeidskopi) @@ -222,6 +222,7 @@ /* Test whether we hit any anchor. */ SPDrawAnchor *anchor = spdc_test_inside(pc, button_w); + pc->fhpt=p; switch (pc->state) { case SP_PENCIL_CONTEXT_ADDLINE: /* Current segment will be finished with release */ @@ -263,6 +264,9 @@ return ret; } +static gfloat pencil_radius(NR::Point p1,NR::Point p2 ){ + return sqrt(pow(p1[NR::X]-p2[NR::X],2)+pow(p1[NR::Y]-p2[NR::Y],2)); +} static gint pencil_handle_motion_notify(SPPencilContext *const pc, GdkEventMotion const &mevent) { @@ -298,6 +302,9 @@ /* Test whether we hit any anchor. */ SPDrawAnchor *anchor = spdc_test_inside(pc, NR::Point(mevent.x, mevent.y)); + if(pc->state!=SP_PENCIL_CONTEXT_FREEHAND&&pencil_radius(pc->desktop->d2w(pc->fhpt),pc->desktop->d2w(p))state) { case SP_PENCIL_CONTEXT_ADDLINE: /* Set red endpoint */ @@ -377,7 +384,6 @@ /* Test whether we hit any anchor. */ SPDrawAnchor *anchor = spdc_test_inside(pc, NR::Point(revent.x, revent.y)); - switch (pc->state) { case SP_PENCIL_CONTEXT_IDLE: /* Releasing button in idle mode means single click */ Index: src/pencil-context.h =================================================================== --- src/pencil-context.h (revisjon 17885) +++ src/pencil-context.h (arbeidskopi) @@ -13,6 +13,7 @@ #define SP_PENCIL_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_PENCIL_CONTEXT, SPPencilContextClass)) #define SP_IS_PENCIL_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_PENCIL_CONTEXT)) #define SP_IS_PENCIL_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_PENCIL_CONTEXT)) +#define SP_PENCIL_STATE_DIAMETER 5 enum PencilState { SP_PENCIL_CONTEXT_IDLE, @@ -28,6 +29,7 @@ gint npoints; PencilState state; NR::Point req_tangent; + NR::Point fhpt; bool is_drawing; };