< prev index next >

src/java.desktop/macosx/classes/com/apple/laf/AquaUtils.java

Print this page




  31 import java.lang.reflect.Method;
  32 import java.security.AccessController;
  33 import java.security.PrivilegedAction;
  34 import java.util.*;
  35 
  36 import javax.swing.*;
  37 import javax.swing.border.Border;
  38 import javax.swing.plaf.UIResource;
  39 
  40 import sun.awt.AppContext;
  41 
  42 import sun.lwawt.macosx.CImage;
  43 import sun.lwawt.macosx.CImage.Creator;
  44 import sun.lwawt.macosx.CPlatformWindow;
  45 import sun.misc.Launcher;
  46 import sun.reflect.misc.ReflectUtil;
  47 import sun.security.action.GetPropertyAction;
  48 import sun.swing.SwingUtilities2;
  49 
  50 import com.apple.laf.AquaImageFactory.SlicedImageControl;

  51 import sun.awt.image.MultiResolutionCachedImage;
  52 
  53 final class AquaUtils {
  54 
  55     private static final String ANIMATIONS_PROPERTY = "swing.enableAnimations";
  56 
  57     /**
  58      * Suppresses default constructor, ensuring non-instantiability.
  59      */
  60     private AquaUtils() {
  61     }
  62 
  63     /**
  64      * Convenience function for determining ComponentOrientation.  Helps us
  65      * avoid having Munge directives throughout the code.
  66      */
  67     static boolean isLeftToRight(final Component c) {
  68         return c.getComponentOrientation().isLeftToRight();
  69     }
  70 


  87                     getCreatorMethod.setAccessible(true);
  88                     return (Creator)getCreatorMethod.invoke(null, new Object[] {});
  89                 } catch (final Exception ignored) {
  90                     return null;
  91                 }
  92             }
  93         });
  94     }
  95 
  96     private static final RecyclableSingleton<Creator> cImageCreator = new RecyclableSingleton<Creator>() {
  97         @Override
  98         protected Creator getInstance() {
  99             return getCImageCreatorInternal();
 100         }
 101     };
 102     static Creator getCImageCreator() {
 103         return cImageCreator.get();
 104     }
 105 
 106     static Image generateSelectedDarkImage(final Image image) {
 107         final ImageProducer prod = new FilteredImageSource(image.getSource(), new IconImageFilter() {
 108             @Override
 109             int getGreyFor(final int gray) {
 110                 return gray * 75 / 100;
 111             }
 112         });
 113         return Toolkit.getDefaultToolkit().createImage(prod);
 114     }
 115 
 116     static Image generateDisabledImage(final Image image) {
 117         final ImageProducer prod = new FilteredImageSource(image.getSource(), new IconImageFilter() {
 118             @Override
 119             int getGreyFor(final int gray) {
 120                 return 255 - ((255 - gray) * 65 / 100);
 121             }
 122         });
 123         return Toolkit.getDefaultToolkit().createImage(prod);
 124     }
 125 
 126     static Image generateLightenedImage(final Image image, final int percent) {
 127         final GrayFilter filter = new GrayFilter(true, percent);
 128         return (image instanceof MultiResolutionCachedImage)
 129                 ? ((MultiResolutionCachedImage) image).map(
 130                         rv -> generateLightenedImage(rv, filter))
 131                 : generateLightenedImage(image, filter);
 132     }
 133 
 134     static Image generateLightenedImage(Image image, ImageFilter filter) {
 135         final ImageProducer prod = new FilteredImageSource(image.getSource(), filter);
 136         return Toolkit.getDefaultToolkit().createImage(prod);
 137     }
 138 












 139     private abstract static class IconImageFilter extends RGBImageFilter {
 140         IconImageFilter() {
 141             super();
 142             canFilterIndexColorModel = true;
 143         }
 144 
 145         @Override
 146         public final int filterRGB(final int x, final int y, final int rgb) {
 147             final int red = (rgb >> 16) & 0xff;
 148             final int green = (rgb >> 8) & 0xff;
 149             final int blue = rgb & 0xff;
 150             final int gray = getGreyFor((int)((0.30 * red + 0.59 * green + 0.11 * blue) / 3));
 151 
 152             return (rgb & 0xff000000) | (grayTransform(red, gray) << 16) | (grayTransform(green, gray) << 8) | (grayTransform(blue, gray) << 0);
 153         }
 154 
 155         private static int grayTransform(final int color, final int gray) {
 156             int result = color - gray;
 157             if (result < 0) result = 0;
 158             if (result > 255) result = 255;




  31 import java.lang.reflect.Method;
  32 import java.security.AccessController;
  33 import java.security.PrivilegedAction;
  34 import java.util.*;
  35 
  36 import javax.swing.*;
  37 import javax.swing.border.Border;
  38 import javax.swing.plaf.UIResource;
  39 
  40 import sun.awt.AppContext;
  41 
  42 import sun.lwawt.macosx.CImage;
  43 import sun.lwawt.macosx.CImage.Creator;
  44 import sun.lwawt.macosx.CPlatformWindow;
  45 import sun.misc.Launcher;
  46 import sun.reflect.misc.ReflectUtil;
  47 import sun.security.action.GetPropertyAction;
  48 import sun.swing.SwingUtilities2;
  49 
  50 import com.apple.laf.AquaImageFactory.SlicedImageControl;
  51 import java.util.function.Function;
  52 import sun.awt.image.MultiResolutionCachedImage;
  53 
  54 final class AquaUtils {
  55 
  56     private static final String ANIMATIONS_PROPERTY = "swing.enableAnimations";
  57 
  58     /**
  59      * Suppresses default constructor, ensuring non-instantiability.
  60      */
  61     private AquaUtils() {
  62     }
  63 
  64     /**
  65      * Convenience function for determining ComponentOrientation.  Helps us
  66      * avoid having Munge directives throughout the code.
  67      */
  68     static boolean isLeftToRight(final Component c) {
  69         return c.getComponentOrientation().isLeftToRight();
  70     }
  71 


  88                     getCreatorMethod.setAccessible(true);
  89                     return (Creator)getCreatorMethod.invoke(null, new Object[] {});
  90                 } catch (final Exception ignored) {
  91                     return null;
  92                 }
  93             }
  94         });
  95     }
  96 
  97     private static final RecyclableSingleton<Creator> cImageCreator = new RecyclableSingleton<Creator>() {
  98         @Override
  99         protected Creator getInstance() {
 100             return getCImageCreatorInternal();
 101         }
 102     };
 103     static Creator getCImageCreator() {
 104         return cImageCreator.get();
 105     }
 106 
 107     static Image generateSelectedDarkImage(final Image image) {
 108         final ImageFilter filter =  new IconImageFilter() {
 109             @Override
 110             int getGreyFor(final int gray) {
 111                 return gray * 75 / 100;
 112             }
 113         };
 114         return map(image, (img) -> generateFilteredImage(img, filter));
 115     }
 116 
 117     static Image generateDisabledImage(final Image image) {
 118         final ImageFilter filter = new IconImageFilter() {
 119             @Override
 120             int getGreyFor(final int gray) {
 121                 return 255 - ((255 - gray) * 65 / 100);
 122             }
 123         };
 124         return map(image, (img) -> generateFilteredImage(img, filter));
 125     }
 126 
 127     static Image generateLightenedImage(final Image image, final int percent) {
 128         final GrayFilter filter = new GrayFilter(true, percent);
 129         return map(image, (img) -> generateFilteredImage(img, filter));



 130     }
 131 
 132     static Image generateFilteredImage(Image image, ImageFilter filter) {
 133         final ImageProducer prod = new FilteredImageSource(image.getSource(), filter);
 134         return Toolkit.getDefaultToolkit().createImage(prod);
 135     }
 136 
 137     private static Image map(Image image, Function<Image, Image> mapper) {
 138         if (image instanceof MultiResolutionCachedImage) {
 139             return ((MultiResolutionCachedImage) image).map(mapper);
 140         } else if (image instanceof MultiResolutionImage) {
 141             MultiResolutionImage mrImage = (MultiResolutionImage) image;
 142             Image[] mappedImages = mrImage.getResolutionVariants().stream()
 143                     .map(mapper).toArray(Image[]::new);
 144             return new BaseMultiResolutionImage(mappedImages);
 145         }
 146         return mapper.apply(image);
 147     }
 148 
 149     private abstract static class IconImageFilter extends RGBImageFilter {
 150         IconImageFilter() {
 151             super();
 152             canFilterIndexColorModel = true;
 153         }
 154 
 155         @Override
 156         public final int filterRGB(final int x, final int y, final int rgb) {
 157             final int red = (rgb >> 16) & 0xff;
 158             final int green = (rgb >> 8) & 0xff;
 159             final int blue = rgb & 0xff;
 160             final int gray = getGreyFor((int)((0.30 * red + 0.59 * green + 0.11 * blue) / 3));
 161 
 162             return (rgb & 0xff000000) | (grayTransform(red, gray) << 16) | (grayTransform(green, gray) << 8) | (grayTransform(blue, gray) << 0);
 163         }
 164 
 165         private static int grayTransform(final int color, final int gray) {
 166             int result = color - gray;
 167             if (result < 0) result = 0;
 168             if (result > 255) result = 255;


< prev index next >