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')
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