/** user_data is a struct polyline_create_data, containing an array of points and a count. If user_data is NULL, the startpoint is used and a 1x1 line is created. Otherwise, the startpoint is ignored. */ static DiaObject * polyline_create(Point *startpoint, void *user_data, Handle **handle1, Handle **handle2) { Polyline *polyline; PolyConn *poly; DiaObject *obj; Point defaultlen = { 1.0, 1.0 }; /*polyline_init_defaults();*/ polyline = g_malloc0(sizeof(Polyline)); poly = &polyline->poly; obj = &poly->object; obj->type = &polyline_type; obj->ops = &polyline_ops; if (user_data == NULL) { polyconn_init(poly, 2); poly->points[0] = *startpoint; poly->points[1] = *startpoint; point_add(&poly->points[1], &defaultlen); *handle1 = poly->object.handles[0]; *handle2 = poly->object.handles[1]; } else { MultipointCreateData *pcd = (MultipointCreateData *)user_data; polyconn_init(poly, pcd->num_points); /* Handles are set up by polyconn_init and polyconn_update_data */ polyconn_set_points(poly, pcd->num_points, pcd->points); *handle1 = poly->object.handles[0]; *handle2 = poly->object.handles[pcd->num_points-1]; } polyline->line_width = attributes_get_default_linewidth(); polyline->line_color = attributes_get_foreground(); attributes_get_default_line_style(&polyline->line_style, &polyline->dashlength); polyline->line_join = LINEJOIN_MITER; polyline->line_caps = LINECAPS_BUTT; polyline->start_arrow = attributes_get_default_start_arrow(); polyline->end_arrow = attributes_get_default_end_arrow(); polyline->corner_radius = 0.0; polyline_update_data(polyline); return &polyline->poly.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; }
static DiaObject * zigzagline_create(Point *startpoint, void *user_data, Handle **handle1, Handle **handle2) { Zigzagline *zigzagline; OrthConn *orth; DiaObject *obj; Point dummy = {0, 0}; /*zigzagline_init_defaults();*/ zigzagline = g_malloc0(sizeof(Zigzagline)); orth = &zigzagline->orth; obj = &orth->object; obj->type = &zigzagline_type; obj->ops = &zigzagline_ops; if (startpoint) orthconn_init(orth, startpoint); else orthconn_init(orth, &dummy); if (user_data) { MultipointCreateData *pcd = (MultipointCreateData *)user_data; orthconn_set_points (orth, pcd->num_points, pcd->points); } zigzagline->line_width = attributes_get_default_linewidth(); zigzagline->line_color = attributes_get_foreground(); attributes_get_default_line_style(&zigzagline->line_style, &zigzagline->dashlength); zigzagline->line_join = LINEJOIN_MITER; zigzagline->line_caps = LINECAPS_BUTT; zigzagline->start_arrow = attributes_get_default_start_arrow(); zigzagline->end_arrow = attributes_get_default_end_arrow(); zigzagline->corner_radius = 0.0; *handle1 = orth->handles[0]; *handle2 = orth->handles[orth->numpoints-2]; zigzagline_update_data(zigzagline); return &zigzagline->orth.object; }
static Object * arc_create(Point *startpoint, void *user_data, Handle **handle1, Handle **handle2) { Arc *arc; Connection *conn; Object *obj; Point defaultlen = { 1.0, 1.0 }; /*arc_init_defaults();*/ arc = g_malloc(sizeof(Arc)); arc->line_width = attributes_get_default_linewidth(); arc->curve_distance = 1.0; arc->arc_color = attributes_get_foreground(); attributes_get_default_line_style(&arc->line_style, &arc->dashlength); arc->start_arrow = attributes_get_default_start_arrow(); arc->end_arrow = attributes_get_default_end_arrow(); conn = &arc->connection; conn->endpoints[0] = *startpoint; conn->endpoints[1] = *startpoint; point_add(&conn->endpoints[1], &defaultlen); obj = (Object *) arc; obj->type = &arc_type;; obj->ops = &arc_ops; connection_init(conn, 3, 0); obj->handles[2] = &arc->middle_handle; arc->middle_handle.id = HANDLE_MIDDLE; arc->middle_handle.type = HANDLE_MINOR_CONTROL; arc->middle_handle.connect_type = HANDLE_NONCONNECTABLE; arc->middle_handle.connected_to = NULL; arc_update_data(arc); *handle1 = obj->handles[0]; *handle2 = obj->handles[1]; return (Object *)arc; }
static DiaObject * line_create(Point *startpoint, void *user_data, Handle **handle1, Handle **handle2) { Line *line; Connection *conn; DiaObject *obj; Point defaultlen = { 1.0, 1.0 }; line_init_defaults(); line = g_malloc0(sizeof(Line)); line->line_width = attributes_get_default_linewidth(); line->line_color = attributes_get_foreground(); line->absolute_start_gap = default_properties.absolute_start_gap; line->absolute_end_gap = default_properties.absolute_end_gap; conn = &line->connection; conn->endpoints[0] = *startpoint; conn->endpoints[1] = *startpoint; point_add(&conn->endpoints[1], &defaultlen); obj = &conn->object; obj->type = &line_type; obj->ops = &line_ops; connection_init(conn, 2, 0); line->cpl = connpointline_create(obj,1); attributes_get_default_line_style(&line->line_style, &line->dashlength); line->line_caps = LINECAPS_BUTT; line->start_arrow = attributes_get_default_start_arrow(); line->end_arrow = attributes_get_default_end_arrow(); line_update_data(line); *handle1 = obj->handles[0]; *handle2 = obj->handles[1]; return &line->connection.object; }
static Object * line_create(Point *startpoint, void *user_data, Handle **handle1, Handle **handle2) { Line *line; Connection *conn; Object *obj; Point defaultlen = { 1.0, 1.0 }; /*line_init_defaults();*/ line = g_malloc(sizeof(Line)); line->line_width = attributes_get_default_linewidth(); line->line_color = attributes_get_foreground(); conn = &line->connection; conn->endpoints[0] = *startpoint; conn->endpoints[1] = *startpoint; point_add(&conn->endpoints[1], &defaultlen); obj = (Object *) line; obj->type = &line_type; obj->ops = &line_ops; connection_init(conn, 2, 1); obj->connections[0] = &line->middle_point; line->middle_point.object = obj; line->middle_point.connected = NULL; attributes_get_default_line_style(&line->line_style, &line->dashlength); line->start_arrow = attributes_get_default_start_arrow(); line->end_arrow = attributes_get_default_end_arrow(); line_update_data(line); *handle1 = obj->handles[0]; *handle2 = obj->handles[1]; return (Object *)line; }
static Object * bezierline_create(Point *startpoint, void *user_data, Handle **handle1, Handle **handle2) { Bezierline *bezierline; BezierConn *bez; Object *obj; Point defaultlen = { .3, .3 }; /*bezierline_init_defaults();*/ bezierline = g_new(Bezierline, 1); bez = &bezierline->bez; obj = (Object *) bezierline; obj->type = &bezierline_type; obj->ops = &bezierline_ops; bezierconn_init(bez); bez->points[0].p1 = *startpoint; bez->points[1].p1 = *startpoint; point_add(&bez->points[1].p1, &defaultlen); bez->points[1].p2 = bez->points[1].p1; point_add(&bez->points[1].p2, &defaultlen); bez->points[1].p3 = bez->points[1].p2; point_add(&bez->points[1].p3, &defaultlen); bezierline_update_data(bezierline); bezierline->line_width = attributes_get_default_linewidth(); bezierline->line_color = attributes_get_foreground(); attributes_get_default_line_style(&bezierline->line_style, &bezierline->dashlength); 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]; return (Object *)bezierline; }
static DiaObject * arc_create(Point *startpoint, void *user_data, Handle **handle1, Handle **handle2) { Arc *arc; Connection *conn; DiaObject *obj; Point defaultlen = { 1.0, 1.0 }; arc = g_malloc0(sizeof(Arc)); arc->line_width = attributes_get_default_linewidth(); arc->curve_distance = 1.0; arc->arc_color = attributes_get_foreground(); attributes_get_default_line_style(&arc->line_style, &arc->dashlength); arc->line_caps = LINECAPS_BUTT; arc->start_arrow = attributes_get_default_start_arrow(); arc->end_arrow = attributes_get_default_end_arrow(); conn = &arc->connection; conn->endpoints[0] = *startpoint; conn->endpoints[1] = *startpoint; point_add(&conn->endpoints[1], &defaultlen); obj = &conn->object; obj->type = &arc_type;; obj->ops = &arc_ops; connection_init(conn, 4, 0); _arc_setup_handles (arc); arc_update_data(arc); *handle1 = obj->handles[0]; *handle2 = obj->handles[1]; return &arc->connection.object; }