Example #1
0
File: bezier.c Project: GNOME/dia
static DiaObject *
bezierline_load(ObjectNode obj_node, int version, DiaContext *ctx)
{
  Bezierline *bezierline;
  BezierConn *bez;
  DiaObject *obj;
  AttributeNode attr;

  bezierline = g_new0(Bezierline, 1);
  bezierline->bez.object.enclosing_box = g_new0 (Rectangle, 1);

  bez = &bezierline->bez;
  obj = &bez->object;

  obj->type = &bezierline_type;
  obj->ops = &bezierline_ops;

  bezierconn_load(bez, obj_node, ctx);

  bezierline->line_color = color_black;
  attr = object_find_attribute(obj_node, "line_color");
  if (attr != NULL)
    data_color(attribute_first_data(attr), &bezierline->line_color, ctx);

  bezierline->line_width = 0.1;
  attr = object_find_attribute(obj_node, PROP_STDNAME_LINE_WIDTH);
  if (attr != NULL)
    bezierline->line_width = data_real(attribute_first_data(attr), ctx);

  bezierline->line_style = LINESTYLE_SOLID;
  attr = object_find_attribute(obj_node, "line_style");
  if (attr != NULL)
    bezierline->line_style = data_enum(attribute_first_data(attr), ctx);

  bezierline->line_join = LINEJOIN_MITER;
  attr = object_find_attribute(obj_node, "line_join");
  if (attr != NULL)
    bezierline->line_join = data_enum(attribute_first_data(attr), ctx);

  bezierline->line_caps = LINECAPS_BUTT;
  attr = object_find_attribute(obj_node, "line_caps");
  if (attr != NULL)
    bezierline->line_caps = data_enum(attribute_first_data(attr), ctx);

  bezierline->dashlength = DEFAULT_LINESTYLE_DASHLEN;
  attr = object_find_attribute(obj_node, "dashlength");
  if (attr != NULL)
    bezierline->dashlength = data_real(attribute_first_data(attr), ctx);

  load_arrow(obj_node, &bezierline->start_arrow, "start_arrow",
	     "start_arrow_length", "start_arrow_width", ctx);

  load_arrow(obj_node, &bezierline->end_arrow, "end_arrow",
	     "end_arrow_length", "end_arrow_width", ctx);

  bezierline->absolute_start_gap = 0.0;
  attr = object_find_attribute(obj_node, "absolute_start_gap");
  if (attr != NULL)
    bezierline->absolute_start_gap =  data_real(attribute_first_data(attr), ctx);
  bezierline->absolute_end_gap = 0.0;
  attr = object_find_attribute(obj_node, "absolute_end_gap");
  if (attr != NULL)
    bezierline->absolute_end_gap =  data_real(attribute_first_data(attr), ctx);

  /* if "screws up the bounding box if auto_gap" it must be fixed there
   * not by copying some meaningless bounding_box before this function call!
   * But the real fix is in connectionpoint.c(connpoint_is_autogap)
   */
  bezierline_update_data(bezierline);

  return &bezierline->bez.object;
}
Example #2
0
static Object *
bezierline_load(ObjectNode obj_node, int version, const char *filename)
{
    Bezierline *bezierline;
    BezierConn *bez;
    Object *obj;
    AttributeNode attr;

    bezierline = g_new(Bezierline, 1);

    bez = &bezierline->bez;
    obj = (Object *) bezierline;

    obj->type = &bezierline_type;
    obj->ops = &bezierline_ops;

    bezierconn_load(bez, obj_node);

    bezierline->line_color = color_black;
    attr = object_find_attribute(obj_node, "line_color");
    if (attr != NULL)
        data_color(attribute_first_data(attr), &bezierline->line_color);

    bezierline->line_width = 0.1;
    attr = object_find_attribute(obj_node, "line_width");
    if (attr != NULL)
        bezierline->line_width = data_real(attribute_first_data(attr));

    bezierline->line_style = LINESTYLE_SOLID;
    attr = object_find_attribute(obj_node, "line_style");
    if (attr != NULL)
        bezierline->line_style = data_enum(attribute_first_data(attr));

    bezierline->dashlength = DEFAULT_LINESTYLE_DASHLEN;
    attr = object_find_attribute(obj_node, "dashlength");
    if (attr != NULL)
        bezierline->dashlength = data_real(attribute_first_data(attr));

    bezierline->start_arrow.type = ARROW_NONE;
    bezierline->start_arrow.length = 0.8;
    bezierline->start_arrow.width = 0.8;
    attr = object_find_attribute(obj_node, "start_arrow");
    if (attr != NULL)
        bezierline->start_arrow.type = data_enum(attribute_first_data(attr));
    attr = object_find_attribute(obj_node, "start_arrow_length");
    if (attr != NULL)
        bezierline->start_arrow.length = data_real(attribute_first_data(attr));
    attr = object_find_attribute(obj_node, "start_arrow_width");
    if (attr != NULL)
        bezierline->start_arrow.width = data_real(attribute_first_data(attr));

    bezierline->end_arrow.type = ARROW_NONE;
    bezierline->end_arrow.length = 0.8;
    bezierline->end_arrow.width = 0.8;
    attr = object_find_attribute(obj_node, "end_arrow");
    if (attr != NULL)
        bezierline->end_arrow.type = data_enum(attribute_first_data(attr));
    attr = object_find_attribute(obj_node, "end_arrow_length");
    if (attr != NULL)
        bezierline->end_arrow.length = data_real(attribute_first_data(attr));
    attr = object_find_attribute(obj_node, "end_arrow_width");
    if (attr != NULL)
        bezierline->end_arrow.width = data_real(attribute_first_data(attr));

    bezierline_update_data(bezierline);

    return (Object *)bezierline;
}