Index: trunk/src/crosshair.c =================================================================== --- trunk/src/crosshair.c (revision 17209) +++ trunk/src/crosshair.c (revision 17210) @@ -1055,8 +1055,8 @@ pcb_gui->set_color(pcb_crosshair.GC, conf_core.appearance.color.crosshair); pcb_gui->set_draw_xor(pcb_crosshair.GC, 1); - pcb_gui->set_line_cap(pcb_crosshair.GC, pcb_cap_round); - pcb_gui->set_line_width(pcb_crosshair.GC, 1); + pcb_hid_set_line_cap(pcb_crosshair.GC, pcb_cap_round); + pcb_hid_set_line_width(pcb_crosshair.GC, 1); /* set initial shape */ pcb_crosshair.shape = pcb_ch_shape_basic; Index: trunk/src/draw.c =================================================================== --- trunk/src/draw.c (revision 17209) +++ trunk/src/draw.c (revision 17210) @@ -351,8 +351,8 @@ pcb_gui->set_drawing_mode(PCB_HID_COMP_RESET, pcb_draw_out.direct, drawn_area); pcb_gui->set_drawing_mode(PCB_HID_COMP_POSITIVE, pcb_draw_out.direct, drawn_area); - pcb_gui->set_line_cap(pcb_draw_out.fgGC, pcb_cap_round); - pcb_gui->set_line_width(pcb_draw_out.fgGC, 0); + 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); if (PCB->SubcOn) @@ -359,7 +359,7 @@ pcb_r_search(PCB->Data->subc_tree, drawn_area, NULL, draw_subc_mark_callback, NULL, NULL); if ((PCB->padstack_mark_on) && (conf_core.appearance.padstack.cross_thick > 0)) { - pcb_gui->set_line_width(pcb_draw_out.fgGC, -conf_core.appearance.padstack.cross_thick); + pcb_hid_set_line_width(pcb_draw_out.fgGC, -conf_core.appearance.padstack.cross_thick); pcb_draw_pstk_marks(drawn_area); } @@ -378,12 +378,12 @@ /* Draw pins' and pads' names */ pcb_gui->set_drawing_mode(PCB_HID_COMP_RESET, pcb_draw_out.direct, drawn_area); pcb_gui->set_drawing_mode(PCB_HID_COMP_POSITIVE, pcb_draw_out.direct, drawn_area); - pcb_gui->set_line_cap(pcb_draw_out.fgGC, pcb_cap_round); - pcb_gui->set_line_width(pcb_draw_out.fgGC, 0); + pcb_hid_set_line_cap(pcb_draw_out.fgGC, pcb_cap_round); + pcb_hid_set_line_width(pcb_draw_out.fgGC, 0); if (PCB->SubcOn) pcb_r_search(PCB->Data->subc_tree, drawn_area, NULL, draw_subc_label_callback, NULL, NULL); if (PCB->padstack_mark_on) { - pcb_gui->set_line_width(pcb_draw_out.fgGC, -conf_core.appearance.padstack.cross_thick); + pcb_hid_set_line_width(pcb_draw_out.fgGC, -conf_core.appearance.padstack.cross_thick); pcb_draw_pstk_labels(drawn_area); } pcb_draw_pstk_names(conf_core.editor.show_solder_side ? solder : component, drawn_area); @@ -539,7 +539,7 @@ the outline layer. */ if ((lflg & PCB_LYT_OUTLINE) && pcb_layer_is_empty_(PCB, Layer)) { pcb_gui->set_color(pcb_draw_out.fgGC, Layer->meta.real.color); - pcb_gui->set_line_width(pcb_draw_out.fgGC, conf_core.design.min_wid); + pcb_hid_set_line_width(pcb_draw_out.fgGC, conf_core.design.min_wid); pcb_gui->draw_rect(pcb_draw_out.fgGC, 0, 0, PCB->MaxWidth, PCB->MaxHeight); } Index: trunk/src/draw.h =================================================================== --- trunk/src/draw.h (revision 17209) +++ trunk/src/draw.h (revision 17210) @@ -99,7 +99,7 @@ #ifdef PCB_BBOX_DEBUG #define PCB_DRAW_BBOX(obj) \ do { \ - pcb_gui->set_line_width(pcb_draw_out.fgGC, 0); \ + pcb_hid_set_line_width(pcb_draw_out.fgGC, 0); \ pcb_gui->draw_rect(pcb_draw_out.fgGC, obj->BoundingBox.X1, obj->BoundingBox.Y1, obj->BoundingBox.X2, obj->BoundingBox.Y2); \ } while(0) #else Index: trunk/src/hid.h =================================================================== --- trunk/src/hid.h (revision 17209) +++ trunk/src/hid.h (revision 17210) @@ -654,4 +654,22 @@ pcb_gui->destroy_gc(gc); } +PCB_INLINE void pcb_hid_set_line_cap(pcb_hid_gc_t gc, pcb_cap_style_t style) +{ + pcb_core_gc_t *hc = (pcb_core_gc_t *)gc; + if (hc->cap != style) { + hc->cap = style; + pcb_gui->set_line_cap(gc, style); + } +} + +PCB_INLINE void pcb_hid_set_line_width(pcb_hid_gc_t gc, pcb_coord_t width) +{ + pcb_core_gc_t *hc = (pcb_core_gc_t *)gc; + if (hc->width != width) { + hc->width = width; + pcb_gui->set_line_width(gc, width); + } +} + #endif Index: trunk/src/hid_draw_helpers.c =================================================================== --- trunk/src/hid_draw_helpers.c (revision 17209) +++ trunk/src/hid_draw_helpers.c (revision 17210) @@ -29,8 +29,8 @@ pcb_coord_t last_x, last_y; pcb_coord_t this_x, this_y; - pcb_gui->set_line_width(gc, 0); - pcb_gui->set_line_cap(gc, pcb_cap_round); + pcb_hid_set_line_width(gc, 0); + pcb_hid_set_line_cap(gc, pcb_cap_round); /* If the contour is round, use an arc drawing routine. */ if (pl->is_round) { Index: trunk/src/obj_arc.c =================================================================== --- trunk/src/obj_arc.c (revision 17209) +++ trunk/src/obj_arc.c (revision 17210) @@ -852,19 +852,19 @@ if (!conf_core.editor.thin_draw && !conf_core.editor.wireframe_draw) { if ((allow_term_gfx) && pcb_draw_term_need_gfx(arc)) { - pcb_gui->set_line_width(pcb_draw_out.active_padGC, arc->Thickness); + pcb_hid_set_line_width(pcb_draw_out.active_padGC, arc->Thickness); pcb_gui->draw_arc(pcb_draw_out.active_padGC, arc->X, arc->Y, arc->Width, arc->Height, arc->StartAngle, arc->Delta); - pcb_gui->set_line_width(pcb_draw_out.fgGC, PCB_DRAW_TERM_GFX_WIDTH); + pcb_hid_set_line_width(pcb_draw_out.fgGC, PCB_DRAW_TERM_GFX_WIDTH); } else - pcb_gui->set_line_width(pcb_draw_out.fgGC, arc->Thickness); - pcb_gui->set_line_cap(pcb_draw_out.fgGC, pcb_cap_round); + pcb_hid_set_line_width(pcb_draw_out.fgGC, arc->Thickness); + pcb_hid_set_line_cap(pcb_draw_out.fgGC, pcb_cap_round); pcb_gui->draw_arc(pcb_draw_out.fgGC, arc->X, arc->Y, arc->Width, arc->Height, arc->StartAngle, arc->Delta); } else { - pcb_gui->set_line_width(pcb_draw_out.fgGC, 0); - pcb_gui->set_line_cap(pcb_draw_out.fgGC, pcb_cap_round); + pcb_hid_set_line_width(pcb_draw_out.fgGC, 0); + pcb_hid_set_line_cap(pcb_draw_out.fgGC, pcb_cap_round); if(conf_core.editor.thin_draw) pcb_gui->draw_arc(pcb_draw_out.fgGC, arc->X, arc->Y, arc->Width, arc->Height, arc->StartAngle, arc->Delta); Index: trunk/src/obj_line.c =================================================================== --- trunk/src/obj_line.c (revision 17209) +++ trunk/src/obj_line.c (revision 17210) @@ -998,26 +998,26 @@ void pcb_line_draw_(pcb_line_t *line, int allow_term_gfx) { PCB_DRAW_BBOX(line); - pcb_gui->set_line_cap(pcb_draw_out.fgGC, pcb_cap_round); + pcb_hid_set_line_cap(pcb_draw_out.fgGC, pcb_cap_round); if (!conf_core.editor.thin_draw && !conf_core.editor.wireframe_draw) { if ((allow_term_gfx) && pcb_draw_term_need_gfx(line)) { - pcb_gui->set_line_width(pcb_draw_out.active_padGC, line->Thickness); + pcb_hid_set_line_width(pcb_draw_out.active_padGC, line->Thickness); pcb_gui->draw_line(pcb_draw_out.active_padGC, line->Point1.X, line->Point1.Y, line->Point2.X, line->Point2.Y); - pcb_gui->set_line_width(pcb_draw_out.fgGC, PCB_DRAW_TERM_GFX_WIDTH); + pcb_hid_set_line_width(pcb_draw_out.fgGC, PCB_DRAW_TERM_GFX_WIDTH); } else - pcb_gui->set_line_width(pcb_draw_out.fgGC, line->Thickness); + pcb_hid_set_line_width(pcb_draw_out.fgGC, line->Thickness); pcb_gui->draw_line(pcb_draw_out.fgGC, line->Point1.X, line->Point1.Y, line->Point2.X, line->Point2.Y); } else { if(conf_core.editor.thin_draw) { - pcb_gui->set_line_width(pcb_draw_out.fgGC, 0); + pcb_hid_set_line_width(pcb_draw_out.fgGC, 0); pcb_gui->draw_line(pcb_draw_out.fgGC, line->Point1.X, line->Point1.Y, line->Point2.X, line->Point2.Y); } if(conf_core.editor.wireframe_draw) { - pcb_gui->set_line_width(pcb_draw_out.fgGC, 0); + pcb_hid_set_line_width(pcb_draw_out.fgGC, 0); pcb_draw_wireframe_line(pcb_draw_out.fgGC, line->Point1.X, line->Point1.Y, line->Point2.X, line->Point2.Y, line->Thickness, 0); } } Index: trunk/src/obj_poly.c =================================================================== --- trunk/src/obj_poly.c (revision 17209) +++ trunk/src/obj_poly.c (revision 17210) @@ -1021,7 +1021,7 @@ pcb_gui->fill_pcb_polygon(pcb_draw_out.active_padGC, polygon, drawn_area); head = &polygon->Clipped->contours->head; - pcb_gui->set_line_cap(pcb_draw_out.fgGC, pcb_cap_square); + pcb_hid_set_line_cap(pcb_draw_out.fgGC, pcb_cap_square); for(n = head, i = 0; (n != head) || (i == 0); n = n->next, i++) { pcb_coord_t x, y, r; x = (n->prev->point[0] + n->point[0] + n->next->point[0]) / 3; @@ -1029,7 +1029,7 @@ #warning subc TODO: check if x;y is within the poly, but use a cheaper method than the official r = PCB_DRAW_TERM_GFX_WIDTH; - pcb_gui->set_line_width(pcb_draw_out.fgGC, r); + pcb_hid_set_line_width(pcb_draw_out.fgGC, r); pcb_gui->draw_line(pcb_draw_out.fgGC, x, y, x, y); } } Index: trunk/src/obj_pstk.c =================================================================== --- trunk/src/obj_pstk.c (revision 17209) +++ trunk/src/obj_pstk.c (revision 17210) @@ -358,8 +358,8 @@ pcb_gui->fill_polygon_offs(pcb_draw_out.fgGC, shape->data.poly.len, shape->data.poly.x, shape->data.poly.y, ps->x, ps->y); break; case PCB_PSSH_LINE: - pcb_gui->set_line_cap(pcb_draw_out.fgGC, shape->data.line.square ? pcb_cap_square : pcb_cap_round); - pcb_gui->set_line_width(pcb_draw_out.fgGC, shape->data.line.thickness); + pcb_hid_set_line_cap(pcb_draw_out.fgGC, shape->data.line.square ? pcb_cap_square : pcb_cap_round); + pcb_hid_set_line_width(pcb_draw_out.fgGC, shape->data.line.thickness); pcb_gui->draw_line(pcb_draw_out.fgGC, ps->x + shape->data.line.x1, ps->y + shape->data.line.y1, ps->x + shape->data.line.x2, ps->y + shape->data.line.y2); break; case PCB_PSSH_CIRC: @@ -415,7 +415,7 @@ else set_ps_color(ps, ctx->is_current, grp->ltype); if (conf_core.editor.thin_draw || conf_core.editor.wireframe_draw) { - pcb_gui->set_line_width(pcb_draw_out.fgGC, 0); + pcb_hid_set_line_width(pcb_draw_out.fgGC, 0); pcb_pstk_draw_shape_thin(pcb_draw_out.fgGC, ps, shape); } else @@ -501,7 +501,7 @@ pcb_coord_t r = proto->hdia / 2; 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_gui->set_line_width(pcb_draw_out.fgGC, 0); + pcb_hid_set_line_width(pcb_draw_out.fgGC, 0); pcb_gui->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); Index: trunk/src/obj_rat.c =================================================================== --- trunk/src/obj_rat.c (revision 17209) +++ trunk/src/obj_rat.c (revision 17210) @@ -233,9 +233,9 @@ int w = rat->Thickness; if (conf_core.editor.thin_draw || conf_core.editor.wireframe_draw) - pcb_gui->set_line_width(pcb_draw_out.fgGC, 0); + pcb_hid_set_line_width(pcb_draw_out.fgGC, 0); else - pcb_gui->set_line_width(pcb_draw_out.fgGC, w); + pcb_hid_set_line_width(pcb_draw_out.fgGC, w); pcb_gui->draw_arc(pcb_draw_out.fgGC, rat->Point1.X, rat->Point1.Y, w * 2, w * 2, 0, 360); } else Index: trunk/src/tool_via.c =================================================================== --- trunk/src/tool_via.c (revision 17209) +++ trunk/src/tool_via.c (revision 17210) @@ -86,8 +86,8 @@ static void xor_draw_fake_via(pcb_coord_t x, pcb_coord_t y, pcb_coord_t dia, pcb_coord_t clearance) { pcb_coord_t r = (dia/2)+clearance; - pcb_gui->set_line_cap(pcb_crosshair.GC, pcb_cap_round); - pcb_gui->set_line_width(pcb_crosshair.GC, 0); + pcb_hid_set_line_cap(pcb_crosshair.GC, pcb_cap_round); + pcb_hid_set_line_width(pcb_crosshair.GC, 0); pcb_gui->draw_arc(pcb_crosshair.GC, x, y, r, r, 0, 360); } Index: trunk/src_plugins/draw_fab/draw_fab.c =================================================================== --- trunk/src_plugins/draw_fab/draw_fab.c (revision 17209) +++ trunk/src_plugins/draw_fab/draw_fab.c (revision 17210) @@ -198,7 +198,7 @@ yoff -= (4 - ds) * TEXT_LINE; } - pcb_gui->set_line_width(gc, FAB_LINE_W); + pcb_hid_set_line_width(gc, FAB_LINE_W); for (n = AllDrills->DrillN - 1; n >= 0; n--) { int plated_sym = -1, unplated_sym = -1; @@ -277,13 +277,13 @@ } } if (!found) { - pcb_gui->set_line_width(gc, PCB_MIL_TO_COORD(10)); + pcb_hid_set_line_width(gc, PCB_MIL_TO_COORD(10)); pcb_gui->draw_line(gc, 0, 0, PCB->MaxWidth, 0); pcb_gui->draw_line(gc, 0, 0, 0, PCB->MaxHeight); pcb_gui->draw_line(gc, PCB->MaxWidth, 0, PCB->MaxWidth, PCB->MaxHeight); pcb_gui->draw_line(gc, 0, PCB->MaxHeight, PCB->MaxWidth, PCB->MaxHeight); /*FPrintOutline (); */ - pcb_gui->set_line_width(gc, FAB_LINE_W); + pcb_hid_set_line_width(gc, FAB_LINE_W); text_at(gc, PCB_MIL_TO_COORD(2000), yoff, 0, "Maximum Dimensions: %f mils wide, %f mils high", PCB_COORD_TO_MIL(PCB->MaxWidth), PCB_COORD_TO_MIL(PCB->MaxHeight)); text_at(gc, PCB->MaxWidth / 2, PCB->MaxHeight + PCB_MIL_TO_COORD(20), 1, @@ -293,7 +293,7 @@ } else { pcb_layer_t *layer = LAYER_PTR(i); - pcb_gui->set_line_width(gc, PCB_MIL_TO_COORD(10)); + pcb_hid_set_line_width(gc, PCB_MIL_TO_COORD(10)); PCB_LINE_LOOP(layer); { pcb_gui->draw_line(gc, line->Point1.X, line->Point1.Y, line->Point2.X, line->Point2.Y); @@ -309,7 +309,7 @@ pcb_text_draw_(text, 0, 0); } PCB_END_LOOP; - pcb_gui->set_line_width(gc, FAB_LINE_W); + pcb_hid_set_line_width(gc, FAB_LINE_W); text_at(gc, PCB->MaxWidth / 2, PCB->MaxHeight + PCB_MIL_TO_COORD(20), 1, "Board outline is the centerline of this path"); } yoff -= TEXT_LINE; Index: trunk/src_plugins/export_gerber/gerber.c =================================================================== --- trunk/src_plugins/export_gerber/gerber.c (revision 17209) +++ trunk/src_plugins/export_gerber/gerber.c (revision 17210) @@ -855,11 +855,11 @@ else if (!outline_layer) { pcb_hid_gc_t gc = pcb_hid_make_gc(); if (flags & PCB_LYT_SILK) - pcb_gui->set_line_width(gc, conf_core.design.min_slk); + pcb_hid_set_line_width(gc, conf_core.design.min_slk); else if (group >= 0) - pcb_gui->set_line_width(gc, conf_core.design.min_wid); + pcb_hid_set_line_width(gc, conf_core.design.min_wid); else - pcb_gui->set_line_width(gc, AUTO_OUTLINE_WIDTH); + pcb_hid_set_line_width(gc, AUTO_OUTLINE_WIDTH); pcb_gui->draw_line(gc, 0, 0, PCB->MaxWidth, 0); pcb_gui->draw_line(gc, 0, 0, 0, PCB->MaxHeight); pcb_gui->draw_line(gc, PCB->MaxWidth, 0, PCB->MaxWidth, PCB->MaxHeight); Index: trunk/src_plugins/jostle/jostle.c =================================================================== --- trunk/src_plugins/jostle/jostle.c (revision 17209) +++ trunk/src_plugins/jostle/jostle.c (revision 17210) @@ -103,7 +103,7 @@ } /* if (1) { pcb_gui->set_color(ddgc, color ? color : conf_core.appearance.color.connected); - pcb_gui->set_line_width(ddgc, 1); + pcb_hid_set_line_width(ddgc, 1); for (i = 0; i < n - 1; i++) { pcb_gui->draw_line(ddgc, x[i], y[i], x[i + 1], y[i + 1]); pcb_gui->fill_circle (ddgc, x[i], y[i], 30);