public SizeHandle(VertexView vertexview, GraphContext ctx) {
   graph = ctx.getGraph();
   vertex = vertexview;
   editing = graph.getEditingCell() == vertex.getCell();
   int sizeableAxis = GraphConstants.getSizeableAxis(vertex.getAllAttributes());
   if (sizeableAxis == GraphConstants.X_AXIS) cursors = xCursors;
   else if (sizeableAxis == GraphConstants.Y_AXIS) cursors = yCursors;
   else cursors = defaultCursors;
   // PortView Preview
   portViews = ctx.createTemporaryPortViews();
   initialBounds = (Rectangle2D) vertex.getBounds().clone();
   context = ctx;
   for (int i = 0; i < r.length; i++) r[i] = new Rectangle2D.Double();
   invalidate();
 }
 protected Rectangle2D computeBounds(MouseEvent event) {
   double left = initialBounds.getX();
   double right = initialBounds.getX() + initialBounds.getWidth() - 1;
   double top = initialBounds.getY();
   double bottom = initialBounds.getY() + initialBounds.getHeight() - 1;
   Point2D p = graph.fromScreen(graph.snap((Point2D) event.getPoint().clone()));
   // Not into negative coordinates
   p.setLocation(Math.max(0, p.getX()), Math.max(0, p.getY()));
   // Bottom row
   if (index > 4) bottom = p.getY();
   // Top row
   else if (index < 3) top = p.getY();
   // Left col
   if (index == 0 || index == 3 || index == 5) left = p.getX();
   // Right col
   else if (index == 2 || index == 4 || index == 7) right = p.getX();
   double width = right - left;
   double height = bottom - top;
   if (isConstrainedSizeEvent(event)
       || GraphConstants.isConstrained(vertex.getAllAttributes())) {
     if (index == 3 || index == 4 || index == 5) height = width;
     else if (index == 1 || index == 6 || index == 2 || index == 7) width = height;
     else {
       height = width;
       top = bottom - height;
     }
   }
   if (width < 0) { // Flip over left side
     left += width;
     width = Math.abs(width);
   }
   if (height < 0) { // Flip over top side
     top += height;
     height = Math.abs(height);
   }
   return new Rectangle2D.Double(left, top, width + 1, height + 1);
 }