summaryrefslogtreecommitdiffstats
path: root/src/measure-context.cpp
diff options
context:
space:
mode:
authorFelipe Corr??a da Silva Sanches <juca@members.fsf.org>2011-06-19 21:43:29 +0000
committerFelipe C. da S. Sanches <juca@members.fsf.org>2011-06-19 21:43:29 +0000
commit5448c32dfe8264c42d0a627e3a32750e276cd394 (patch)
tree5786ddc871f22514a7f3433060eb145960835cae /src/measure-context.cpp
parenti18n. inkscape.pot update. (diff)
downloadinkscape-5448c32dfe8264c42d0a627e3a32750e276cd394.tar.gz
inkscape-5448c32dfe8264c42d0a627e3a32750e276cd394.zip
fix bug 796598: Measure tool draws path in wrong window
https://bugs.launchpad.net/inkscape/+bug/796598 (bzr r10322)
Diffstat (limited to 'src/measure-context.cpp')
-rw-r--r--src/measure-context.cpp34
1 files changed, 14 insertions, 20 deletions
diff --git a/src/measure-context.cpp b/src/measure-context.cpp
index 8920facb9..9e6a5fe12 100644
--- a/src/measure-context.cpp
+++ b/src/measure-context.cpp
@@ -47,7 +47,6 @@ static SPEventContextClass *parent_class;
static gint xp = 0, yp = 0; // where drag started
static gint tolerance = 0;
static bool within_tolerance = false;
-static SPCanvasItem * line = NULL;
Geom::Point start_point;
std::vector<Inkscape::Display::TemporaryItem*> measure_tmp_items;
@@ -153,14 +152,6 @@ static gint sp_measure_context_root_handler(SPEventContext *event_context, GdkEv
ret = TRUE;
}
- if (!line){
- SPDesktop *desktop = inkscape_active_desktop();
- line = sp_canvas_item_new(sp_desktop_controls(desktop), SP_TYPE_CTRLLINE, NULL);
- }
-
- sp_ctrlline_set_coords (SP_CTRLLINE(line), start_point, start_point);
- sp_canvas_item_show (line);
-
sp_canvas_item_grab(SP_CANVAS_ITEM(desktop->acetate),
GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK,
NULL, event->button.time);
@@ -183,14 +174,26 @@ static gint sp_measure_context_root_handler(SPEventContext *event_context, GdkEv
// motion notify coordinates as given (no snapping back to origin)
within_tolerance = false;
+ //clear previous temporary canvas items, we'll draw new ones
+ unsigned int idx;
+ for (idx=0; idx<measure_tmp_items.size(); idx++){
+ desktop->remove_temporary_canvasitem(measure_tmp_items[idx]);
+ }
+ measure_tmp_items.clear();
+
Geom::Point const motion_w(event->motion.x, event->motion.y);
Geom::Point const motion_dt(desktop->w2d(motion_w));
Geom::Point end_point = motion_dt;
+ //rotation constraint
if (event->motion.state & GDK_CONTROL_MASK)
spdc_endpoint_snap_rotation(event_context, end_point, start_point, event->motion.state);
- sp_ctrlline_set_coords (SP_CTRLLINE(line), start_point[Geom::X], start_point[Geom::Y], end_point[Geom::X], end_point[Geom::Y]);
+ //draw control line
+ SPCanvasItem * control_line = NULL;
+ control_line = sp_canvas_item_new(sp_desktop_tempgroup (desktop), SP_TYPE_CTRLLINE, NULL);
+ sp_ctrlline_set_coords(SP_CTRLLINE(control_line), start_point, end_point);
+ measure_tmp_items.push_back(desktop->add_temporary_canvasitem(control_line, 0));
Geom::PathVector lineseg;
Geom::Path p;
@@ -273,12 +276,6 @@ static gint sp_measure_context_root_handler(SPEventContext *event_context, GdkEv
std::sort(intersections.begin(), intersections.end(), GeomPointSortPredicate);
}
- unsigned int idx;
- for (idx=0; idx<measure_tmp_items.size(); idx++){
- desktop->remove_temporary_canvasitem(measure_tmp_items[idx]);
- }
- measure_tmp_items.clear();
-
for (idx=0;idx<intersections.size(); idx++){
// Display the intersection indicator (i.e. the cross)
SPCanvasItem * canvasitem = NULL;
@@ -340,10 +337,7 @@ static gint sp_measure_context_root_handler(SPEventContext *event_context, GdkEv
case GDK_BUTTON_RELEASE:
{
- if (line){
- sp_canvas_item_hide(line);
- }
-
+ //clear all temporary canvas items related to the measurement tool.
unsigned int idx;
for (idx=0; idx<measure_tmp_items.size(); idx++){
desktop->remove_temporary_canvasitem(measure_tmp_items[idx]);