< prev index next >
src/java.desktop/macosx/classes/com/apple/laf/AquaUtils.java
Print this page
@@ -46,10 +46,11 @@
import sun.reflect.misc.ReflectUtil;
import sun.security.action.GetPropertyAction;
import sun.swing.SwingUtilities2;
import com.apple.laf.AquaImageFactory.SlicedImageControl;
+import java.util.function.Function;
import sun.awt.image.MultiResolutionCachedImage;
final class AquaUtils {
private static final String ANIMATIONS_PROPERTY = "swing.enableAnimations";
@@ -102,42 +103,51 @@
static Creator getCImageCreator() {
return cImageCreator.get();
}
static Image generateSelectedDarkImage(final Image image) {
- final ImageProducer prod = new FilteredImageSource(image.getSource(), new IconImageFilter() {
+ final ImageFilter filter = new IconImageFilter() {
@Override
int getGreyFor(final int gray) {
return gray * 75 / 100;
}
- });
- return Toolkit.getDefaultToolkit().createImage(prod);
+ };
+ return map(image, (img) -> generateFilteredImage(img, filter));
}
static Image generateDisabledImage(final Image image) {
- final ImageProducer prod = new FilteredImageSource(image.getSource(), new IconImageFilter() {
+ final ImageFilter filter = new IconImageFilter() {
@Override
int getGreyFor(final int gray) {
return 255 - ((255 - gray) * 65 / 100);
}
- });
- return Toolkit.getDefaultToolkit().createImage(prod);
+ };
+ return map(image, (img) -> generateFilteredImage(img, filter));
}
static Image generateLightenedImage(final Image image, final int percent) {
final GrayFilter filter = new GrayFilter(true, percent);
- return (image instanceof MultiResolutionCachedImage)
- ? ((MultiResolutionCachedImage) image).map(
- rv -> generateLightenedImage(rv, filter))
- : generateLightenedImage(image, filter);
+ return map(image, (img) -> generateFilteredImage(img, filter));
}
- static Image generateLightenedImage(Image image, ImageFilter filter) {
+ static Image generateFilteredImage(Image image, ImageFilter filter) {
final ImageProducer prod = new FilteredImageSource(image.getSource(), filter);
return Toolkit.getDefaultToolkit().createImage(prod);
}
+ private static Image map(Image image, Function<Image, Image> mapper) {
+ if (image instanceof MultiResolutionCachedImage) {
+ return ((MultiResolutionCachedImage) image).map(mapper);
+ } else if (image instanceof MultiResolutionImage) {
+ MultiResolutionImage mrImage = (MultiResolutionImage) image;
+ Image[] mappedImages = mrImage.getResolutionVariants().stream()
+ .map(mapper).toArray(Image[]::new);
+ return new BaseMultiResolutionImage(mappedImages);
+ }
+ return mapper.apply(image);
+ }
+
private abstract static class IconImageFilter extends RGBImageFilter {
IconImageFilter() {
super();
canFilterIndexColorModel = true;
}
< prev index next >