static DiaObject * beziergon_create(Point *startpoint, void *user_data, Handle **handle1, Handle **handle2) { Beziergon *beziergon; BezierShape *bez; DiaObject *obj; Point defaultx = { 1.0, 0.0 }; Point defaulty = { 0.0, 1.0 }; beziergon = g_new0(Beziergon, 1); bez = &beziergon->bezier; obj = &bez->object; obj->type = &beziergon_type; obj->ops = &beziergon_ops; if (user_data == NULL) { beziershape_init(bez, 3); bez->bezier.points[0].p1 = *startpoint; bez->bezier.points[0].p3 = *startpoint; bez->bezier.points[2].p3 = *startpoint; bez->bezier.points[1].p1 = *startpoint; point_add(&bez->bezier.points[1].p1, &defaultx); bez->bezier.points[2].p2 = *startpoint; point_sub(&bez->bezier.points[2].p2, &defaultx); bez->bezier.points[1].p3 = *startpoint; point_add(&bez->bezier.points[1].p3, &defaulty); bez->bezier.points[1].p2 = bez->bezier.points[1].p3; point_add(&bez->bezier.points[1].p2, &defaultx); bez->bezier.points[2].p1 = bez->bezier.points[1].p3; point_sub(&bez->bezier.points[2].p1, &defaultx); } else { BezierCreateData *bcd = (BezierCreateData*)user_data; beziershape_init(bez, bcd->num_points); beziercommon_set_points (&bez->bezier, bcd->num_points, bcd->points); } beziergon->line_width = attributes_get_default_linewidth(); beziergon->line_color = attributes_get_foreground(); beziergon->inner_color = attributes_get_background(); attributes_get_default_line_style(&beziergon->line_style, &beziergon->dashlength); beziergon->line_join = LINEJOIN_MITER; beziergon->show_background = default_properties.show_background; beziergon_update_data(beziergon); *handle1 = bez->object.handles[5]; *handle2 = bez->object.handles[2]; return &beziergon->bezier.object; }
static DiaObject * bezierline_create(Point *startpoint, void *user_data, Handle **handle1, Handle **handle2) { Bezierline *bezierline; BezierConn *bez; DiaObject *obj; Point defaultlen = { .3, .3 }; 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; if (user_data == NULL) { bezierconn_init(bez, 2); bez->bezier.points[0].p1 = *startpoint; bez->bezier.points[1].p1 = *startpoint; point_add(&bez->bezier.points[1].p1, &defaultlen); bez->bezier.points[1].p2 = bez->bezier.points[1].p1; point_add(&bez->bezier.points[1].p2, &defaultlen); bez->bezier.points[1].p3 = bez->bezier.points[1].p2; point_add(&bez->bezier.points[1].p3, &defaultlen); } else { BezierCreateData *bcd = (BezierCreateData*)user_data; bezierconn_init(bez, bcd->num_points); beziercommon_set_points (&bez->bezier, bcd->num_points, bcd->points); } bezierline->line_width = attributes_get_default_linewidth(); bezierline->line_color = attributes_get_foreground(); attributes_get_default_line_style(&bezierline->line_style, &bezierline->dashlength); bezierline->line_join = LINEJOIN_MITER; bezierline->line_caps = LINECAPS_BUTT; bezierline->start_arrow = attributes_get_default_start_arrow(); bezierline->end_arrow = attributes_get_default_end_arrow(); *handle1 = bez->object.handles[0]; *handle2 = bez->object.handles[3]; bezierline_update_data(bezierline); return &bezierline->bez.object; }