⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 metalbumps.java

📁 Mobile 应用程序使用 Java Micro Edition (Java ME) 平台
💻 JAVA
字号:
/* * @(#)MetalBumps.java	1.26 05/11/17 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package javax.swing.plaf.metal;import java.awt.*;import java.awt.image.*;import javax.swing.*;import java.io.*;import java.util.*;/** * Implements the bumps used throughout the Metal Look and Feel. *  * @version 1.26 11/17/05 * @author Tom Santos * @author Steve Wilson */class MetalBumps implements Icon {    static final Color ALPHA = new Color(0, 0, 0, 0);    protected int xBumps;    protected int yBumps;    protected Color topColor;    protected Color shadowColor;    protected Color backColor;    protected static Vector buffers = new Vector();    protected BumpBuffer buffer;        public MetalBumps( Dimension bumpArea ) {        this( bumpArea.width, bumpArea.height );    }    public MetalBumps( int width, int height ) {        this(width, height, MetalLookAndFeel.getPrimaryControlHighlight(),             MetalLookAndFeel.getPrimaryControlDarkShadow(),             MetalLookAndFeel.getPrimaryControlShadow());    }    /**     * Creates MetalBumps of the specified size with the specified colors.     * If <code>newBackColor</code> is null, the background will be     * transparent.     */    public MetalBumps( int width, int height,		       Color newTopColor, Color newShadowColor, Color newBackColor ) {        setBumpArea( width, height );	setBumpColors( newTopColor, newShadowColor, newBackColor );    }    private BumpBuffer getBuffer(GraphicsConfiguration gc, Color aTopColor,                                 Color aShadowColor, Color aBackColor) {        if (buffer != null && buffer.hasSameConfiguration(                              gc, aTopColor, aShadowColor, aBackColor)) {            return buffer;        }        BumpBuffer result = null;        Enumeration elements = buffers.elements();	while ( elements.hasMoreElements() ) {	    BumpBuffer aBuffer = (BumpBuffer)elements.nextElement();	    if ( aBuffer.hasSameConfiguration(gc, aTopColor, aShadowColor,                                              aBackColor)) {	        result = aBuffer;		break;	    }	}        if (result == null) {            result = new BumpBuffer(gc, topColor, shadowColor, backColor);            buffers.addElement(result);        }	return result;    }    public void setBumpArea( Dimension bumpArea ) {        setBumpArea( bumpArea.width, bumpArea.height );    }    public void setBumpArea( int width, int height ) {        xBumps = width / 2;	yBumps = height / 2;    }    public void setBumpColors( Color newTopColor, Color newShadowColor, Color newBackColor ) {        topColor = newTopColor;	shadowColor = newShadowColor;        if (newBackColor == null) {            backColor = ALPHA;        }        else {            backColor = newBackColor;        }    }    public void paintIcon( Component c, Graphics g, int x, int y ) {        GraphicsConfiguration gc = (g instanceof Graphics2D) ?                                     (GraphicsConfiguration)((Graphics2D)g).                                     getDeviceConfiguration() : null;        buffer = getBuffer(gc, topColor, shadowColor, backColor);	int bufferWidth = buffer.getImageSize().width;	int bufferHeight = buffer.getImageSize().height;	int iconWidth = getIconWidth();	int iconHeight = getIconHeight();	int x2 = x + iconWidth;	int y2 = y + iconHeight;	int savex = x;	while (y < y2) {	    int h = Math.min(y2 - y, bufferHeight);	    for (x = savex; x < x2; x += bufferWidth) {		int w = Math.min(x2 - x, bufferWidth);		g.drawImage(buffer.getImage(),			    x, y, x+w, y+h,			    0, 0, w, h,			    null);	    }	    y += bufferHeight;	}    }    public int getIconWidth() {        return xBumps * 2;    }    public int getIconHeight() {        return yBumps * 2;    }}class BumpBuffer {    static final int IMAGE_SIZE = 64;    static Dimension imageSize = new Dimension( IMAGE_SIZE, IMAGE_SIZE );    transient Image image;    Color topColor;    Color shadowColor;    Color backColor;    private GraphicsConfiguration gc;    public BumpBuffer(GraphicsConfiguration gc, Color aTopColor,                      Color aShadowColor, Color aBackColor) {        this.gc = gc;	topColor = aTopColor;	shadowColor = aShadowColor;	backColor = aBackColor;        createImage();        fillBumpBuffer();    }    public boolean hasSameConfiguration(GraphicsConfiguration gc,                                        Color aTopColor, Color aShadowColor,                                        Color aBackColor) {        if (this.gc != null) {            if (!this.gc.equals(gc)) {                return false;            }        }        else if (gc != null) {            return false;        }	return topColor.equals( aTopColor )       &&	       shadowColor.equals( aShadowColor ) &&	       backColor.equals( aBackColor );    }    /**     * Returns the Image containing the bumps appropriate for the passed in     * <code>GraphicsConfiguration</code>.     */    public Image getImage() {        return image;    }    public Dimension getImageSize() {        return imageSize;    }    /**     * Paints the bumps into the current image.     */    private void fillBumpBuffer() {        Graphics g = image.getGraphics();	g.setColor( backColor );	g.fillRect( 0, 0, IMAGE_SIZE, IMAGE_SIZE );	g.setColor(topColor);	for (int x = 0; x < IMAGE_SIZE; x+=4) {	    for (int y = 0; y < IMAGE_SIZE; y+=4) {	        g.drawLine( x, y, x, y );		g.drawLine( x+2, y+2, x+2, y+2);	    }	}	g.setColor(shadowColor);	for (int x = 0; x < IMAGE_SIZE; x+=4) {	    for (int y = 0; y < IMAGE_SIZE; y+=4) {	        g.drawLine( x+1, y+1, x+1, y+1 );		g.drawLine( x+3, y+3, x+3, y+3);	    }	}	g.dispose();    }    /**     * Creates the image appropriate for the passed in     * <code>GraphicsConfiguration</code>, which may be null.     */    private void createImage() {        if (gc != null) {            image = gc.createCompatibleImage(IMAGE_SIZE, IMAGE_SIZE,                       (backColor != MetalBumps.ALPHA) ? Transparency.OPAQUE :                       Transparency.BITMASK);        }        else {            int cmap[] = { backColor.getRGB(), topColor.getRGB(),                           shadowColor.getRGB() };            IndexColorModel icm = new IndexColorModel(8, 3, cmap, 0, false,                      (backColor == MetalBumps.ALPHA) ? 0 : -1,                      DataBuffer.TYPE_BYTE);            image = new BufferedImage(IMAGE_SIZE, IMAGE_SIZE,                                      BufferedImage.TYPE_BYTE_INDEXED, icm);        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -