/* | 
|
 * Copyright (c) 1997, 1998, Oracle and/or its affiliates. All rights reserved. | 
|
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 
|
 * | 
|
 * This code is free software; you can redistribute it and/or modify it | 
|
 * under the terms of the GNU General Public License version 2 only, as | 
|
 * published by the Free Software Foundation.  Oracle designates this | 
|
 * particular file as subject to the "Classpath" exception as provided | 
|
 * by Oracle in the LICENSE file that accompanied this code. | 
|
 * | 
|
 * This code is distributed in the hope that it will be useful, but WITHOUT | 
|
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 
|
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | 
|
 * version 2 for more details (a copy is included in the LICENSE file that | 
|
 * accompanied this code). | 
|
 * | 
|
 * You should have received a copy of the GNU General Public License version | 
|
 * 2 along with this work; if not, write to the Free Software Foundation, | 
|
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | 
|
 * | 
|
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | 
|
 * or visit www.oracle.com if you need additional information or have any | 
|
 * questions. | 
|
*/  | 
|
package javax.swing;  | 
|
import java.awt.*;  | 
|
import java.awt.image.*;  | 
|
/** | 
|
 * An image filter that "disables" an image by turning | 
|
 * it into a grayscale image, and brightening the pixels | 
|
 * in the image. Used by buttons to create an image for | 
|
 * a disabled button. | 
|
 * | 
|
 * @author      Jeff Dinkins | 
|
 * @author      Tom Ball | 
|
 * @author      Jim Graham | 
|
*/  | 
|
public class GrayFilter extends RGBImageFilter {  | 
|
private boolean brighter;  | 
|
private int percent;  | 
|
    /** | 
|
     * Creates a disabled image | 
|
*/  | 
|
public static Image createDisabledImage (Image i) {  | 
|
GrayFilter filter = new GrayFilter(true, 50);  | 
|
ImageProducer prod = new FilteredImageSource(i.getSource(), filter);  | 
|
Image grayImage = Toolkit.getDefaultToolkit().createImage(prod);  | 
|
return grayImage;  | 
|
}  | 
|
    /** | 
|
     * Constructs a GrayFilter object that filters a color image to a | 
|
     * grayscale image. Used by buttons to create disabled ("grayed out") | 
|
     * button images. | 
|
     * | 
|
     * @param b  a boolean -- true if the pixels should be brightened | 
|
     * @param p  an int in the range 0..100 that determines the percentage | 
|
     *           of gray, where 100 is the darkest gray, and 0 is the lightest | 
|
*/  | 
|
    public GrayFilter(boolean b, int p) { | 
|
brighter = b;  | 
|
percent = p;  | 
|
// canFilterIndexColorModel indicates whether or not it is acceptable  | 
|
// to apply the color filtering of the filterRGB method to the color  | 
|
// table entries of an IndexColorModel object in lieu of pixel by pixel  | 
|
        // filtering. | 
|
canFilterIndexColorModel = true;  | 
|
}  | 
|
    /** | 
|
     * Overrides <code>RGBImageFilter.filterRGB</code>. | 
|
*/  | 
|
    public int filterRGB(int x, int y, int rgb) { | 
|
        // Use NTSC conversion formula. | 
|
int gray = (int)((0.30 * ((rgb >> 16) & 0xff) +  | 
|
0.59 * ((rgb >> 8) & 0xff) +  | 
|
0.11 * (rgb & 0xff)) / 3);  | 
|
if (brighter) {  | 
|
gray = (255 - ((255 - gray) * (100 - percent) / 100));  | 
|
        } else { | 
|
gray = (gray * (100 - percent) / 100);  | 
|
}  | 
|
if (gray < 0) gray = 0;  | 
|
if (gray > 255) gray = 255;  | 
|
return (rgb & 0xff000000) | (gray << 16) | (gray << 8) | (gray << 0);  | 
|
}  | 
|
}  |