Esempio n. 1
0
  @Override
  public void drag(
      Collection<Direction> resizeDirection,
      int diffX,
      int diffY,
      Point mousePosBeforeDrag,
      boolean isShiftKeyDown,
      boolean firstDrag,
      StickableMap stickables,
      boolean undoable) {
    Rectangle oldRect = getRectangle();
    StickingPolygon stickingPolygonBeforeLocationChange = generateStickingBorder();
    String oldAddAttr = getAdditionalAttributes();
    if (resizeDirection.isEmpty()) { // Move GridElement
      setLocationDifference(diffX, diffY);
    } else { // Resize GridElement
      Rectangle rect = getRectangle();
      if (isShiftKeyDown && diagonalResize(resizeDirection)) { // Proportional Resize
        boolean mouseToRight = diffX > 0 && diffX > diffY;
        boolean mouseDown = diffY > 0 && diffY > diffX;
        boolean mouseLeft = diffX < 0 && diffX < diffY;
        boolean mouseUp = diffY < 0 && diffY < diffX;
        if (mouseToRight || mouseLeft) {
          diffY = diffX;
        }
        if (mouseDown || mouseUp) {
          diffX = diffY;
        }
      }
      if (resizeDirection.contains(Direction.LEFT) && resizeDirection.contains(Direction.RIGHT)) {
        rect.setX(rect.getX() - diffX / 2);
        rect.setWidth(Math.max(rect.getWidth() + diffX, minSize()));
      } else if (resizeDirection.contains(Direction.LEFT)) {
        int newWidth = rect.getWidth() - diffX;
        if (newWidth >= minSize()) {
          rect.setX(rect.getX() + diffX);
          rect.setWidth(newWidth);
        }
      } else if (resizeDirection.contains(Direction.RIGHT)) {
        rect.setWidth(Math.max(rect.getWidth() + diffX, minSize()));
      }

      if (resizeDirection.contains(Direction.UP)) {
        int newHeight = rect.getHeight() - diffY;
        if (newHeight >= minSize()) {
          rect.setY(rect.getY() + diffY);
          rect.setHeight(newHeight);
        }
      }
      if (resizeDirection.contains(Direction.DOWN)) {
        rect.setHeight(Math.max(rect.getHeight() + diffY, minSize()));
      }

      setRectangle(rect);
      updateModelFromText();
    }

    moveStickables(stickables, undoable, oldRect, stickingPolygonBeforeLocationChange, oldAddAttr);
  }