Index: trunk/src/obj_subc.c =================================================================== --- trunk/src/obj_subc.c (revision 12178) +++ trunk/src/obj_subc.c (revision 12179) @@ -65,6 +65,7 @@ if (inv != NULL) pcb_message(PCB_MSG_ERROR, "Invalid character '%c' in subc refdes '%s'\n", *inv, sc->refdes); } + pcb_text_dyn_bbox_update(sc->data); } pcb_subc_t *pcb_subc_alloc(void) Index: trunk/src/obj_text.c =================================================================== --- trunk/src/obj_text.c (revision 12178) +++ trunk/src/obj_text.c (revision 12179) @@ -605,11 +605,17 @@ void pcb_text_update(pcb_layer_t *layer, pcb_text_t *text) { - pcb_poly_restore_to_poly(PCB->Data, PCB_TYPE_TEXT, layer, text); + pcb_data_t *data = layer->parent; + pcb_board_t *pcb = pcb_data_get_top(data); + + if (pcb == NULL) + return; + + pcb_poly_restore_to_poly(data, PCB_TYPE_TEXT, layer, text); pcb_r_delete_entry(layer->text_tree, (pcb_box_t *) text); - pcb_text_bbox(pcb_font(PCB, text->fid, 1), text); + pcb_text_bbox(pcb_font(pcb, text->fid, 1), text); pcb_r_insert_entry(layer->text_tree, (pcb_box_t *) text, 0); - pcb_poly_clear_from_poly(PCB->Data, PCB_TYPE_TEXT, layer, text); + pcb_poly_clear_from_poly(data, PCB_TYPE_TEXT, layer, text); } void *pcb_textop_change_flag(pcb_opctx_t *ctx, pcb_layer_t *Layer, pcb_text_t *Text) @@ -641,6 +647,14 @@ return text; } +void pcb_text_dyn_bbox_update(pcb_data_t *data) +{ + PCB_TEXT_ALL_LOOP(data); { + if (PCB_FLAG_TEST(PCB_FLAG_DYNTEXT, text)) + pcb_text_update(layer, text); + } PCB_ENDALL_LOOP; +} + /*** draw ***/ #define MAX_SIMPLE_POLY_POINTS 256 Index: trunk/src/obj_text.h =================================================================== --- trunk/src/obj_text.h (revision 12178) +++ trunk/src/obj_text.h (revision 12179) @@ -65,6 +65,9 @@ void pcb_text_set_font(pcb_layer_t *layer, pcb_text_t *text, pcb_font_id_t fid); void pcb_text_update(pcb_layer_t *layer, pcb_text_t *text); +/* Recalculate the bounding box of all dynamic text objects that are + directly under data - useful e.g. on parent attr change */ +void pcb_text_dyn_bbox_update(pcb_data_t *data); void pcb_text_init(void); void pcb_text_uninit(void);