static void remove_handles(BezierShape *bezier, int pos) { int i; DiaObject *obj; Handle *old_handle1, *old_handle2, *old_handle3; ConnectionPoint *old_cp1, *old_cp2; Point tmppoint; Point controlvector; controlvector.x=0; controlvector.y=0; g_assert(pos > 0); g_assert(pos < bezier->numpoints); obj = (DiaObject *)bezier; /* delete the points */ bezier->numpoints--; tmppoint = bezier->points[pos].p1; if (pos == bezier->numpoints) { controlvector = bezier->points[pos-1].p3; point_sub(&controlvector, &bezier->points[pos].p1); } for (i = pos; i < bezier->numpoints; i++) { bezier->points[i] = bezier->points[i+1]; bezier->corner_types[i] = bezier->corner_types[i+1]; } bezier->points[pos].p1 = tmppoint; if (pos == bezier->numpoints) { /* If this was the last point, we also need to move points[0] and the control point in points[1]. */ bezier->points[0].p1 = bezier->points[bezier->numpoints-1].p3; bezier->points[1].p1 = bezier->points[0].p1; point_sub(&bezier->points[1].p1, &controlvector); } bezier->points = g_realloc(bezier->points, bezier->numpoints * sizeof(BezPoint)); bezier->corner_types = g_realloc(bezier->corner_types, bezier->numpoints * sizeof(BezCornerType)); old_handle1 = obj->handles[3*pos-3]; old_handle2 = obj->handles[3*pos-2]; old_handle3 = obj->handles[3*pos-1]; object_remove_handle(&bezier->object, old_handle1); object_remove_handle(&bezier->object, old_handle2); object_remove_handle(&bezier->object, old_handle3); old_cp1 = obj->connections[2*pos-2]; old_cp2 = obj->connections[2*pos-1]; object_remove_connectionpoint(&bezier->object, old_cp1); object_remove_connectionpoint(&bezier->object, old_cp2); }
static void remove_handle(PolyConn *poly, int pos) { int i; DiaObject *obj; Handle *old_handle; obj = (DiaObject *)poly; if (pos==0) { obj->handles[1]->type = HANDLE_MAJOR_CONTROL; obj->handles[1]->id = HANDLE_MOVE_STARTPOINT; } if (pos==obj->num_handles-1) { obj->handles[obj->num_handles-2]->type = HANDLE_MAJOR_CONTROL; obj->handles[obj->num_handles-2]->id = HANDLE_MOVE_ENDPOINT; } /* delete the points */ poly->numpoints--; for (i=pos; i < poly->numpoints; i++) { poly->points[i] = poly->points[i+1]; } poly->points = g_realloc(poly->points, poly->numpoints*sizeof(Point)); old_handle = obj->handles[pos]; object_remove_handle(&poly->object, old_handle); }
/** Remove a trio of handles from a bezierconn. * @param bezier The bezierconn to remove handles from. * @param pos The position in the bezierpoint array to remove handles and * bezpoint at. */ static void remove_handles (BezierConn *bezier, int pos) { int i; DiaObject *obj; Handle *old_handle1, *old_handle2, *old_handle3; Point tmppoint; g_assert(pos > 0); obj = (DiaObject *)bezier; if (pos==obj->num_handles-1) { obj->handles[obj->num_handles-4]->type = HANDLE_MAJOR_CONTROL; obj->handles[obj->num_handles-4]->id = HANDLE_MOVE_ENDPOINT; } /* delete the points */ bezier->bezier.num_points--; tmppoint = bezier->bezier.points[pos].p1; for (i = pos; i < bezier->bezier.num_points; i++) { bezier->bezier.points[i] = bezier->bezier.points[i+1]; bezier->bezier.corner_types[i] = bezier->bezier.corner_types[i+1]; } bezier->bezier.points[pos].p1 = tmppoint; bezier->bezier.points = g_realloc(bezier->bezier.points, bezier->bezier.num_points*sizeof(BezPoint)); bezier->bezier.corner_types = g_realloc(bezier->bezier.corner_types, bezier->bezier.num_points * sizeof(BezCornerType)); old_handle1 = obj->handles[3*pos-2]; old_handle2 = obj->handles[3*pos-1]; old_handle3 = obj->handles[3*pos]; object_remove_handle(&bezier->object, old_handle1); object_remove_handle(&bezier->object, old_handle2); object_remove_handle(&bezier->object, old_handle3); }
static void aadlbox_remove_port(Aadlbox *aadlbox, Aadlport *port) { int i, j; for (i=0;i<aadlbox->num_ports;i++) { if (aadlbox->ports[i] == port) { object_remove_handle(&aadlbox->element.object, port->handle); for (j=i;j<aadlbox->num_ports-1;j++) { aadlbox->ports[j] = aadlbox->ports[j+1]; } object_remove_connectionpoint(&aadlbox->element.object, &port->in); object_remove_connectionpoint(&aadlbox->element.object, &port->out); aadlbox->num_ports--; aadlbox->ports = g_realloc(aadlbox->ports, sizeof(Aadlport *)*aadlbox->num_ports); break; } } }
static void bus_remove_handle(Bus *bus, Handle *handle) { int i, j; for (i=0;i<bus->num_handles;i++) { if (bus->handles[i] == handle) { object_remove_handle(&bus->connection.object, handle); for (j=i;j<bus->num_handles-1;j++) { bus->handles[j] = bus->handles[j+1]; bus->parallel_points[j] = bus->parallel_points[j+1]; } bus->num_handles--; bus->handles = g_realloc(bus->handles, sizeof(Handle *)*bus->num_handles); bus->parallel_points = g_realloc(bus->parallel_points, sizeof(Point)*bus->num_handles); break; } } }
static void remove_handle(PolyShape *poly, int pos) { int i; DiaObject *obj; Handle *old_handle; ConnectionPoint *old_cp1, *old_cp2; obj = (DiaObject *)poly; /* delete the points */ poly->numpoints--; for (i=pos; i < poly->numpoints; i++) { poly->points[i] = poly->points[i+1]; } poly->points = g_realloc(poly->points, poly->numpoints*sizeof(Point)); old_handle = obj->handles[pos]; old_cp1 = obj->connections[2*pos]; old_cp2 = obj->connections[2*pos+1]; object_remove_handle(&poly->object, old_handle); object_remove_connectionpoint(obj, old_cp1); object_remove_connectionpoint(obj, old_cp2); }