
org.pushingpixels.lafwidget.preview.InternalFramePreviewPainter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of laf-widget Show documentation
Show all versions of laf-widget Show documentation
Laf-Widget provides support for common "feel" widgets in look-and-feel libraries
The newest version!
package org.pushingpixels.lafwidget.preview;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.WeakHashMap;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.plaf.basic.BasicInternalFrameUI;
import org.pushingpixels.lafwidget.LafWidgetUtilities;
public class InternalFramePreviewPainter extends DefaultPreviewPainter {
/**
* Snapshot map.
*/
private static WeakHashMap snapshots = new WeakHashMap();
public static void refreshSnaphost(JInternalFrame frame) {
if (!frame.isShowing())
return;
// Draw the current state of the internal frame to a
// temp image (w/o border and decorations). It would be nice
// to use Robot, but this frame may be partially obscured,
// so we take our chances that the frame will be properly
// drawn by the user code.
int frameWidth = frame.getWidth();
int frameHeight = frame.getHeight();
int dx = 0;
int dy = 0;
// Now we need to remove the border and the title pane :)
Border internalFrameBorder = UIManager
.getBorder("InternalFrame.border");
Insets borderInsets = internalFrameBorder.getBorderInsets(frame);
dx += borderInsets.left;
dy += borderInsets.top;
frameWidth -= (borderInsets.left + borderInsets.right);
frameHeight -= (borderInsets.top + borderInsets.bottom);
BasicInternalFrameUI frameUI = (BasicInternalFrameUI) frame.getUI();
JComponent frameTitlePane = frameUI.getNorthPane();
if (frameTitlePane != null) {
dy += frameTitlePane.getHeight();
frameHeight -= frameTitlePane.getHeight();
}
// fix for defect 112 - checking frame height and width
if ((frameWidth > 0) && (frameHeight > 0)) {
// draw frame (note the canvas translation)
BufferedImage tempCanvas = new BufferedImage(frameWidth,
frameHeight, BufferedImage.TYPE_INT_ARGB);
Graphics tempCanvasGraphics = tempCanvas.getGraphics();
tempCanvasGraphics.translate(-dx, -dy);
frame.paint(tempCanvasGraphics);
int maxWidth = UIManager.getInt("DesktopIcon.width");
int maxHeight = maxWidth;
// check if need to scale down
double coef = Math.min((double) maxWidth / (double) frameWidth,
(double) maxHeight / (double) frameHeight);
if (coef < 1.0) {
int sdWidth = (int) (coef * frameWidth);
// int sdHeight = (int) (coef * frameHeight);
// BufferedImage scaledDown = new BufferedImage(sdWidth,
// sdHeight,
// BufferedImage.TYPE_INT_ARGB);
// Graphics g = scaledDown.getGraphics();
// g.drawImage(tempCanvas, 0, 0, sdWidth, sdHeight, 0, 0,
// frameWidth, frameHeight, null);
BufferedImage scaledDown = LafWidgetUtilities.createThumbnail(
tempCanvas, sdWidth);
// System.out.println("Putting " + frame.hashCode() + "
// -> " + scaledDown.hashCode());
snapshots.put(frame, scaledDown);
} else {
// System.out.println("Putting " + frame.hashCode() + "
// -> " + snapshot.hashCode());
snapshots.put(frame, tempCanvas);
}
}
}
public void previewComponent(Container parent, Component component,
int componentIndex, Graphics g, int x, int y, int w, int h) {
BufferedImage preview = (BufferedImage) snapshots.get(component);
if (preview != null) {
g.drawImage(preview, x, y, null);
}
}
public Dimension getPreviewWindowDimension(Container parent,
Component component, int componentIndex) {
return new Dimension(UIManager.getInt("DesktopIcon.width"), UIManager
.getInt("DesktopIcon.width"));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy