< 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 >