Пример #1
0
Файл: bezier.c Проект: GNOME/dia
static void
bezierline_save(Bezierline *bezierline, ObjectNode obj_node,
	        DiaContext *ctx)
{
  if (connpoint_is_autogap(bezierline->bez.object.handles[0]->connected_to) ||
      connpoint_is_autogap(bezierline->bez.object.handles[3*(bezierline->bez.bezier.num_points-1)]->connected_to) ||
      bezierline->absolute_start_gap || bezierline->absolute_end_gap) {
    Point gap_points[4];
    compute_gap_points(bezierline, gap_points);
    exchange_bez_gap_points(&bezierline->bez,gap_points);
    bezierconn_update_boundingbox(&bezierline->bez);
    exchange_bez_gap_points(&bezierline->bez,gap_points);
  }
  bezierconn_save(&bezierline->bez, obj_node, ctx);

  if (!color_equals(&bezierline->line_color, &color_black))
    data_add_color(new_attribute(obj_node, "line_color"),
		   &bezierline->line_color, ctx);

  if (bezierline->line_width != 0.1)
    data_add_real(new_attribute(obj_node, PROP_STDNAME_LINE_WIDTH),
		  bezierline->line_width, ctx);

  if (bezierline->line_style != LINESTYLE_SOLID)
    data_add_enum(new_attribute(obj_node, "line_style"),
		  bezierline->line_style, ctx);

  if (bezierline->line_style != LINESTYLE_SOLID &&
      bezierline->dashlength != DEFAULT_LINESTYLE_DASHLEN)
    data_add_real(new_attribute(obj_node, "dashlength"),
		  bezierline->dashlength, ctx);

  if (bezierline->line_join != LINEJOIN_MITER)
    data_add_enum(new_attribute(obj_node, "line_join"),
                  bezierline->line_join, ctx);
  if (bezierline->line_caps != LINECAPS_BUTT)
    data_add_enum(new_attribute(obj_node, "line_caps"),
                  bezierline->line_caps, ctx);

  if (bezierline->start_arrow.type != ARROW_NONE) {
    save_arrow(obj_node, &bezierline->start_arrow, "start_arrow",
	     "start_arrow_length", "start_arrow_width", ctx);
  }

  if (bezierline->end_arrow.type != ARROW_NONE) {
    save_arrow(obj_node, &bezierline->end_arrow, "end_arrow",
	     "end_arrow_length", "end_arrow_width", ctx);
  }

  if (bezierline->absolute_start_gap)
    data_add_real(new_attribute(obj_node, "absolute_start_gap"),
                 bezierline->absolute_start_gap, ctx);
  if (bezierline->absolute_end_gap)
    data_add_real(new_attribute(obj_node, "absolute_end_gap"),
                 bezierline->absolute_end_gap, ctx);
}
Пример #2
0
static void
bezierline_save(Bezierline *bezierline, ObjectNode obj_node,
                const char *filename)
{
    bezierconn_save(&bezierline->bez, obj_node);

    if (!color_equals(&bezierline->line_color, &color_black))
        data_add_color(new_attribute(obj_node, "line_color"),
                       &bezierline->line_color);

    if (bezierline->line_width != 0.1)
        data_add_real(new_attribute(obj_node, "line_width"),
                      bezierline->line_width);

    if (bezierline->line_style != LINESTYLE_SOLID)
        data_add_enum(new_attribute(obj_node, "line_style"),
                      bezierline->line_style);

    if (bezierline->line_style != LINESTYLE_SOLID &&
            bezierline->dashlength != DEFAULT_LINESTYLE_DASHLEN)
        data_add_real(new_attribute(obj_node, "dashlength"),
                      bezierline->dashlength);

    if (bezierline->start_arrow.type != ARROW_NONE) {
        data_add_enum(new_attribute(obj_node, "start_arrow"),
                      bezierline->start_arrow.type);
        data_add_real(new_attribute(obj_node, "start_arrow_length"),
                      bezierline->start_arrow.length);
        data_add_real(new_attribute(obj_node, "start_arrow_width"),
                      bezierline->start_arrow.width);
    }

    if (bezierline->end_arrow.type != ARROW_NONE) {
        data_add_enum(new_attribute(obj_node, "end_arrow"),
                      bezierline->end_arrow.type);
        data_add_real(new_attribute(obj_node, "end_arrow_length"),
                      bezierline->end_arrow.length);
        data_add_real(new_attribute(obj_node, "end_arrow_width"),
                      bezierline->end_arrow.width);
    }
}