void updateCursor(Control c, int dir) {
   if (!(c instanceof Sash)) {
     Cursor cursor = null;
     switch (dir) {
       case VERTICAL:
         if (fAncestorVisible) {
           if (fVSashCursor == null) fVSashCursor = new Cursor(c.getDisplay(), SWT.CURSOR_SIZENS);
           cursor = fVSashCursor;
         } else {
           if (fNormalCursor == null) fNormalCursor = new Cursor(c.getDisplay(), SWT.CURSOR_ARROW);
           cursor = fNormalCursor;
         }
         break;
       case HORIZONTAL:
         if (fHSashCursor == null) fHSashCursor = new Cursor(c.getDisplay(), SWT.CURSOR_SIZEWE);
         cursor = fHSashCursor;
         break;
       case VERTICAL + HORIZONTAL:
         if (fAncestorVisible) {
           if (fHVSashCursor == null)
             fHVSashCursor = new Cursor(c.getDisplay(), SWT.CURSOR_SIZEALL);
           cursor = fHVSashCursor;
         } else {
           if (fHSashCursor == null) fHSashCursor = new Cursor(c.getDisplay(), SWT.CURSOR_SIZEWE);
           cursor = fHSashCursor;
         }
         break;
     }
     if (cursor != null) c.setCursor(cursor);
   }
 }
    private void resize(MouseEvent e) {
      int dx = e.x - fX;
      int dy = e.y - fY;

      int centerWidth = fCenter.getSize().x;

      if (fWidth1 + dx > centerWidth && fWidth2 - dx > centerWidth) {
        fWidth1 += dx;
        fWidth2 -= dx;
        if ((fDirection & HORIZONTAL) != 0)
          fHSplit = (double) fWidth1 / (double) (fWidth1 + fWidth2);
      }
      if (fHeight1 + dy > centerWidth && fHeight2 - dy > centerWidth) {
        fHeight1 += dy;
        fHeight2 -= dy;
        if ((fDirection & VERTICAL) != 0)
          fVSplit = (double) fHeight1 / (double) (fHeight1 + fHeight2);
      }

      fComposite.layout(true);
      fControl.getDisplay().update();
    }