コード例 #1
0
ファイル: beziershape.c プロジェクト: krattai/monoflow
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);
}
コード例 #2
0
ファイル: poly_conn.c プロジェクト: AmiGanguli/dia
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);
}
コード例 #3
0
ファイル: bezier_conn.c プロジェクト: AmiGanguli/dia
/** 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);
}
コード例 #4
0
ファイル: aadlbox.c プロジェクト: UIKit0/dia
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;
    }
  }
}
コード例 #5
0
ファイル: bus.c プロジェクト: krattai/monoflow
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;
    }
  }
}
コード例 #6
0
ファイル: polyshape.c プロジェクト: AmiGanguli/dia
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);
}