6783910: (dav) java.awt.Color.brighter()/darker() methods make color opaque
Reviewed-by: art, yan
This commit is contained in:
parent
cf15a10d32
commit
efca767f82
@ -611,12 +611,15 @@ public class Color implements Paint, java.io.Serializable {
|
|||||||
* <p>
|
* <p>
|
||||||
* This method applies an arbitrary scale factor to each of the three RGB
|
* This method applies an arbitrary scale factor to each of the three RGB
|
||||||
* components of this <code>Color</code> to create a brighter version
|
* components of this <code>Color</code> to create a brighter version
|
||||||
* of this <code>Color</code>. Although <code>brighter</code> and
|
* of this <code>Color</code>.
|
||||||
|
* The {@code alpha} value is preserved.
|
||||||
|
* Although <code>brighter</code> and
|
||||||
* <code>darker</code> are inverse operations, the results of a
|
* <code>darker</code> are inverse operations, the results of a
|
||||||
* series of invocations of these two methods might be inconsistent
|
* series of invocations of these two methods might be inconsistent
|
||||||
* because of rounding errors.
|
* because of rounding errors.
|
||||||
* @return a new <code>Color</code> object that is
|
* @return a new <code>Color</code> object that is
|
||||||
* a brighter version of this <code>Color</code>.
|
* a brighter version of this <code>Color</code>
|
||||||
|
* with the same {@code alpha} value.
|
||||||
* @see java.awt.Color#darker
|
* @see java.awt.Color#darker
|
||||||
* @since JDK1.0
|
* @since JDK1.0
|
||||||
*/
|
*/
|
||||||
@ -624,6 +627,7 @@ public class Color implements Paint, java.io.Serializable {
|
|||||||
int r = getRed();
|
int r = getRed();
|
||||||
int g = getGreen();
|
int g = getGreen();
|
||||||
int b = getBlue();
|
int b = getBlue();
|
||||||
|
int alpha = getAlpha();
|
||||||
|
|
||||||
/* From 2D group:
|
/* From 2D group:
|
||||||
* 1. black.brighter() should return grey
|
* 1. black.brighter() should return grey
|
||||||
@ -632,7 +636,7 @@ public class Color implements Paint, java.io.Serializable {
|
|||||||
*/
|
*/
|
||||||
int i = (int)(1.0/(1.0-FACTOR));
|
int i = (int)(1.0/(1.0-FACTOR));
|
||||||
if ( r == 0 && g == 0 && b == 0) {
|
if ( r == 0 && g == 0 && b == 0) {
|
||||||
return new Color(i, i, i);
|
return new Color(i, i, i, alpha);
|
||||||
}
|
}
|
||||||
if ( r > 0 && r < i ) r = i;
|
if ( r > 0 && r < i ) r = i;
|
||||||
if ( g > 0 && g < i ) g = i;
|
if ( g > 0 && g < i ) g = i;
|
||||||
@ -640,7 +644,8 @@ public class Color implements Paint, java.io.Serializable {
|
|||||||
|
|
||||||
return new Color(Math.min((int)(r/FACTOR), 255),
|
return new Color(Math.min((int)(r/FACTOR), 255),
|
||||||
Math.min((int)(g/FACTOR), 255),
|
Math.min((int)(g/FACTOR), 255),
|
||||||
Math.min((int)(b/FACTOR), 255));
|
Math.min((int)(b/FACTOR), 255),
|
||||||
|
alpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -649,19 +654,23 @@ public class Color implements Paint, java.io.Serializable {
|
|||||||
* <p>
|
* <p>
|
||||||
* This method applies an arbitrary scale factor to each of the three RGB
|
* This method applies an arbitrary scale factor to each of the three RGB
|
||||||
* components of this <code>Color</code> to create a darker version of
|
* components of this <code>Color</code> to create a darker version of
|
||||||
* this <code>Color</code>. Although <code>brighter</code> and
|
* this <code>Color</code>.
|
||||||
|
* The {@code alpha} value is preserved.
|
||||||
|
* Although <code>brighter</code> and
|
||||||
* <code>darker</code> are inverse operations, the results of a series
|
* <code>darker</code> are inverse operations, the results of a series
|
||||||
* of invocations of these two methods might be inconsistent because
|
* of invocations of these two methods might be inconsistent because
|
||||||
* of rounding errors.
|
* of rounding errors.
|
||||||
* @return a new <code>Color</code> object that is
|
* @return a new <code>Color</code> object that is
|
||||||
* a darker version of this <code>Color</code>.
|
* a darker version of this <code>Color</code>
|
||||||
|
* with the same {@code alpha} value.
|
||||||
* @see java.awt.Color#brighter
|
* @see java.awt.Color#brighter
|
||||||
* @since JDK1.0
|
* @since JDK1.0
|
||||||
*/
|
*/
|
||||||
public Color darker() {
|
public Color darker() {
|
||||||
return new Color(Math.max((int)(getRed() *FACTOR), 0),
|
return new Color(Math.max((int)(getRed() *FACTOR), 0),
|
||||||
Math.max((int)(getGreen()*FACTOR), 0),
|
Math.max((int)(getGreen()*FACTOR), 0),
|
||||||
Math.max((int)(getBlue() *FACTOR), 0));
|
Math.max((int)(getBlue() *FACTOR), 0),
|
||||||
|
getAlpha());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
54
jdk/test/java/awt/Color/OpacityChange/OpacityChange.java
Normal file
54
jdk/test/java/awt/Color/OpacityChange/OpacityChange.java
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2010, 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.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
@test
|
||||||
|
@bug 6783910
|
||||||
|
@summary java.awt.Color.brighter()/darker() methods make color opaque
|
||||||
|
@author Andrei Dmitriev: area=awt-color
|
||||||
|
@run main OpacityChange
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
public class OpacityChange {
|
||||||
|
private final static int INITIAL_ALPHA = 125;
|
||||||
|
|
||||||
|
public static void main(String argv[]) {
|
||||||
|
Color color = new Color(20, 20, 20, INITIAL_ALPHA);
|
||||||
|
System.out.println("Initial alpha: " + color.getAlpha());
|
||||||
|
Color colorBrighter = color.brighter();
|
||||||
|
System.out.println("New alpha (after brighter): " + colorBrighter.getAlpha());
|
||||||
|
|
||||||
|
Color colorDarker = color.darker();
|
||||||
|
System.out.println("New alpha (after darker): " + colorDarker.getAlpha());
|
||||||
|
|
||||||
|
|
||||||
|
if (INITIAL_ALPHA != colorBrighter.getAlpha()) {
|
||||||
|
throw new RuntimeException("Brighter color alpha has changed from : " +INITIAL_ALPHA + " to " + colorBrighter.getAlpha());
|
||||||
|
}
|
||||||
|
if (INITIAL_ALPHA != colorDarker.getAlpha()) {
|
||||||
|
throw new RuntimeException("Darker color alpha has changed from : " +INITIAL_ALPHA + " to " + colorDarker.getAlpha());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user