From bd639caa0bbf010c415d197b93d0f30a6cb8f1e4 Mon Sep 17 00:00:00 2001 From: Pacien TRAN-GIRARD Date: Thu, 27 Feb 2014 14:53:05 +0100 Subject: Code refactoring to match MVC --- .../wordpress/tipsforjava/swing/StretchIcon.java | 372 +++++++++++++++++++++ 1 file changed, 372 insertions(+) create mode 100644 src/com/wordpress/tipsforjava/swing/StretchIcon.java (limited to 'src/com/wordpress') diff --git a/src/com/wordpress/tipsforjava/swing/StretchIcon.java b/src/com/wordpress/tipsforjava/swing/StretchIcon.java new file mode 100644 index 0000000..667f1cd --- /dev/null +++ b/src/com/wordpress/tipsforjava/swing/StretchIcon.java @@ -0,0 +1,372 @@ +/** + * @(#)StretchIcon.java 1.0 03/27/12 + */ +package com.wordpress.tipsforjava.swing; + +import java.awt.Component; +import java.awt.Container; +import java.awt.Graphics; +import java.awt.Image; +import java.awt.Insets; +import java.awt.image.ImageObserver; +import java.net.URL; +import javax.swing.ImageIcon; + +/** + * An Icon that scales its image to fill the component area, + * excluding any border or insets, optionally maintaining the image's aspect + * ratio by padding and centering the scaled image horizontally or vertically. + *

+ * The class is a drop-in replacement for ImageIcon. + *

+ * As the size of the Icon is determined by the size of the component in which + * it is displayed, StretchIcon must only be used in conjunction + * with a component and layout that does not depend on the size of the + * component's Icon. + * + * @version 1.0 03/22/12 + * @author Darryl + */ +public class StretchIcon extends ImageIcon { + + /** + * Determines whether the aspect ratio of the image is maintained. Set to + * false to distort the image to fill the component. + */ + protected boolean proportionate = true; + + /** + * Creates a StretchIcon from an array of bytes. + * + * @param imageData + * an array of pixels in an image format supported by the AWT + * Toolkit, such as GIF, JPEG, or (as of 1.3) PNG + * + * @see ImageIcon#ImageIcon(byte[]) + */ + public StretchIcon(byte[] imageData) { + super(imageData); + } + + /** + * Creates a StretchIcon from an array of bytes with the + * specified behavior. + * + * @param imageData + * an array of pixels in an image format supported by the AWT + * Toolkit, such as GIF, JPEG, or (as of 1.3) PNG + * @param proportionate + * true to retain the image's aspect ratio, + * false to allow distortion of the image to fill + * the component. + * + * @see ImageIcon#ImageIcon(byte[]) + */ + public StretchIcon(byte[] imageData, boolean proportionate) { + super(imageData); + this.proportionate = proportionate; + } + + /** + * Creates a StretchIcon from an array of bytes. + * + * @param imageData + * an array of pixels in an image format supported by the AWT + * Toolkit, such as GIF, JPEG, or (as of 1.3) PNG + * @param description + * a brief textual description of the image + * + * @see ImageIcon#ImageIcon(byte[], java.lang.String) + */ + public StretchIcon(byte[] imageData, String description) { + super(imageData, description); + } + + /** + * Creates a StretchIcon from an array of bytes with the + * specified behavior. + * + * @see ImageIcon#ImageIcon(byte[]) + * @param imageData + * an array of pixels in an image format supported by the AWT + * Toolkit, such as GIF, JPEG, or (as of 1.3) PNG + * @param description + * a brief textual description of the image + * @param proportionate + * true to retain the image's aspect ratio, + * false to allow distortion of the image to fill + * the component. + * + * @see ImageIcon#ImageIcon(byte[], java.lang.String) + */ + public StretchIcon(byte[] imageData, String description, boolean proportionate) { + super(imageData, description); + this.proportionate = proportionate; + } + + /** + * Creates a StretchIcon from the image. + * + * @param image + * the image + * + * @see ImageIcon#ImageIcon(java.awt.Image) + */ + public StretchIcon(Image image) { + super(image); + } + + /** + * Creates a StretchIcon from the image with the specifiec behavior. + * + * @param image + * the image + * @param proportionate + * true to retain the image's aspect ratio, + * false to allow distortion of the image to fill + * the component. + * + * @see ImageIcon#ImageIcon(java.awt.Image) + */ + public StretchIcon(Image image, boolean proportionate) { + super(image); + this.proportionate = proportionate; + } + + /** + * Creates a StretchIcon from the image. + * + * @param image + * the image + * @param description + * a brief textual description of the image + * + * @see ImageIcon#ImageIcon(java.awt.Image, java.lang.String) + */ + public StretchIcon(Image image, String description) { + super(image, description); + } + + /** + * Creates a StretchIcon from the image with the specified behavior. + * + * @param image + * the image + * @param description + * a brief textual description of the image + * @param proportionate + * true to retain the image's aspect ratio, + * false to allow distortion of the image to fill + * the component. + * + * @see ImageIcon#ImageIcon(java.awt.Image, java.lang.String) + */ + public StretchIcon(Image image, String description, boolean proportionate) { + super(image, description); + this.proportionate = proportionate; + } + + /** + * Creates a StretchIcon from the specified file. + * + * @param filename + * a String specifying a filename or path + * + * @see ImageIcon#ImageIcon(java.lang.String) + */ + public StretchIcon(String filename) { + super(filename); + } + + /** + * Creates a StretchIcon from the specified file with the specified + * behavior. + * + * @param filename + * a String specifying a filename or path + * @param proportionate + * true to retain the image's aspect ratio, + * false to allow distortion of the image to fill + * the component. + * + * @see ImageIcon#ImageIcon(java.lang.String) + */ + public StretchIcon(String filename, boolean proportionate) { + super(filename); + this.proportionate = proportionate; + } + + /** + * Creates a StretchIcon from the specified file. + * + * @param filename + * a String specifying a filename or path + * @param description + * a brief textual description of the image + * + * @see ImageIcon#ImageIcon(java.lang.String, java.lang.String) + */ + public StretchIcon(String filename, String description) { + super(filename, description); + } + + /** + * Creates a StretchIcon from the specified file with the specified + * behavior. + * + * @param filename + * a String specifying a filename or path + * @param description + * a brief textual description of the image + * @param proportionate + * true to retain the image's aspect ratio, + * false to allow distortion of the image to fill + * the component. + * + * @see ImageIcon#ImageIcon(java.awt.Image, java.lang.String) + */ + public StretchIcon(String filename, String description, boolean proportionate) { + super(filename, description); + this.proportionate = proportionate; + } + + /** + * Creates a StretchIcon from the specified URL. + * + * @param location + * the URL for the image + * + * @see ImageIcon#ImageIcon(java.net.URL) + */ + public StretchIcon(URL location) { + super(location); + } + + /** + * Creates a StretchIcon from the specified URL with the specified behavior. + * + * @param location + * the URL for the image + * @param proportionate + * true to retain the image's aspect ratio, + * false to allow distortion of the image to fill + * the component. + * + * @see ImageIcon#ImageIcon(java.net.URL) + */ + public StretchIcon(URL location, boolean proportionate) { + super(location); + this.proportionate = proportionate; + } + + /** + * Creates a StretchIcon from the specified URL. + * + * @param location + * the URL for the image + * @param description + * a brief textual description of the image + * + * @see ImageIcon#ImageIcon(java.net.URL, java.lang.String) + */ + public StretchIcon(URL location, String description) { + super(location, description); + } + + /** + * Creates a StretchIcon from the specified URL with the specified behavior. + * + * @param location + * the URL for the image + * @param description + * a brief textual description of the image + * @param proportionate + * true to retain the image's aspect ratio, + * false to allow distortion of the image to fill + * the component. + * + * @see ImageIcon#ImageIcon(java.net.URL, java.lang.String) + */ + public StretchIcon(URL location, String description, boolean proportionate) { + super(location, description); + this.proportionate = proportionate; + } + + /** + * Paints the icon. The image is reduced or magnified to fit the component + * to which it is painted. + *

+ * If the proportion has not been specified, or has been specified as + * true, the aspect ratio of the image will be preserved by + * padding and centering the image horizontally or vertically. Otherwise the + * image may be distorted to fill the component it is painted to. + *

+ * If this icon has no image observer,this method uses the c + * component as the observer. + * + * @param c + * the component to which the Icon is painted. This is used as + * the observer if this icon has no image observer + * @param g + * the graphics context + * @param x + * not used. + * @param y + * not used. + * + * @see ImageIcon#paintIcon(java.awt.Component, java.awt.Graphics, int, int) + */ + @Override + public synchronized void paintIcon(Component c, Graphics g, int x, int y) { + if (getImage() == null) { + return; + } + Insets insets = ((Container) c).getInsets(); + x = insets.left; + y = insets.top; + + int w = c.getWidth() - x - insets.right; + int h = c.getHeight() - y - insets.bottom; + Image image = getImage(); + + if (proportionate) { + int iw = image.getWidth(c); + int ih = image.getHeight(c); + + if (iw * h < ih * w) { + iw = (h * iw) / ih; + x += (w - iw) / 2; + w = iw; + } else { + ih = (w * ih) / iw; + y += (h - ih) / 2; + h = ih; + } + } + + ImageObserver io = getImageObserver(); + g.drawImage(image, x, y, w, h, io == null ? c : io); + } + + /** + * Overridden to return 0. The size of this Icon is determined by the size + * of the component. + * + * @return 0 + */ + @Override + public int getIconWidth() { + return 0; + } + + /** + * Overridden to return 0. The size of this Icon is determined by the size + * of the component. + * + * @return 0 + */ + @Override + public int getIconHeight() { + return 0; + } +} \ No newline at end of file -- cgit v1.2.3