avshap: (sad_pic)
avshap ([personal profile] avshap) wrote2013-07-24 06:06 pm

Быдлокодинга псто

Потихоньку ковыряюсь в коде gEDA и постепенно превращаюсь в нефритовый стержень. Вот так там рисуют просто линии:

static void eda_renderer_draw_line (EdaRenderer *renderer, OBJECT *object)
{
  eda_cairo_line (renderer->priv->cr, EDA_RENDERER_CAIRO_FLAGS (renderer),
                  object->line_end,
                  object->line_width,
                  object->line->x[0], object->line->y[0],
                  object->line->x[1], object->line->y[1]);
  eda_cairo_stroke (renderer->priv->cr, EDA_RENDERER_CAIRO_FLAGS (renderer),
                    object->line_type,
                    object->line_end,
                    EDA_RENDERER_STROKE_WIDTH (renderer, object->line_width),
                    object->line_length,
                    object->line_space);
}


А вот так — линии электрической связи (а также шины, для выводов УГО функция выглядит чуть сложнее, но стиль тот же самый):

static void eda_renderer_draw_net (EdaRenderer *renderer, OBJECT *object)
{
  eda_cairo_line (renderer->priv->cr, EDA_RENDERER_CAIRO_FLAGS (renderer),
                  END_SQUARE, NET_WIDTH,
                  object->line->x[0], object->line->y[0],
                  object->line->x[1], object->line->y[1]);
  eda_cairo_stroke (renderer->priv->cr, EDA_RENDERER_CAIRO_FLAGS (renderer),
                    TYPE_SOLID, END_SQUARE,
                    EDA_RENDERER_STROKE_WIDTH (renderer, NET_WIDTH),
                    -1, -1);
}


Кто-нибудь понял, нахера нужны три одинаковые функции? Если все эти line_width и line_end можно элементарно установить при создании объекта и обойтись одной единственной (ну, не совсем, но как там рисуются оконцовки и пересечения линий это отдельная песня) функцией для отрисовки.