public void endHandleDrag(Point2D aLocalPoint, PInputEvent aEvent) {
   PBoundsLocator l = (PBoundsLocator) getLocator();
   l.getNode().endResizeBounds();
 }
  public void dragHandle(PDimension aLocalDimension, PInputEvent aEvent) {
    PBoundsLocator l = (PBoundsLocator) getLocator();

    PNode n = l.getNode();
    PBounds b = n.getBounds();

    PNode parent = getParent();
    if (parent != n && parent instanceof PCamera) {
      ((PCamera) parent).localToView(aLocalDimension);
    }

    localToGlobal(aLocalDimension);
    n.globalToLocal(aLocalDimension);

    double dx = aLocalDimension.getWidth();
    double dy = aLocalDimension.getHeight();

    switch (l.getSide()) {
      case SwingConstants.NORTH:
        b.setRect(b.x, b.y + dy, b.width, b.height - dy);
        break;

      case SwingConstants.SOUTH:
        b.setRect(b.x, b.y, b.width, b.height + dy);
        break;

      case SwingConstants.EAST:
        b.setRect(b.x, b.y, b.width + dx, b.height);
        break;

      case SwingConstants.WEST:
        b.setRect(b.x + dx, b.y, b.width - dx, b.height);
        break;

      case SwingConstants.NORTH_WEST:
        b.setRect(b.x + dx, b.y + dy, b.width - dx, b.height - dy);
        break;

      case SwingConstants.SOUTH_WEST:
        b.setRect(b.x + dx, b.y, b.width - dx, b.height + dy);
        break;

      case SwingConstants.NORTH_EAST:
        b.setRect(b.x, b.y + dy, b.width + dx, b.height - dy);
        break;

      case SwingConstants.SOUTH_EAST:
        b.setRect(b.x, b.y, b.width + dx, b.height + dy);
        break;
    }

    boolean flipX = false;
    boolean flipY = false;

    if (b.width < 0) {
      flipX = true;
      b.width = -b.width;
      b.x -= b.width;
    }

    if (b.height < 0) {
      flipY = true;
      b.height = -b.height;
      b.y -= b.height;
    }

    if (flipX || flipY) {
      flipSiblingBoundsHandles(flipX, flipY);
    }

    n.setBounds(b);
  }