Index: trunk/src/obj_pstk.c =================================================================== --- trunk/src/obj_pstk.c (revision 13092) +++ trunk/src/obj_pstk.c (revision 13093) @@ -188,7 +188,7 @@ return dst; } -void pcb_pstk_move(pcb_pstk_t *ps, pcb_coord_t dx, pcb_coord_t dy) +void pcb_pstk_move_(pcb_pstk_t *ps, pcb_coord_t dx, pcb_coord_t dy) { ps->x += dx; ps->y += dy; @@ -198,6 +198,16 @@ ps->BoundingBox.Y2 += dy; } +void pcb_pstk_move(pcb_pstk_t *ps, pcb_coord_t dx, pcb_coord_t dy, pcb_bool more_to_come) +{ + pcb_opctx_t ctx; + ctx.move.pcb = NULL; + ctx.move.dx = dx; + ctx.move.dy = dy; + ctx.move.more_to_come = more_to_come; + pcb_pstkop_move(&ctx, ps); +} + pcb_pstk_t *pcb_pstk_by_id(pcb_data_t *base, long int ID) { pcb_box_t *ps; Index: trunk/src/obj_pstk.h =================================================================== --- trunk/src/obj_pstk.h (revision 13092) +++ trunk/src/obj_pstk.h (revision 13093) @@ -164,6 +164,14 @@ /* Mirror a padstack (useful for sending to the other side - set swap_side to 1 in that case) */ void pcb_pstk_mirror(pcb_pstk_t *ps, pcb_coord_t y_offs, int swap_side); +/* Undoable move (op wrapper) */ +void pcb_pstk_move(pcb_pstk_t *ps, pcb_coord_t dx, pcb_coord_t dy, pcb_bool more_to_come); + +/* Low level move - updates only the coordinates and the bbox */ +void pcb_pstk_move_(pcb_pstk_t *ps, pcb_coord_t dx, pcb_coord_t dy); + + + /*** hash ***/ unsigned int pcb_pstk_hash(const pcb_pstk_proto_t *p); int pcb_pstk_eq(const pcb_pstk_proto_t *p1, const pcb_pstk_proto_t *p2); Index: trunk/src/obj_pstk_op.c =================================================================== --- trunk/src/obj_pstk_op.c (revision 13092) +++ trunk/src/obj_pstk_op.c (revision 13093) @@ -89,7 +89,7 @@ void *pcb_pstkop_move_noclip(pcb_opctx_t *ctx, pcb_pstk_t *ps) { pcb_pstk_invalidate_erase(ps); - pcb_pstk_move(ps, ctx->move.dx, ctx->move.dy); + pcb_pstk_move_(ps, ctx->move.dx, ctx->move.dy); pcb_pstk_invalidate_draw(ps); pcb_draw(); return ps; @@ -196,7 +196,7 @@ pcb_rotate(&nx, &ny, ctx->rotate.center_x, ctx->rotate.center_y, ctx->rotate.cosa, ctx->rotate.sina); if ((nx != ps->x) || (ny != ps->y)) - pcb_pstk_move(ps, nx - ps->x, ny - ps->y); + pcb_pstk_move_(ps, nx - ps->x, ny - ps->y); pcb_pstk_bbox(ps); pcb_r_insert_entry(ps->parent.data->padstack_tree, (pcb_box_t *)ps, 0);