283 lines
6.9 KiB
Java
283 lines
6.9 KiB
Java
![]() |
package gnu.javax.swing.text.html;
|
||
|
|
||
|
|
||
|
import java.awt.Color;
|
||
|
import java.awt.Component;
|
||
|
import java.awt.Graphics;
|
||
|
import java.io.Serializable;
|
||
|
|
||
|
import javax.swing.Icon;
|
||
|
import javax.swing.plaf.metal.MetalLookAndFeel;
|
||
|
|
||
|
/**
|
||
|
* Creates icons for ImageView. The icons reflect the basic ideas of the Sun's
|
||
|
* icons as they would be described in the text (sheet of paper with image and
|
||
|
* broken sheet of paper with image). They are not pixel to pixel identical and
|
||
|
* contain elements from the metal icon factory.
|
||
|
*
|
||
|
* @author Audrius Meskauskas (audriusa@bioinformatics.org)
|
||
|
*/
|
||
|
public class ImageViewIconFactory
|
||
|
{
|
||
|
private static Icon noImageIcon;
|
||
|
|
||
|
private static Icon loadingImageIcon;
|
||
|
|
||
|
/**
|
||
|
* This icon reflects the general concept (broken sheet of paper with
|
||
|
* image), but is currently not pixel to pixel identical with the Sun's
|
||
|
* implementation.
|
||
|
*/
|
||
|
public static class NoImageIcon implements Icon, Serializable
|
||
|
{
|
||
|
/**
|
||
|
* Creates a new icon.
|
||
|
*/
|
||
|
public NoImageIcon()
|
||
|
{
|
||
|
// Nothing to do here.
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the width of the icon, in pixels.
|
||
|
*
|
||
|
* @return The width of the icon.
|
||
|
*/
|
||
|
public int getIconWidth()
|
||
|
{
|
||
|
return 38;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the height of the icon, in pixels.
|
||
|
*
|
||
|
* @return The height of the icon.
|
||
|
*/
|
||
|
public int getIconHeight()
|
||
|
{
|
||
|
return 38;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Paints the icon using colors from the {@link MetalLookAndFeel}.
|
||
|
*
|
||
|
* @param c
|
||
|
* the component (ignored).
|
||
|
* @param g
|
||
|
* the graphics device.
|
||
|
* @param x
|
||
|
* the x-coordinate for the top-left of the icon.
|
||
|
* @param y
|
||
|
* the y-coordinate for the top-left of the icon.
|
||
|
*/
|
||
|
public void paintIcon(Component c, Graphics g, int x, int y)
|
||
|
{
|
||
|
// frame
|
||
|
Color savedColor = g.getColor();
|
||
|
|
||
|
g.setColor(MetalLookAndFeel.getBlack());
|
||
|
|
||
|
g.drawLine(x, y, x + 19, y);
|
||
|
|
||
|
g.drawLine(x, y + 1, x, y + 5);
|
||
|
g.drawLine(x, y + 13, x, y + 25);
|
||
|
|
||
|
g.drawLine(x, y + 25, x + 22, y + 25);
|
||
|
|
||
|
g.drawLine(x + 22, y + 25, x + 22, y + 21);
|
||
|
g.drawLine(x + 22, y + 13, x + 22, y + 6);
|
||
|
|
||
|
g.drawLine(x + 22, y + 6, x + 19, y);
|
||
|
|
||
|
g.drawLine(x + 17, y + 2, x + 21, y + 6);
|
||
|
|
||
|
g.drawLine(x + 18, y + 1, x + 19, y + 1);
|
||
|
|
||
|
g.setColor(MetalLookAndFeel.getControlShadow());
|
||
|
|
||
|
g.drawLine(x + 1, y + 1, x + 17, y + 1);
|
||
|
|
||
|
g.drawLine(x + 1, y + 1, x + 1, y + 5);
|
||
|
g.drawLine(x + 1, y + 13, x + 1, y + 24);
|
||
|
|
||
|
g.drawLine(x + 1, y + 24, x + 21, y + 24);
|
||
|
|
||
|
g.drawLine(x + 21, y + 24, x + 21, y + 21);
|
||
|
g.drawLine(x + 21, y + 13, x + 21, y + 7);
|
||
|
|
||
|
g.drawLine(x + 18, y + 2, x + 20, y + 4);
|
||
|
|
||
|
// Breaking line
|
||
|
|
||
|
// Shadow
|
||
|
g.drawLine(x + 1, y + 6, x + 20, y + 13);
|
||
|
g.drawLine(x + 1, y + 13, x + 20, y + 20);
|
||
|
|
||
|
// Edge
|
||
|
g.setColor(MetalLookAndFeel.getBlack());
|
||
|
g.drawLine(x, y + 6, x + 21, y + 14);
|
||
|
g.drawLine(x, y + 12, x + 21, y + 20);
|
||
|
|
||
|
// Picture
|
||
|
|
||
|
y += 1;
|
||
|
x += 3;
|
||
|
|
||
|
g.setColor(MetalLookAndFeel.getBlack());
|
||
|
|
||
|
// roof
|
||
|
g.drawLine(x + 4, y + 5, x + 8, y + 1);
|
||
|
g.drawLine(x + 8, y + 1, x + 15, y + 8);
|
||
|
|
||
|
// chimney
|
||
|
g.drawLine(x + 11, y + 2, x + 11, y + 4);
|
||
|
g.drawLine(x + 12, y + 2, x + 12, y + 5);
|
||
|
|
||
|
g.setColor(MetalLookAndFeel.getControlDarkShadow());
|
||
|
|
||
|
// roof paint
|
||
|
int xx = x + 8;
|
||
|
for (int i = 0; i < 4; i++)
|
||
|
g.drawLine(xx - i, y + 2 + i, xx + i, y + 2 + i);
|
||
|
g.fillRect(x + 4, y + 6, 9, 2);
|
||
|
|
||
|
// base of house
|
||
|
g.drawLine(x + 3, y + 14, x + 3, y + 18);
|
||
|
g.drawLine(x + 3, y + 18, x + 13, y + 18);
|
||
|
|
||
|
g.setColor(savedColor);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* This icon reflects the general concept (sheet of paper with image), but is
|
||
|
* currently not pixel to pixel identical with the Sun's implementation.
|
||
|
*/
|
||
|
public static class LoadingImageIcon implements Icon, Serializable
|
||
|
{
|
||
|
|
||
|
/**
|
||
|
* Creates a new icon.
|
||
|
*/
|
||
|
public LoadingImageIcon()
|
||
|
{
|
||
|
// Nothing to do here.
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the width of the icon, in pixels.
|
||
|
*
|
||
|
* @return The width of the icon.
|
||
|
*/
|
||
|
public int getIconWidth()
|
||
|
{
|
||
|
return 38;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the height of the icon, in pixels.
|
||
|
*
|
||
|
* @return The height of the icon.
|
||
|
*/
|
||
|
public int getIconHeight()
|
||
|
{
|
||
|
return 38;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Paints the icon using colors from the {@link MetalLookAndFeel}.
|
||
|
*
|
||
|
* @param c
|
||
|
* the component (ignored).
|
||
|
* @param g
|
||
|
* the graphics device.
|
||
|
* @param x
|
||
|
* the x-coordinate for the top-left of the icon.
|
||
|
* @param y
|
||
|
* the y-coordinate for the top-left of the icon.
|
||
|
*/
|
||
|
public void paintIcon(Component c, Graphics g, int x, int y)
|
||
|
{
|
||
|
// frame
|
||
|
Color savedColor = g.getColor();
|
||
|
|
||
|
g.setColor(Color.black);
|
||
|
g.drawLine(x, y, x + 19, y);
|
||
|
g.drawLine(x, y + 1, x, y + 25);
|
||
|
g.drawLine(x, y + 25, x + 22, y + 25);
|
||
|
g.drawLine(x + 22, y + 25, x + 22, y + 6);
|
||
|
g.drawLine(x + 22, y + 6, x + 19, y);
|
||
|
|
||
|
g.drawLine(x + 17, y + 2, x + 21, y + 6);
|
||
|
g.drawLine(x + 18, y + 1, x + 19, y + 1);
|
||
|
|
||
|
g.setColor(new Color(204, 204, 255));
|
||
|
|
||
|
g.drawLine(x + 1, y + 1, x + 17, y + 1);
|
||
|
g.drawLine(x + 1, y + 1, x + 1, y + 24);
|
||
|
g.drawLine(x + 1, y + 24, x + 21, y + 24);
|
||
|
g.drawLine(x + 21, y + 24, x + 21, y + 7);
|
||
|
g.drawLine(x + 18, y + 2, x + 20, y + 4);
|
||
|
|
||
|
// Picture (house)
|
||
|
|
||
|
y += 3;
|
||
|
x += 3;
|
||
|
|
||
|
g.setColor(MetalLookAndFeel.getBlack());
|
||
|
|
||
|
// roof
|
||
|
g.drawLine(x + 1, y + 8, x + 8, y + 1);
|
||
|
g.drawLine(x + 8, y + 1, x + 15, y + 8);
|
||
|
|
||
|
// base of house
|
||
|
g.drawLine(x + 3, y + 6, x + 3, y + 15);
|
||
|
g.drawLine(x + 3, y + 15, x + 13, y + 15);
|
||
|
g.drawLine(x + 13, y + 6, x + 13, y + 15);
|
||
|
|
||
|
// door frame
|
||
|
g.drawLine(x + 6, y + 9, x + 6, y + 15);
|
||
|
g.drawLine(x + 6, y + 9, x + 10, y + 9);
|
||
|
g.drawLine(x + 10, y + 9, x + 10, y + 15);
|
||
|
|
||
|
// chimney
|
||
|
g.drawLine(x + 11, y + 2, x + 11, y + 4);
|
||
|
g.drawLine(x + 12, y + 2, x + 12, y + 5);
|
||
|
|
||
|
g.setColor(MetalLookAndFeel.getControlDarkShadow());
|
||
|
|
||
|
// roof paint
|
||
|
int xx = x + 8;
|
||
|
for (int i = 0; i < 4; i++)
|
||
|
g.drawLine(xx - i, y + 2 + i, xx + i, y + 2 + i);
|
||
|
g.fillRect(x + 4, y + 6, 9, 2);
|
||
|
|
||
|
// door knob
|
||
|
g.drawLine(x + 9, y + 12, x + 9, y + 12);
|
||
|
|
||
|
// house paint
|
||
|
g.setColor(MetalLookAndFeel.getPrimaryControl());
|
||
|
g.drawLine(x + 4, y + 8, x + 12, y + 8);
|
||
|
g.fillRect(x + 4, y + 9, 2, 6);
|
||
|
g.fillRect(x + 11, y + 9, 2, 6);
|
||
|
|
||
|
g.setColor(savedColor);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static Icon getNoImageIcon()
|
||
|
{
|
||
|
if (noImageIcon == null)
|
||
|
noImageIcon = new NoImageIcon();
|
||
|
return noImageIcon;
|
||
|
}
|
||
|
|
||
|
public static Icon getLoadingImageIcon()
|
||
|
{
|
||
|
if (loadingImageIcon == null)
|
||
|
loadingImageIcon = new LoadingImageIcon();
|
||
|
return loadingImageIcon;
|
||
|
}
|
||
|
|
||
|
}
|