/** Enlarge the canvas if the user enlarges the window. */
 void resizeCanvas(int width, int height) {
   ImageWindow win = imp.getWindow();
   // IJ.log("resizeCanvas: "+srcRect+" "+imageWidth+"  "+imageHeight+" "+width+"  "+height+"
   // "+dstWidth+"  "+dstHeight+" "+win.maxBounds);
   if (!maxBoundsReset
       && (width > dstWidth || height > dstHeight)
       && win != null
       && win.maxBounds != null
       && width != win.maxBounds.width - 10) {
     if (resetMaxBoundsCount != 0)
       resetMaxBounds(); // Works around problem that prevented window from being larger than
                         // maximized size
     resetMaxBoundsCount++;
   }
   if (IJ.altKeyDown()) {
     fitToWindow();
     return;
   }
   if (srcRect.width < imageWidth || srcRect.height < imageHeight) {
     if (width > imageWidth * magnification) width = (int) (imageWidth * magnification);
     if (height > imageHeight * magnification) height = (int) (imageHeight * magnification);
     setDrawingSize(width, height);
     srcRect.width = (int) (dstWidth / magnification);
     srcRect.height = (int) (dstHeight / magnification);
     if ((srcRect.x + srcRect.width) > imageWidth) srcRect.x = imageWidth - srcRect.width;
     if ((srcRect.y + srcRect.height) > imageHeight) srcRect.y = imageHeight - srcRect.height;
     repaint();
   }
   // IJ.log("resizeCanvas2: "+srcRect+" "+dstWidth+"  "+dstHeight+" "+width+"  "+height);
 }
 protected Dimension canEnlarge(int newWidth, int newHeight) {
   // if ((flags&Event.CTRL_MASK)!=0 || IJ.controlKeyDown()) return null;
   ImageWindow win = imp.getWindow();
   if (win == null) return null;
   Rectangle r1 = win.getBounds();
   Insets insets = win.getInsets();
   Point loc = getLocation();
   if (loc.x > insets.left + 5 || loc.y > insets.top + 5) {
     r1.width = newWidth + insets.left + insets.right + 10;
     r1.height = newHeight + insets.top + insets.bottom + 10;
     if (win instanceof StackWindow) r1.height += 20;
   } else {
     r1.width = r1.width - dstWidth + newWidth + 10;
     r1.height = r1.height - dstHeight + newHeight + 10;
   }
   Rectangle max = win.getMaxWindow(r1.x, r1.y);
   boolean fitsHorizontally = r1.x + r1.width < max.x + max.width;
   boolean fitsVertically = r1.y + r1.height < max.y + max.height;
   if (fitsHorizontally && fitsVertically) return new Dimension(newWidth, newHeight);
   else if (fitsVertically && newHeight < dstWidth) return new Dimension(dstWidth, newHeight);
   else if (fitsHorizontally && newWidth < dstHeight) return new Dimension(newWidth, dstHeight);
   else return null;
 }
Beispiel #3
0
 void enlargeCanvas() {
   imp.unlock();
   if (imp.getStackSize() == 1) Undo.setup(Undo.COMPOUND_FILTER, imp);
   IJ.run("Select All");
   IJ.run("Rotate...", "angle=" + angle);
   Roi roi = imp.getRoi();
   Rectangle r = roi.getBounds();
   if (r.width < imp.getWidth()) r.width = imp.getWidth();
   if (r.height < imp.getHeight()) r.height = imp.getHeight();
   IJ.showStatus("Rotate: Enlarging...");
   IJ.run(
       "Canvas Size...",
       "width="
           + r.width
           + " height="
           + r.height
           + " position=Center "
           + (fillWithBackground ? "" : "zero"));
   IJ.showStatus("Rotating...");
 }