Index: trunk/src/crosshair.c =================================================================== --- trunk/src/crosshair.c (revision 17212) +++ trunk/src/crosshair.c (revision 17213) @@ -1055,7 +1055,7 @@ pcb_crosshair.GC = pcb_hid_make_gc(); pcb_gui->set_color(pcb_crosshair.GC, conf_core.appearance.color.crosshair); - pcb_gui->set_draw_xor(pcb_crosshair.GC, 1); + pcb_hid_set_draw_xor(pcb_crosshair.GC, 1); pcb_hid_set_line_cap(pcb_crosshair.GC, pcb_cap_round); pcb_hid_set_line_width(pcb_crosshair.GC, 1); Index: trunk/src/draw.c =================================================================== --- trunk/src/draw.c (revision 17212) +++ trunk/src/draw.c (revision 17213) @@ -354,7 +354,7 @@ pcb_hid_set_line_cap(pcb_draw_out.fgGC, pcb_cap_round); pcb_hid_set_line_width(pcb_draw_out.fgGC, 0); - pcb_gui->set_draw_xor(pcb_draw_out.fgGC, 1); + pcb_hid_set_draw_xor(pcb_draw_out.fgGC, 1); if (PCB->SubcOn) pcb_r_search(PCB->Data->subc_tree, drawn_area, NULL, draw_subc_mark_callback, NULL, NULL); @@ -364,7 +364,7 @@ pcb_draw_pstk_marks(drawn_area); } - pcb_gui->set_draw_xor(pcb_draw_out.fgGC, 0); + pcb_hid_set_draw_xor(pcb_draw_out.fgGC, 0); pcb_gui->set_drawing_mode(PCB_HID_COMP_FLUSH, pcb_draw_out.direct, drawn_area); /* Draw rat lines on top */ Index: trunk/src/draw_ly_spec.c =================================================================== --- trunk/src/draw_ly_spec.c (revision 17212) +++ trunk/src/draw_ly_spec.c (revision 17213) @@ -172,9 +172,9 @@ return; pcb_draw_doing_assy = pcb_true; - pcb_gui->set_draw_faded(pcb_draw_out.fgGC, 1); + pcb_hid_set_draw_faded(pcb_draw_out.fgGC, 1); DrawLayerGroup(side_group, drawn_area, 0); - pcb_gui->set_draw_faded(pcb_draw_out.fgGC, 0); + pcb_hid_set_draw_faded(pcb_draw_out.fgGC, 0); /* draw package */ pcb_draw_silk(lyt_side, drawn_area); Index: trunk/src/hid.h =================================================================== --- trunk/src/hid.h (revision 17212) +++ trunk/src/hid.h (revision 17213) @@ -74,6 +74,8 @@ typedef struct { pcb_coord_t width; /* as set by set_line_width */ pcb_cap_style_t cap; /* as set by set_line_cap */ + int xor; /* as set by set_draw_xor */ + int faded; /* as set by set_draw_faded */ } pcb_core_gc_t; /* This graphics context is an opaque pointer defined by the HID. GCs Index: trunk/src/hid_inlines.h =================================================================== --- trunk/src/hid_inlines.h (revision 17212) +++ trunk/src/hid_inlines.h (revision 17213) @@ -37,6 +37,8 @@ hc = (pcb_core_gc_t *)res; /* assumes first field is pcb_core_gc_t */ hc->width = PCB_MAX_COORD; hc->cap = pcb_cap_invalid; + hc->xor = 0; + hc->faded = 0; return res; } @@ -63,4 +65,23 @@ } } +PCB_INLINE void pcb_hid_set_draw_xor(pcb_hid_gc_t gc, int xor) +{ + pcb_core_gc_t *hc = (pcb_core_gc_t *)gc; + if (hc->xor != xor) { + hc->xor = xor; + pcb_gui->set_draw_xor(gc, xor); + } +} + +PCB_INLINE void pcb_hid_set_draw_faded(pcb_hid_gc_t gc, int faded) +{ + pcb_core_gc_t *hc = (pcb_core_gc_t *)gc; + if (hc->faded != faded) { + hc->faded = faded; + pcb_gui->set_draw_faded(gc, faded); + } +} + + #endif Index: trunk/src/obj_pstk.c =================================================================== --- trunk/src/obj_pstk.c (revision 17212) +++ trunk/src/obj_pstk.c (revision 17213) @@ -410,7 +410,7 @@ shape = pcb_pstk_shape_gid(ctx->pcb, ps, ctx->gid, ctx->comb, &grp); if (shape != NULL) { - pcb_gui->set_draw_xor(pcb_draw_out.fgGC, 0); + pcb_hid_set_draw_xor(pcb_draw_out.fgGC, 0); if (grp == NULL) set_ps_color(ps, ctx->is_current, ctx->shape_mask); else @@ -503,9 +503,9 @@ r += r/8; /* +12.5% */ pcb_gui->set_color(pcb_draw_out.fgGC, PCB_FLAG_TEST(PCB_FLAG_SELECTED, ps) ? conf_core.appearance.color.subc_selected : conf_core.appearance.color.subc); pcb_hid_set_line_width(pcb_draw_out.fgGC, 0); - pcb_gui->set_draw_xor(pcb_draw_out.fgGC, 1); + pcb_hid_set_draw_xor(pcb_draw_out.fgGC, 1); pcb_gui->draw_arc(pcb_draw_out.fgGC, ps->x, ps->y, r, r, 20, 290); - pcb_gui->set_draw_xor(pcb_draw_out.fgGC, 0); + pcb_hid_set_draw_xor(pcb_draw_out.fgGC, 0); } return PCB_R_DIR_FOUND_CONTINUE; @@ -530,7 +530,7 @@ } if (shape != NULL) { - pcb_gui->set_draw_xor(gc, 0); + pcb_hid_set_draw_xor(gc, 0); pcb_pstk_draw_shape_thin(gc, ps, shape); } }