Index: trunk/src/draw.c =================================================================== --- trunk/src/draw.c (revision 34124) +++ trunk/src/draw.c (revision 34125) @@ -465,10 +465,24 @@ static void xform_setup(pcb_draw_info_t *info, rnd_xform_t *dst, const pcb_layer_t *Layer) { info->layer = Layer; + int copied = 0; + + /* layer-specific transformations */ if ((Layer != NULL) && (!pcb_xform_is_nop(&Layer->meta.real.xform))) { pcb_xform_copy(dst, &Layer->meta.real.xform); info->xform = dst; + copied = 1; } + + /* ... plus only in GUI mode: per layer GUI modifications */ + if ((Layer != NULL) && (rnd_render == rnd_gui) && (!pcb_xform_is_nop(&Layer->meta.real.gui_xform))) { + if (copied) + pcb_xform_add(dst, &Layer->meta.real.gui_xform); + else + pcb_xform_copy(dst, &Layer->meta.real.gui_xform); + info->xform = dst; + } + if (info->xform_caller != NULL) { if (info->xform == NULL) { info->xform = dst; Index: trunk/src/gui_act.c =================================================================== --- trunk/src/gui_act.c (revision 34124) +++ trunk/src/gui_act.c (revision 34125) @@ -1580,9 +1580,9 @@ #define XFORM_BOOL(ly, how, field) \ do { \ switch(how) { \ - case F_Set: ly->meta.real.xform.field = 1; break; \ - case F_Clear: ly->meta.real.xform.field = 0; break; \ - case F_Toggle: ly->meta.real.xform.field = !ly->meta.real.xform.field; break; \ + case F_Set: ly->meta.real.gui_xform.field = 1; break; \ + case F_Clear: ly->meta.real.gui_xform.field = 0; break; \ + case F_Toggle: ly->meta.real.gui_xform.field = !ly->meta.real.gui_xform.field; break; \ default: return FGW_ERR_ARG_CONV; \ } \ rnd_event(RND_ACT_HIDLIB, PCB_EVENT_LAYERVIS_CHANGED, NULL); \ Index: trunk/src/layer.h =================================================================== --- trunk/src/layer.h (revision 34124) +++ trunk/src/layer.h (revision 34125) @@ -142,6 +142,7 @@ int no_drc; /* whether to ignore the layer when checking the design rules */ const char *cookie; /* for UI layers: registration cookie; NULL for unused UI layers */ rnd_xform_t xform; /* layer specified rendering transformation */ + rnd_xform_t gui_xform; /* GUI-render only layer specified rendering transformation */ } real; struct { /* A subcircuit layer binding; list data are local but everything else is coming from board layers */ pcb_layer_t *real; /* NULL if unbound */ Index: trunk/src_plugins/lib_hid_pcbui/layersel.c =================================================================== --- trunk/src_plugins/lib_hid_pcbui/layersel.c (revision 34124) +++ trunk/src_plugins/lib_hid_pcbui/layersel.c (revision 34125) @@ -291,7 +291,7 @@ rnd_gui->attr_dlg_widget_hide(lys->ls->sub.dlg_hid_ctx, lys->wvis_off_closed, !!vis); if (ly != NULL) - is_spec = (ly->meta.real.xform.thin_draw || ly->meta.real.xform.wireframe); + is_spec = (ly->meta.real.gui_xform.thin_draw || ly->meta.real.gui_xform.wireframe); rnd_gui->attr_dlg_widget_hide(lys->ls->sub.dlg_hid_ctx, lys->wspec, !is_spec); }