From fce53e03ceeb12966ce53ae9116ddd9333791a50 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Krzysztof=20Ko=C5=9Bciuszkiewicz?= Date: Thu, 19 Jan 2012 00:02:21 +0100 Subject: [PATCH] libgeda: rewrite s_cue_output_single (cherry picked from commit b3dfc6c7124810598042a78fe2800f36699769c3) --- libgeda/src/s_cue.c | 50 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/libgeda/src/s_cue.c b/libgeda/src/s_cue.c index 5eb7eae05..fb0580c1e 100644 --- a/libgeda/src/s_cue.c +++ b/libgeda/src/s_cue.c @@ -232,28 +232,48 @@ void s_cue_output_lowlevel_midpoints(TOPLEVEL * toplevel, OBJECT * object, } } -/*! \todo Finish function documentation!!! - * \brief +/*! \brief Output cues for a single object + * * \par Function Description + * Cues are drawn on pins, nets and buses. + * Two types of cues are drawn: + * - endpoint cues (identifying unconnected ends of objects) + * - junction cues (identifying net/pin/bus junctions) * + * \param [in] toplevel The TOPLEVEL object + * \param [in] object The OBJECT to output cues for + * \param [in] fp The file handle to output to + * \param [in] type The type of output being produced */ void s_cue_output_single(TOPLEVEL * toplevel, OBJECT * object, FILE * fp, int type) { - if (!object) { - return; - } - - if (object->type != OBJ_NET && object->type != OBJ_PIN && - object->type != OBJ_BUS) { - return; + g_return_if_fail (object != NULL); + + switch (object->type) { + case (OBJ_NET): + /* + * s_cue_output_lowlevel handles both endpoints and junctions. + * The intention of the check is to skip drawing endpoint cues on nets + * that are not "fully connected". + * Junctions will be drawn correctly, as: + * - net-net junctions are handled by s_cue_output_lowlevel_midpoints + * - net-pin and pin-pin junctions are handled by case OBJ_PIN below + */ + if (!o_net_is_fully_connected (toplevel, object)) { + s_cue_output_lowlevel(toplevel, object, 0, fp, type); + s_cue_output_lowlevel(toplevel, object, 1, fp, type); } - - if (object->type != OBJ_NET - || ((object->type == OBJ_NET) - && !o_net_is_fully_connected (toplevel, object))) { - s_cue_output_lowlevel(toplevel, object, 0, fp, type); - s_cue_output_lowlevel(toplevel, object, 1, fp, type); + break; + case (OBJ_BUS): + s_cue_output_lowlevel(toplevel, object, 0, fp, type); + s_cue_output_lowlevel(toplevel, object, 1, fp, type); + break; + case (OBJ_PIN): + s_cue_output_lowlevel(toplevel, object, object->whichend, fp, type); + break; + default: + return; } s_cue_output_lowlevel_midpoints(toplevel, object, fp, type); } -- 2.11.4.GIT