inRightDragByParentNode method

IMindMapNode? inRightDragByParentNode(
  1. IMindMapNode node,
  2. Offset offset,
  3. IMindMapNode parentNode
)

Implementation

IMindMapNode? inRightDragByParentNode(
  IMindMapNode node,
  Offset offset,
  IMindMapNode parentNode,
) {
  Rect? rect = parentNode.getRightArea();

  if (rect != null) {
    if (rect.top * widget.getZoom() <= offset.dy &&
        rect.left * widget.getZoom() <= offset.dx &&
        rect.bottom * widget.getZoom() >= offset.dy &&
        rect.right * widget.getZoom() >= offset.dx) {
      _dragIndex = 0;
      if (parentNode.getRightItems().isNotEmpty) {
        _dragIndex = parentNode.getRightItems().length;
        int index = 0;

        for (IMindMapNode n in parentNode.getRightItems()) {
          Size? size = n.getSize();
          Offset o = n.getOffset() ?? Offset.zero;
          if (n.getRenderObject() is RenderBox) {
            Offset po = (n.getRenderObject() as RenderBox).localToGlobal(
              Offset.zero,
              ancestor: widget._renderObject,
            );
            o = Offset(o.dx + po.dx, o.dy + po.dy);
          }
          if (o.dy * widget.getZoom() +
                  (size?.height ?? 0) * widget.getZoom() / 2 >
              offset.dy) {
            _dragIndex = index;
            break;
          }
          index++;
        }
      }
      if (node.getParentNode() == parentNode &&
          node.getNodeType() == NodeType.right) {
        int i = parentNode.getRightItems().indexOf(node);
        if (i < _dragIndex && _dragIndex > 0) {
          _dragIndex--;
        }
      }
      return parentNode;
    }
    for (IMindMapNode cn in parentNode.getRightItems()) {
      IMindMapNode? n = inRightDragByParentNode(node, offset, cn);
      if (n != null) {
        return n;
      }
    }
  }
  return null;
}