Index: trunk/src/draw.c =================================================================== --- trunk/src/draw.c (revision 4627) +++ trunk/src/draw.c (revision 4628) @@ -491,391 +491,6 @@ DrawPPV(group, drawn_area); } -static void GatherPVName(PinTypePtr Ptr) -{ - BoxType box; - pcb_bool vert = TEST_FLAG(PCB_FLAG_EDGE2, Ptr); - - if (vert) { - box.X1 = Ptr->X - Ptr->Thickness / 2 + conf_core.appearance.pinout.text_offset_y; - box.Y1 = Ptr->Y - Ptr->DrillingHole / 2 - conf_core.appearance.pinout.text_offset_x; - } - else { - box.X1 = Ptr->X + Ptr->DrillingHole / 2 + conf_core.appearance.pinout.text_offset_x; - box.Y1 = Ptr->Y - Ptr->Thickness / 2 + conf_core.appearance.pinout.text_offset_y; - } - - if (vert) { - box.X2 = box.X1; - box.Y2 = box.Y1; - } - else { - box.X2 = box.X1; - box.Y2 = box.Y1; - } - pcb_draw_invalidate(&box); -} - -static void GatherPadName(PadTypePtr Pad) -{ - BoxType box; - pcb_bool vert; - - /* should text be vertical ? */ - vert = (Pad->Point1.X == Pad->Point2.X); - - if (vert) { - box.X1 = Pad->Point1.X - Pad->Thickness / 2; - box.Y1 = MAX(Pad->Point1.Y, Pad->Point2.Y) + Pad->Thickness / 2; - box.X1 += conf_core.appearance.pinout.text_offset_y; - box.Y1 -= conf_core.appearance.pinout.text_offset_x; - box.X2 = box.X1; - box.Y2 = box.Y1; - } - else { - box.X1 = MIN(Pad->Point1.X, Pad->Point2.X) - Pad->Thickness / 2; - box.Y1 = Pad->Point1.Y - Pad->Thickness / 2; - box.X1 += conf_core.appearance.pinout.text_offset_x; - box.Y1 += conf_core.appearance.pinout.text_offset_y; - box.X2 = box.X1; - box.Y2 = box.Y1; - } - - pcb_draw_invalidate(&box); - return; -} - -/* --------------------------------------------------------------------------- - * draw a via object - */ -void DrawVia(PinTypePtr Via) -{ - pcb_draw_invalidate(Via); - if (!TEST_FLAG(PCB_FLAG_HOLE, Via) && TEST_FLAG(PCB_FLAG_DISPLAYNAME, Via)) - DrawViaName(Via); -} - -/* --------------------------------------------------------------------------- - * draws the name of a via - */ -void DrawViaName(PinTypePtr Via) -{ - GatherPVName(Via); -} - -/* --------------------------------------------------------------------------- - * draw a pin object - */ -void DrawPin(PinTypePtr Pin) -{ - pcb_draw_invalidate(Pin); - if ((!TEST_FLAG(PCB_FLAG_HOLE, Pin) && TEST_FLAG(PCB_FLAG_DISPLAYNAME, Pin)) - || pcb_draw_doing_pinout) - DrawPinName(Pin); -} - -/* --------------------------------------------------------------------------- - * draws the name of a pin - */ -void DrawPinName(PinTypePtr Pin) -{ - GatherPVName(Pin); -} - -/* --------------------------------------------------------------------------- - * draw a pad object - */ -void DrawPad(PadTypePtr Pad) -{ - pcb_draw_invalidate(Pad); - if (pcb_draw_doing_pinout || TEST_FLAG(PCB_FLAG_DISPLAYNAME, Pad)) - DrawPadName(Pad); -} - -/* --------------------------------------------------------------------------- - * draws the name of a pad - */ -void DrawPadName(PadTypePtr Pad) -{ - GatherPadName(Pad); -} - -/* --------------------------------------------------------------------------- - * draws a line on a layer - */ -void DrawLine(LayerTypePtr Layer, LineTypePtr Line) -{ - pcb_draw_invalidate(Line); -} - -/* --------------------------------------------------------------------------- - * draws a ratline - */ -void DrawRat(RatTypePtr Rat) -{ - if (conf_core.appearance.rat_thickness < 20) - Rat->Thickness = pixel_slop * conf_core.appearance.rat_thickness; - /* rats.c set PCB_FLAG_VIA if this rat goes to a containing poly: draw a donut */ - if (TEST_FLAG(PCB_FLAG_VIA, Rat)) { - Coord w = Rat->Thickness; - - BoxType b; - - b.X1 = Rat->Point1.X - w * 2 - w / 2; - b.X2 = Rat->Point1.X + w * 2 + w / 2; - b.Y1 = Rat->Point1.Y - w * 2 - w / 2; - b.Y2 = Rat->Point1.Y + w * 2 + w / 2; - pcb_draw_invalidate(&b); - } - else - DrawLine(NULL, (LineType *) Rat); -} - -/* --------------------------------------------------------------------------- - * draws an arc on a layer - */ -void DrawArc(LayerTypePtr Layer, ArcTypePtr Arc) -{ - pcb_draw_invalidate(Arc); -} - -/* --------------------------------------------------------------------------- - * draws a text on a layer - */ -void DrawText(LayerTypePtr Layer, TextTypePtr Text) -{ - pcb_draw_invalidate(Text); -} - - -/* --------------------------------------------------------------------------- - * draws a polygon on a layer - */ -void DrawPolygon(LayerTypePtr Layer, PolygonTypePtr Polygon) -{ - pcb_draw_invalidate(Polygon); -} - -/* --------------------------------------------------------------------------- - * draws an element - */ -void DrawElement(ElementTypePtr Element) -{ - DrawElementPackage(Element); - DrawElementName(Element); - DrawElementPinsAndPads(Element); -} - -/* --------------------------------------------------------------------------- - * draws the name of an element - */ -void DrawElementName(ElementTypePtr Element) -{ - if (TEST_FLAG(PCB_FLAG_HIDENAME, Element)) - return; - DrawText(NULL, &ELEMENT_TEXT(PCB, Element)); -} - -/* --------------------------------------------------------------------------- - * draws the package of an element - */ -void DrawElementPackage(ElementTypePtr Element) -{ - ELEMENTLINE_LOOP(Element); - { - DrawLine(NULL, line); - } - END_LOOP; - ARC_LOOP(Element); - { - DrawArc(NULL, arc); - } - END_LOOP; -} - -/* --------------------------------------------------------------------------- - * draw pins of an element - */ -void DrawElementPinsAndPads(ElementTypePtr Element) -{ - PAD_LOOP(Element); - { - if (pcb_draw_doing_pinout || pcb_draw_doing_assy || FRONT(pad) || PCB->InvisibleObjectsOn) - DrawPad(pad); - } - END_LOOP; - PIN_LOOP(Element); - { - DrawPin(pin); - } - END_LOOP; -} - -/* --------------------------------------------------------------------------- - * erase a via - */ -void EraseVia(PinTypePtr Via) -{ - pcb_draw_invalidate(Via); - if (TEST_FLAG(PCB_FLAG_DISPLAYNAME, Via)) - EraseViaName(Via); - EraseFlags(&Via->Flags); -} - -/* --------------------------------------------------------------------------- - * erase a ratline - */ -void EraseRat(RatTypePtr Rat) -{ - if (TEST_FLAG(PCB_FLAG_VIA, Rat)) { - Coord w = Rat->Thickness; - - BoxType b; - - b.X1 = Rat->Point1.X - w * 2 - w / 2; - b.X2 = Rat->Point1.X + w * 2 + w / 2; - b.Y1 = Rat->Point1.Y - w * 2 - w / 2; - b.Y2 = Rat->Point1.Y + w * 2 + w / 2; - pcb_draw_invalidate(&b); - } - else - EraseLine((LineType *) Rat); - EraseFlags(&Rat->Flags); -} - - -/* --------------------------------------------------------------------------- - * erase a via name - */ -void EraseViaName(PinTypePtr Via) -{ - GatherPVName(Via); -} - -/* --------------------------------------------------------------------------- - * erase a pad object - */ -void ErasePad(PadTypePtr Pad) -{ - pcb_draw_invalidate(Pad); - if (TEST_FLAG(PCB_FLAG_DISPLAYNAME, Pad)) - ErasePadName(Pad); - EraseFlags(&Pad->Flags); -} - -/* --------------------------------------------------------------------------- - * erase a pad name - */ -void ErasePadName(PadTypePtr Pad) -{ - GatherPadName(Pad); -} - -/* --------------------------------------------------------------------------- - * erase a pin object - */ -void ErasePin(PinTypePtr Pin) -{ - pcb_draw_invalidate(Pin); - if (TEST_FLAG(PCB_FLAG_DISPLAYNAME, Pin)) - ErasePinName(Pin); - EraseFlags(&Pin->Flags); -} - -/* --------------------------------------------------------------------------- - * erase a pin name - */ -void ErasePinName(PinTypePtr Pin) -{ - GatherPVName(Pin); -} - -/* --------------------------------------------------------------------------- - * erases a line on a layer - */ -void EraseLine(LineTypePtr Line) -{ - pcb_draw_invalidate(Line); - EraseFlags(&Line->Flags); -} - -/* --------------------------------------------------------------------------- - * erases an arc on a layer - */ -void EraseArc(ArcTypePtr Arc) -{ - if (!Arc->Thickness) - return; - pcb_draw_invalidate(Arc); - EraseFlags(&Arc->Flags); -} - -/* --------------------------------------------------------------------------- - * erases a text on a layer - */ -void EraseText(LayerTypePtr Layer, TextTypePtr Text) -{ - pcb_draw_invalidate(Text); -} - -/* --------------------------------------------------------------------------- - * erases a polygon on a layer - */ -void ErasePolygon(PolygonTypePtr Polygon) -{ - pcb_draw_invalidate(Polygon); - EraseFlags(&Polygon->Flags); -} - -/* --------------------------------------------------------------------------- - * erases an element - */ -void EraseElement(ElementTypePtr Element) -{ - ELEMENTLINE_LOOP(Element); - { - EraseLine(line); - } - END_LOOP; - ARC_LOOP(Element); - { - EraseArc(arc); - } - END_LOOP; - EraseElementName(Element); - EraseElementPinsAndPads(Element); - EraseFlags(&Element->Flags); -} - -/* --------------------------------------------------------------------------- - * erases all pins and pads of an element - */ -void EraseElementPinsAndPads(ElementTypePtr Element) -{ - PIN_LOOP(Element); - { - ErasePin(pin); - } - END_LOOP; - PAD_LOOP(Element); - { - ErasePad(pad); - } - END_LOOP; -} - -/* --------------------------------------------------------------------------- - * erases the name of an element - */ -void EraseElementName(ElementTypePtr Element) -{ - if (TEST_FLAG(PCB_FLAG_HIDENAME, Element)) { - return; - } - DrawText(NULL, &ELEMENT_TEXT(PCB, Element)); -} - - void EraseObject(int type, void *lptr, void *ptr) { switch (type) { @@ -957,13 +572,6 @@ } } -static void draw_element(ElementTypePtr element) -{ - draw_element_package(element); - draw_element_name(element); - draw_element_pins_and_pads(element); -} - /* --------------------------------------------------------------------------- * HID drawing callback. */ Index: trunk/src/obj_arc.c =================================================================== --- trunk/src/obj_arc.c (revision 4627) +++ trunk/src/obj_arc.c (revision 4628) @@ -595,3 +595,17 @@ draw_arc((LayerTypePtr) cl, (ArcTypePtr) b); return R_DIR_FOUND_CONTINUE; } + +/* erases an arc on a layer */ +void EraseArc(ArcTypePtr Arc) +{ + if (!Arc->Thickness) + return; + pcb_draw_invalidate(Arc); + EraseFlags(&Arc->Flags); +} + +void DrawArc(LayerTypePtr Layer, ArcTypePtr Arc) +{ + pcb_draw_invalidate(Arc); +} Index: trunk/src/obj_arc_draw.h =================================================================== --- trunk/src/obj_arc_draw.h (revision 4627) +++ trunk/src/obj_arc_draw.h (revision 4628) @@ -29,3 +29,5 @@ void _draw_arc(ArcType * arc); void draw_arc(LayerType * layer, ArcType * arc); +void EraseArc(ArcTypePtr Arc); +void DrawArc(LayerTypePtr Layer, ArcTypePtr Arc); Index: trunk/src/obj_elem.c =================================================================== --- trunk/src/obj_elem.c (revision 4627) +++ trunk/src/obj_elem.c (revision 4628) @@ -1734,6 +1734,13 @@ END_LOOP; } +void draw_element(ElementTypePtr element) +{ + draw_element_package(element); + draw_element_name(element); + draw_element_pins_and_pads(element); +} + r_dir_t draw_element_callback(const BoxType * b, void *cl) { ElementTypePtr element = (ElementTypePtr) b; @@ -1789,3 +1796,86 @@ DrawEMark(element, element->MarkX, element->MarkY, !FRONT(element)); return R_DIR_FOUND_CONTINUE; } + +void EraseElement(ElementTypePtr Element) +{ + ELEMENTLINE_LOOP(Element); + { + EraseLine(line); + } + END_LOOP; + ARC_LOOP(Element); + { + EraseArc(arc); + } + END_LOOP; + EraseElementName(Element); + EraseElementPinsAndPads(Element); + EraseFlags(&Element->Flags); +} + +void EraseElementPinsAndPads(ElementTypePtr Element) +{ + PIN_LOOP(Element); + { + ErasePin(pin); + } + END_LOOP; + PAD_LOOP(Element); + { + ErasePad(pad); + } + END_LOOP; +} + +void EraseElementName(ElementTypePtr Element) +{ + if (TEST_FLAG(PCB_FLAG_HIDENAME, Element)) { + return; + } + DrawText(NULL, &ELEMENT_TEXT(PCB, Element)); +} + +void DrawElement(ElementTypePtr Element) +{ + DrawElementPackage(Element); + DrawElementName(Element); + DrawElementPinsAndPads(Element); +} + +void DrawElementName(ElementTypePtr Element) +{ + if (TEST_FLAG(PCB_FLAG_HIDENAME, Element)) + return; + DrawText(NULL, &ELEMENT_TEXT(PCB, Element)); +} + +void DrawElementPackage(ElementTypePtr Element) +{ + ELEMENTLINE_LOOP(Element); + { + DrawLine(NULL, line); + } + END_LOOP; + ARC_LOOP(Element); + { + DrawArc(NULL, arc); + } + END_LOOP; +} + +void DrawElementPinsAndPads(ElementTypePtr Element) +{ + PAD_LOOP(Element); + { + if (pcb_draw_doing_pinout || pcb_draw_doing_assy || FRONT(pad) || PCB->InvisibleObjectsOn) + DrawPad(pad); + } + END_LOOP; + PIN_LOOP(Element); + { + DrawPin(pin); + } + END_LOOP; +} + Index: trunk/src/obj_elem_draw.h =================================================================== --- trunk/src/obj_elem_draw.h (revision 4627) +++ trunk/src/obj_elem_draw.h (revision 4628) @@ -33,4 +33,13 @@ void draw_element_package(ElementType * element); void draw_element_name(ElementType * element); void draw_element_pins_and_pads(ElementType * element); +void draw_element(ElementTypePtr element); +void EraseElement(ElementTypePtr Element); +void EraseElementPinsAndPads(ElementTypePtr Element); +void EraseElementName(ElementTypePtr Element); + +void DrawElement(ElementTypePtr Element); +void DrawElementName(ElementTypePtr Element); +void DrawElementPackage(ElementTypePtr Element); +void DrawElementPinsAndPads(ElementTypePtr Element); Index: trunk/src/obj_line.c =================================================================== --- trunk/src/obj_line.c (revision 4627) +++ trunk/src/obj_line.c (revision 4628) @@ -743,3 +743,16 @@ draw_line((LayerType *) cl, (LineType *) b); return R_DIR_FOUND_CONTINUE; } + +/* erases a line on a layer */ +void EraseLine(LineTypePtr Line) +{ + pcb_draw_invalidate(Line); + EraseFlags(&Line->Flags); +} + +void DrawLine(LayerTypePtr Layer, LineTypePtr Line) +{ + pcb_draw_invalidate(Line); +} + Index: trunk/src/obj_line_draw.h =================================================================== --- trunk/src/obj_line_draw.h (revision 4627) +++ trunk/src/obj_line_draw.h (revision 4628) @@ -28,4 +28,5 @@ void _draw_line(LineType * line); void draw_line(LayerType * layer, LineType * line); r_dir_t draw_line_callback(const BoxType * b, void *cl); - +void EraseLine(LineTypePtr Line); +void DrawLine(LayerTypePtr Layer, LineTypePtr Line); Index: trunk/src/obj_pad.c =================================================================== --- trunk/src/obj_pad.c (revision 4627) +++ trunk/src/obj_pad.c (revision 4628) @@ -412,3 +412,56 @@ ENDALL_LOOP; } +static void GatherPadName(PadTypePtr Pad) +{ + BoxType box; + pcb_bool vert; + + /* should text be vertical ? */ + vert = (Pad->Point1.X == Pad->Point2.X); + + if (vert) { + box.X1 = Pad->Point1.X - Pad->Thickness / 2; + box.Y1 = MAX(Pad->Point1.Y, Pad->Point2.Y) + Pad->Thickness / 2; + box.X1 += conf_core.appearance.pinout.text_offset_y; + box.Y1 -= conf_core.appearance.pinout.text_offset_x; + box.X2 = box.X1; + box.Y2 = box.Y1; + } + else { + box.X1 = MIN(Pad->Point1.X, Pad->Point2.X) - Pad->Thickness / 2; + box.Y1 = Pad->Point1.Y - Pad->Thickness / 2; + box.X1 += conf_core.appearance.pinout.text_offset_x; + box.Y1 += conf_core.appearance.pinout.text_offset_y; + box.X2 = box.X1; + box.Y2 = box.Y1; + } + + pcb_draw_invalidate(&box); + return; +} + +void ErasePad(PadTypePtr Pad) +{ + pcb_draw_invalidate(Pad); + if (TEST_FLAG(PCB_FLAG_DISPLAYNAME, Pad)) + ErasePadName(Pad); + EraseFlags(&Pad->Flags); +} + +void ErasePadName(PadTypePtr Pad) +{ + GatherPadName(Pad); +} + +void DrawPad(PadTypePtr Pad) +{ + pcb_draw_invalidate(Pad); + if (pcb_draw_doing_pinout || TEST_FLAG(PCB_FLAG_DISPLAYNAME, Pad)) + DrawPadName(Pad); +} + +void DrawPadName(PadTypePtr Pad) +{ + GatherPadName(Pad); +} Index: trunk/src/obj_pad_draw.h =================================================================== --- trunk/src/obj_pad_draw.h (revision 4627) +++ trunk/src/obj_pad_draw.h (revision 4628) @@ -30,4 +30,7 @@ void draw_pad(PadType * pad); void DrawPaste(int side, const BoxType * drawn_area); - +void ErasePad(PadTypePtr Pad); +void ErasePadName(PadTypePtr Pad); +void DrawPad(PadTypePtr Pad); +void DrawPadName(PadTypePtr Pad); Index: trunk/src/obj_pinvia.c =================================================================== --- trunk/src/obj_pinvia.c (revision 4627) +++ trunk/src/obj_pinvia.c (revision 4628) @@ -933,3 +933,79 @@ } return R_DIR_FOUND_CONTINUE; } + +static void GatherPVName(PinTypePtr Ptr) +{ + BoxType box; + pcb_bool vert = TEST_FLAG(PCB_FLAG_EDGE2, Ptr); + + if (vert) { + box.X1 = Ptr->X - Ptr->Thickness / 2 + conf_core.appearance.pinout.text_offset_y; + box.Y1 = Ptr->Y - Ptr->DrillingHole / 2 - conf_core.appearance.pinout.text_offset_x; + } + else { + box.X1 = Ptr->X + Ptr->DrillingHole / 2 + conf_core.appearance.pinout.text_offset_x; + box.Y1 = Ptr->Y - Ptr->Thickness / 2 + conf_core.appearance.pinout.text_offset_y; + } + + if (vert) { + box.X2 = box.X1; + box.Y2 = box.Y1; + } + else { + box.X2 = box.X1; + box.Y2 = box.Y1; + } + pcb_draw_invalidate(&box); +} + +void EraseVia(PinTypePtr Via) +{ + pcb_draw_invalidate(Via); + if (TEST_FLAG(PCB_FLAG_DISPLAYNAME, Via)) + EraseViaName(Via); + EraseFlags(&Via->Flags); +} + +void EraseViaName(PinTypePtr Via) +{ + GatherPVName(Via); +} + +void ErasePin(PinTypePtr Pin) +{ + pcb_draw_invalidate(Pin); + if (TEST_FLAG(PCB_FLAG_DISPLAYNAME, Pin)) + ErasePinName(Pin); + EraseFlags(&Pin->Flags); +} + +void ErasePinName(PinTypePtr Pin) +{ + GatherPVName(Pin); +} + +void DrawVia(PinTypePtr Via) +{ + pcb_draw_invalidate(Via); + if (!TEST_FLAG(PCB_FLAG_HOLE, Via) && TEST_FLAG(PCB_FLAG_DISPLAYNAME, Via)) + DrawViaName(Via); +} + +void DrawViaName(PinTypePtr Via) +{ + GatherPVName(Via); +} + +void DrawPin(PinTypePtr Pin) +{ + pcb_draw_invalidate(Pin); + if ((!TEST_FLAG(PCB_FLAG_HOLE, Pin) && TEST_FLAG(PCB_FLAG_DISPLAYNAME, Pin)) + || pcb_draw_doing_pinout) + DrawPinName(Pin); +} + +void DrawPinName(PinTypePtr Pin) +{ + GatherPVName(Pin); +} Index: trunk/src/obj_pinvia_draw.h =================================================================== --- trunk/src/obj_pinvia_draw.h (revision 4627) +++ trunk/src/obj_pinvia_draw.h (revision 4628) @@ -30,3 +30,11 @@ r_dir_t draw_via_callback(const BoxType * b, void *cl); r_dir_t draw_hole_callback(const BoxType * b, void *cl); void draw_pin(PinTypePtr pin, pcb_bool draw_hole); +void EraseVia(PinTypePtr Via); +void EraseViaName(PinTypePtr Via); +void ErasePin(PinTypePtr Pin); +void ErasePinName(PinTypePtr Pin); +void DrawVia(PinTypePtr Via); +void DrawViaName(PinTypePtr Via); +void DrawPin(PinTypePtr Pin); +void DrawPinName(PinTypePtr Pin); Index: trunk/src/obj_poly.c =================================================================== --- trunk/src/obj_poly.c (revision 4627) +++ trunk/src/obj_poly.c (revision 4628) @@ -674,3 +674,15 @@ return R_DIR_FOUND_CONTINUE; } + +/* erases a polygon on a layer */ +void ErasePolygon(PolygonTypePtr Polygon) +{ + pcb_draw_invalidate(Polygon); + EraseFlags(&Polygon->Flags); +} + +void DrawPolygon(LayerTypePtr Layer, PolygonTypePtr Polygon) +{ + pcb_draw_invalidate(Polygon); +} Index: trunk/src/obj_poly_draw.h =================================================================== --- trunk/src/obj_poly_draw.h (revision 4627) +++ trunk/src/obj_poly_draw.h (revision 4628) @@ -32,4 +32,5 @@ }; r_dir_t draw_poly_callback(const BoxType * b, void *cl); - +void ErasePolygon(PolygonTypePtr Polygon); +void DrawPolygon(LayerTypePtr Layer, PolygonTypePtr Polygon); Index: trunk/src/obj_rat.c =================================================================== --- trunk/src/obj_rat.c (revision 4627) +++ trunk/src/obj_rat.c (revision 4628) @@ -248,3 +248,41 @@ _draw_line((LineType *) rat); return R_DIR_FOUND_CONTINUE; } + +void EraseRat(RatTypePtr Rat) +{ + if (TEST_FLAG(PCB_FLAG_VIA, Rat)) { + Coord w = Rat->Thickness; + + BoxType b; + + b.X1 = Rat->Point1.X - w * 2 - w / 2; + b.X2 = Rat->Point1.X + w * 2 + w / 2; + b.Y1 = Rat->Point1.Y - w * 2 - w / 2; + b.Y2 = Rat->Point1.Y + w * 2 + w / 2; + pcb_draw_invalidate(&b); + } + else + EraseLine((LineType *) Rat); + EraseFlags(&Rat->Flags); +} + +void DrawRat(RatTypePtr Rat) +{ + if (conf_core.appearance.rat_thickness < 20) + Rat->Thickness = pixel_slop * conf_core.appearance.rat_thickness; + /* rats.c set PCB_FLAG_VIA if this rat goes to a containing poly: draw a donut */ + if (TEST_FLAG(PCB_FLAG_VIA, Rat)) { + Coord w = Rat->Thickness; + + BoxType b; + + b.X1 = Rat->Point1.X - w * 2 - w / 2; + b.X2 = Rat->Point1.X + w * 2 + w / 2; + b.Y1 = Rat->Point1.Y - w * 2 - w / 2; + b.Y2 = Rat->Point1.Y + w * 2 + w / 2; + pcb_draw_invalidate(&b); + } + else + DrawLine(NULL, (LineType *) Rat); +} Index: trunk/src/obj_rat_draw.h =================================================================== --- trunk/src/obj_rat_draw.h (revision 4627) +++ trunk/src/obj_rat_draw.h (revision 4628) @@ -26,3 +26,5 @@ /*** Standard draw on rats ***/ r_dir_t draw_rat_callback(const BoxType * b, void *cl); +void EraseRat(RatTypePtr Rat); +void DrawRat(RatTypePtr Rat); Index: trunk/src/obj_text.c =================================================================== --- trunk/src/obj_text.c (revision 4627) +++ trunk/src/obj_text.c (revision 4628) @@ -557,3 +557,14 @@ DrawTextLowLevel(text, min_silk_line); return R_DIR_FOUND_CONTINUE; } + +/* erases a text on a layer */ +void EraseText(LayerTypePtr Layer, TextTypePtr Text) +{ + pcb_draw_invalidate(Text); +} + +void DrawText(LayerTypePtr Layer, TextTypePtr Text) +{ + pcb_draw_invalidate(Text); +} Index: trunk/src/obj_text_draw.h =================================================================== --- trunk/src/obj_text_draw.h (revision 4627) +++ trunk/src/obj_text_draw.h (revision 4628) @@ -28,4 +28,5 @@ #include "rtree.h" r_dir_t draw_text_callback(const BoxType * b, void *cl); void DrawTextLowLevel(TextTypePtr Text, Coord min_line_width); - +void EraseText(LayerTypePtr Layer, TextTypePtr Text); +void DrawText(LayerTypePtr Layer, TextTypePtr Text);