Index: trunk/src/crosshair.c =================================================================== --- trunk/src/crosshair.c (revision 32129) +++ trunk/src/crosshair.c (revision 32130) @@ -500,7 +500,8 @@ x = point->X + dx; y = point->Y + dy; nx = polygon->Points[next].X; ny = polygon->Points[next].Y; - if (modifier) { + /* modified version: angle keeper; run only on every even call to not mess up the xor */ + if (modifier && pcb_crosshair.edit_poly_point_extra.last_active) { rnd_coord_t ppx, ppy, nnx, nny, ox[2], oy[2]; pcb_crosshair.edit_poly_point_extra.active = 1; @@ -527,6 +528,8 @@ else pcb_crosshair.edit_poly_point_extra.active = 0; + pcb_crosshair.edit_poly_point_extra.last_active = modifier; + /* draw the two segments */ rnd_render->draw_line(pcb_crosshair.GC, px, py, x, y); rnd_render->draw_line(pcb_crosshair.GC, x, y, nx, ny); Index: trunk/src/crosshair.h =================================================================== --- trunk/src/crosshair.h (revision 32129) +++ trunk/src/crosshair.h (revision 32130) @@ -77,7 +77,7 @@ /* tool-specific temporary storage */ struct { - int active; + int active, last_active; rnd_point_t *point[2]; rnd_coord_t dx[2], dy[2]; } edit_poly_point_extra;