Index: trunk/src/crosshair.c =================================================================== --- trunk/src/crosshair.c (revision 27115) +++ trunk/src/crosshair.c (revision 27116) @@ -497,22 +497,29 @@ void pcbhl_draw_marks(pcb_hidlib_t *hidlib, pcb_bool inhibit_drawing_mode) { - pcb_coord_t ms = conf_core.appearance.mark_size; + pcb_coord_t ms = conf_core.appearance.mark_size, ms2 = ms / 2; - /* Mark is not drawn when it is not set */ - if (!pcb_marked.status) - return; + if ((pcb_marked.status) || (pcb_grabbed.status)) { + if (!inhibit_drawing_mode) { + pcb_render->set_drawing_mode(pcb_gui, PCB_HID_COMP_RESET, 1, NULL); + pcb_render->set_drawing_mode(pcb_gui, PCB_HID_COMP_POSITIVE, 1, NULL); + } + } - if (!inhibit_drawing_mode) { - pcb_render->set_drawing_mode(pcb_gui, PCB_HID_COMP_RESET, 1, NULL); - pcb_render->set_drawing_mode(pcb_gui, PCB_HID_COMP_POSITIVE, 1, NULL); + if (pcb_marked.status) { + pcb_render->draw_line(pcb_crosshair.GC, pcb_marked.X - ms, pcb_marked.Y - ms, pcb_marked.X + ms, pcb_marked.Y + ms); + pcb_render->draw_line(pcb_crosshair.GC, pcb_marked.X + ms, pcb_marked.Y - ms, pcb_marked.X - ms, pcb_marked.Y + ms); } - pcb_render->draw_line(pcb_crosshair.GC, pcb_marked.X - ms, pcb_marked.Y - ms, pcb_marked.X + ms, pcb_marked.Y + ms); - pcb_render->draw_line(pcb_crosshair.GC, pcb_marked.X + ms, pcb_marked.Y - ms, pcb_marked.X - ms, pcb_marked.Y + ms); - if (!inhibit_drawing_mode) - pcb_render->set_drawing_mode(pcb_gui, PCB_HID_COMP_FLUSH, 1, NULL); + if (pcb_grabbed.status) { + pcb_render->draw_line(pcb_crosshair.GC, pcb_grabbed.X - ms, pcb_grabbed.Y - ms2, pcb_grabbed.X + ms, pcb_grabbed.Y + ms2); + pcb_render->draw_line(pcb_crosshair.GC, pcb_grabbed.X + ms2, pcb_grabbed.Y - ms, pcb_grabbed.X - ms2, pcb_grabbed.Y + ms); + } + + if ((pcb_marked.status) || (pcb_grabbed.status)) + if (!inhibit_drawing_mode) + pcb_render->set_drawing_mode(pcb_gui, PCB_HID_COMP_FLUSH, 1, NULL); } /* --------------------------------------------------------------------------- Index: trunk/src/tool.c =================================================================== --- trunk/src/tool.c (revision 27115) +++ trunk/src/tool.c (revision 27116) @@ -418,6 +418,7 @@ if (pcbhl_conf.temp.click_cmd_entry_active && (pcb_cli_mouse(0) == 0)) return; + pcb_grabbed.status = pcb_false; pcb_tool_release_mode(hidlib); if (pcb_tool_is_saved) @@ -433,6 +434,7 @@ pcb_grabbed.X = pcb_crosshair.X; pcb_grabbed.Y = pcb_crosshair.Y; + pcb_grabbed.status = pcb_true; if (conf_core.temp.rat_warn) { if (pcb_data_clear_flag(PCB->Data, PCB_FLAG_WARN, 1, 0) > 0) Index: trunk/src/tool_line.c =================================================================== --- trunk/src/tool_line.c (revision 27115) +++ trunk/src/tool_line.c (revision 27116) @@ -216,6 +216,7 @@ /* set the mark to the new starting point so ortho works as expected and we can draw a perpendicular line from here */ pcb_grabbed.X = pcb_crosshair.Route.end_point.X; pcb_grabbed.Y = pcb_crosshair.Route.end_point.Y; + pcb_grabbed.status = pcb_true; } if (ps) Index: trunk/src/tool_poly.c =================================================================== --- trunk/src/tool_poly.c (revision 27115) +++ trunk/src/tool_poly.c (revision 27116) @@ -90,6 +90,7 @@ /* set the mark to the new starting point so ortho works */ pcb_grabbed.X = pcb_tool_note.X; pcb_grabbed.Y = pcb_tool_note.Y; + pcb_grabbed.status = pcb_true; } } Index: trunk/src/tool_polyhole.c =================================================================== --- trunk/src/tool_polyhole.c (revision 27115) +++ trunk/src/tool_polyhole.c (revision 27116) @@ -91,6 +91,7 @@ /* set the mark to the new starting point so ortho works */ pcb_grabbed.X = pcb_tool_note.X; pcb_grabbed.Y = pcb_tool_note.Y; + pcb_grabbed.status = pcb_true; } /* check if this is the last point of a polygon */