Index: trunk/src/draw.c =================================================================== --- trunk/src/draw.c (revision 11059) +++ trunk/src/draw.c (revision 11060) @@ -662,6 +662,7 @@ Output.padselGC = pcb_gui->make_gc(); Output.drillGC = pcb_gui->make_gc(); Output.pmGC = pcb_gui->make_gc(); + Output.direct = 1; hid->set_color(Output.pmGC, "erase"); hid->set_color(Output.drillGC, "drill"); Index: trunk/src/draw.h =================================================================== --- trunk/src/draw.h (revision 11059) +++ trunk/src/draw.h (revision 11060) @@ -40,6 +40,7 @@ fgGC, /* changed from some routines */ active_padGC, backpadGC, padGC, padselGC, /* pads are drawn with this gc */ pmGC; /* depth 1 pixmap GC to store clip */ + unsigned direct:1; /* starts as 1 and becomes 0 before the first compositing layer group is reset */ } pcb_output_t; extern pcb_output_t Output; Index: trunk/src/draw_composite.c =================================================================== --- trunk/src/draw_composite.c (revision 11059) +++ trunk/src/draw_composite.c (revision 11060) @@ -60,7 +60,7 @@ pcb_gui->set_color(Output.pmGC, ctx->color); else { pcb_gui->use_mask(HID_MASK_CLEAR); - pcb_gui->set_drawing_mode(PCB_HID_COMP_NEGATIVE, pcb_false, ctx->screen); + pcb_gui->set_drawing_mode(PCB_HID_COMP_NEGATIVE, Output.direct, ctx->screen); } } @@ -70,7 +70,7 @@ pcb_gui->set_color(Output.pmGC, "erase"); else { pcb_gui->use_mask(HID_MASK_SET); - pcb_gui->set_drawing_mode(PCB_HID_COMP_POSITIVE, pcb_false, ctx->screen); + pcb_gui->set_drawing_mode(PCB_HID_COMP_POSITIVE, Output.direct, ctx->screen); } } @@ -105,7 +105,7 @@ comp_fill_board(ctx, HID_MASK_AFTER); pcb_gui->use_mask(HID_MASK_OFF); - pcb_gui->set_drawing_mode(PCB_HID_COMP_FLUSH, pcb_false, ctx->screen); + pcb_gui->set_drawing_mode(PCB_HID_COMP_FLUSH, Output.direct, ctx->screen); } static void comp_init(comp_ctx_t *ctx, int negative) @@ -114,7 +114,7 @@ return; pcb_gui->use_mask(HID_MASK_INIT); - pcb_gui->set_drawing_mode(PCB_HID_COMP_RESET, pcb_false, ctx->screen); + pcb_gui->set_drawing_mode(PCB_HID_COMP_RESET, Output.direct, ctx->screen); if (ctx->invert) negative = !negative; @@ -215,7 +215,12 @@ static void comp_draw_layer(comp_ctx_t *ctx, void (*draw_auto)(comp_ctx_t *ctx, void *data), void *auto_data) { int enable_fake = (pcb_gui != NULL) && (pcb_gui->enable_fake_composite); - if (!enable_fake || pcb_draw_layergrp_is_comp(ctx->grp)) + int is_comp = pcb_draw_layergrp_is_comp(ctx->grp); + + if (is_comp) + Output.direct = 0; + + if (!enable_fake || is_comp) comp_draw_layer_real(ctx, draw_auto, auto_data); else comp_draw_layer_fake(ctx, draw_auto, auto_data); Index: trunk/src/draw_ly_spec.c =================================================================== --- trunk/src/draw_ly_spec.c (revision 11059) +++ trunk/src/draw_ly_spec.c (revision 11060) @@ -154,10 +154,10 @@ */ if (pcb_gui->can_mask_clear_rats) pcb_gui->use_mask(HID_MASK_CLEAR); - pcb_gui->set_drawing_mode(PCB_HID_COMP_RESET, pcb_false, drawn_area); - pcb_gui->set_drawing_mode(PCB_HID_COMP_POSITIVE, pcb_false, drawn_area); + pcb_gui->set_drawing_mode(PCB_HID_COMP_RESET, Output.direct, drawn_area); + pcb_gui->set_drawing_mode(PCB_HID_COMP_POSITIVE, Output.direct, drawn_area); pcb_r_search(PCB->Data->rat_tree, drawn_area, NULL, pcb_rat_draw_callback, NULL, NULL); - pcb_gui->set_drawing_mode(PCB_HID_COMP_FLUSH, pcb_false, drawn_area); + pcb_gui->set_drawing_mode(PCB_HID_COMP_FLUSH, Output.direct, drawn_area); if (pcb_gui->can_mask_clear_rats) pcb_gui->use_mask(HID_MASK_OFF); }