/*
 * Copyright (c) 2010, 2013, 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 sun.java2d.xr;

import java.awt.*;

XRender color class.
Author:Clemens Eisserer
/** * XRender color class. * * @author Clemens Eisserer */
public class XRColor { public static final XRColor FULL_ALPHA = new XRColor(0xffff, 0, 0, 0); public static final XRColor NO_ALPHA = new XRColor(0, 0, 0, 0); int red, green, blue, alpha; public XRColor() { red = 0; green = 0; blue = 0; alpha = 0; } public XRColor(int alpha, int red, int green, int blue) { this.alpha = alpha; this.red = red; this.green = green; this.blue = blue; } public XRColor(Color color) { setColorValues(color); } public void setColorValues(Color color) { alpha = byteToXRColorValue(color.getAlpha()); red = byteToXRColorValue( (int)(color.getRed() * color.getAlpha() / 255.0)); green = byteToXRColorValue( (int)(color.getGreen() * color.getAlpha() / 255.0)); blue = byteToXRColorValue( (int)(color.getBlue() * color.getAlpha() / 255.0)); } public static int[] ARGBPrePixelToXRColors(int[] pixels) { int[] colorValues = new int[pixels.length * 4]; XRColor c = new XRColor(); for (int i = 0; i < pixels.length; i++) { c.setColorValues(pixels[i], true); colorValues[i * 4 + 0] = c.alpha; colorValues[i * 4 + 1] = c.red; colorValues[i * 4 + 2] = c.green; colorValues[i * 4 + 3] = c.blue; } return colorValues; } public void setColorValues(int pixel, boolean pre) { long pix = XRUtils.intToULong(pixel); alpha = (int) (((pix & 0xFF000000) >> 16) + 255); red = (int) (((pix & 0x00FF0000) >> 8) + 255); green = (int) (((pix & 0x0000FF00) >> 0) + 255); blue = (int) (((pix & 0x000000FF) << 8) + 255); if (alpha == 255) { alpha = 0; } if (!pre) { double alphaMult = XRUtils.XFixedToDouble(alpha); this.red = (int) (red * alphaMult); this.green = (int) (green * alphaMult); this.blue = (int) (blue * alphaMult); } } public static int byteToXRColorValue(int byteValue) { int xrValue = 0; if (byteValue != 0) { if (byteValue == 255) { xrValue = 0xffff; } else { xrValue = ((byteValue << 8) + 255); } } return xrValue; } public String toString(){ return "A:"+alpha+" R:"+red+" G:"+green+" B:"+blue; } public void setAlpha(int alpha) { this.alpha = alpha; } public int getAlpha() { return alpha; } public int getRed() { return red; } public int getGreen() { return green; } public int getBlue() { return blue; } }