@Override
    public void relocate(IFigure target) {
      Rectangle bounds;
      if (reference instanceof HandleBounds) {
        bounds = new PrecisionRectangle(((HandleBounds) reference).getHandleBounds());
      } else {
        bounds = new PrecisionRectangle(reference.getBounds());
        // authorized rectangle without handle bounds is smaller: if the icon would be exactly on
        // one of the corners,
        // it would trigger an enlargement of the figure, followed by a reposition, i.e. an endless
        // loop.
        bounds.x++;
        bounds.y++;
        bounds.width -= 2;
        bounds.height -= 2;
      }

      reference.translateToAbsolute(bounds);
      target.translateToRelative(bounds);

      Point pTR = bounds.getTopRight();
      Point pTL = bounds.getTopLeft();
      Point pDecoration = new Point(pTR);

      int decorationX = pTR.x - target.getSize().width - rightMargin;
      if (decorationX > pTL.x) {
        // only set position, if it is inside the figure, i.e. bigger than left margin
        pDecoration.setX(decorationX);
      } else {
        pDecoration.setX(pTL.x);
      }
      target.setLocation(pDecoration);
    }
Esempio n. 2
0
  public Insets getInsets(IFigure figure) {
    Dimension size = figure.getSize();
    int semiMajorAxis = (int) Math.ceil(size.width / 2.0);
    int semiMinorAxis = (int) Math.ceil(size.height / 2.0);

    int linearEccentricity =
        (int) Math.ceil(Math.sqrt(semiMajorAxis * semiMajorAxis - semiMinorAxis * semiMinorAxis));
    int left = semiMajorAxis - linearEccentricity;

    int semiLatusRectum = (int) Math.ceil((semiMinorAxis * semiMinorAxis) / semiMajorAxis);
    int top = semiMinorAxis - semiLatusRectum;

    return new Insets(top, left, top, left);
  }
  /**
   * @param node a node
   * @return the size of the figure associated to this node
   */
  private Dimension getFigureSize(AbstractNode node) {

    IFigure fig = this.nodeToFigure.get(node);
    int width, height;
    if (fig != null) {
      width = fig.getSize().width;
      height = fig.getSize().height;

    } else {
      width = GRID_CELL_DEFAULT_WIDTH;
      ;
      height = GRID_CELL_DEFAULT_HEIGHT;
      PetalsEipPlugin.log(
          "No figure was found for the node "
              + node.getId()
              + " (EIP chain: "
              + node.getEipChain().getTitle()
              + " ).",
          IStatus.ERROR);
    }

    return new Dimension(width, height);
  }
 /*
  * (non-Javadoc)
  *
  * @see org.xmind.ui.tools.DummyCreateTool#doCreateDummy()
  */
 protected IFigure doCreateDummy() {
   if (branchDummy == null) {
     branchDummy = new BranchDummy(getTargetViewer(), true);
     branchDummy.getTopic().setTitleText(MindMapMessages.TitleText_FloatingTopic);
     pack();
   }
   IFigure figure = branchDummy.getBranch().getFigure();
   if (getCursorPosition() != null) {
     if (figure instanceof IReferencedFigure) {
       ((IReferencedFigure) figure).setReference(getCursorPosition());
     } else {
       Dimension size = figure.getSize();
       figure.setLocation(getCursorPosition().getTranslated(-size.width / 2, -size.height / 2));
     }
   }
   return figure;
 }