src/macosx/classes/com/apple/laf/AquaIcon.java

Print this page




  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package com.apple.laf;
  27 
  28 import java.awt.*;
  29 import java.awt.image.BufferedImage;
  30 import java.io.File;
  31 
  32 import javax.swing.*;
  33 import javax.swing.plaf.*;
  34 
  35 import apple.laf.JRSUIConstants.Size;
  36 import apple.laf.*;
  37 
  38 import com.apple.laf.AquaUtilControlSize.*;
  39 import com.apple.laf.AquaUtils.RecyclableSingleton;

  40 
  41 public class AquaIcon {
  42     interface InvertableIcon extends Icon {
  43         public Icon getInvertedIcon();
  44     }
  45 
  46     static UIResource getIconFor(final JRSUIControlSpec spec, final int width, final int height) {
  47         return new CachableJRSUIIcon(width, height) {
  48             public void initIconPainter(final AquaPainter<JRSUIState> painter) {
  49                 spec.initIconPainter(painter);
  50             }
  51         };
  52     }
  53 
  54     // converts an object that is an icon into an image so we can hand it off to AppKit
  55     public static Image getImageForIcon(final Icon i) {
  56         if (i instanceof ImageIcon) return ((ImageIcon)i).getImage();
  57 
  58         final int w = i.getIconWidth();
  59         final int h = i.getIconHeight();


 178 
 179             g.dispose();
 180         }
 181 
 182         public int getIconWidth() {
 183             return width;
 184         }
 185 
 186         public int getIconHeight() {
 187             return height;
 188         }
 189 
 190     }
 191 
 192     static abstract class CachableJRSUIIcon extends CachingScalingIcon implements UIResource {
 193         public CachableJRSUIIcon(final int width, final int height) {
 194             super(width, height);
 195         }
 196 
 197         Image createImage() {
 198             final AquaPainter<JRSUIState> painter = AquaPainter.create(JRSUIState.getInstance());

 199             initIconPainter(painter);
 200 
 201             final BufferedImage img = new BufferedImage(getIconWidth(), getIconHeight(), BufferedImage.TYPE_INT_ARGB_PRE);












 202             final Graphics g = img.getGraphics();
 203             g.setClip(new Rectangle(0, 0, getIconWidth(), getIconHeight()));
 204             painter.paint(g, null, 0, 0, getIconWidth(), getIconHeight());



 205             g.dispose();
 206             return img;
 207         }
 208 
 209         public abstract void initIconPainter(final AquaPainter<JRSUIState> painter);
 210     }
 211 
 212     static class FileIcon extends CachingScalingIcon {
 213         final File file;
 214 
 215         public FileIcon(final File file, final int width, final int height) {
 216             super(width, height);
 217             this.file = file;
 218         }
 219 
 220         public FileIcon(final File file) {
 221             this(file, 16, 16);
 222         }
 223 
 224         Image createImage() {




  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package com.apple.laf;
  27 
  28 import java.awt.*;
  29 import java.awt.image.BufferedImage;
  30 import java.io.File;
  31 
  32 import javax.swing.*;
  33 import javax.swing.plaf.*;
  34 
  35 import apple.laf.JRSUIConstants.Size;
  36 import apple.laf.*;
  37 
  38 import com.apple.laf.AquaUtilControlSize.*;
  39 import com.apple.laf.AquaUtils.RecyclableSingleton;
  40 import sun.awt.image.MultiResolutionBufferedImage;
  41 
  42 public class AquaIcon {
  43     interface InvertableIcon extends Icon {
  44         public Icon getInvertedIcon();
  45     }
  46 
  47     static UIResource getIconFor(final JRSUIControlSpec spec, final int width, final int height) {
  48         return new CachableJRSUIIcon(width, height) {
  49             public void initIconPainter(final AquaPainter<JRSUIState> painter) {
  50                 spec.initIconPainter(painter);
  51             }
  52         };
  53     }
  54 
  55     // converts an object that is an icon into an image so we can hand it off to AppKit
  56     public static Image getImageForIcon(final Icon i) {
  57         if (i instanceof ImageIcon) return ((ImageIcon)i).getImage();
  58 
  59         final int w = i.getIconWidth();
  60         final int h = i.getIconHeight();


 179 
 180             g.dispose();
 181         }
 182 
 183         public int getIconWidth() {
 184             return width;
 185         }
 186 
 187         public int getIconHeight() {
 188             return height;
 189         }
 190 
 191     }
 192 
 193     static abstract class CachableJRSUIIcon extends CachingScalingIcon implements UIResource {
 194         public CachableJRSUIIcon(final int width, final int height) {
 195             super(width, height);
 196         }
 197 
 198         Image createImage() {
 199             final AquaPainter<JRSUIState> painter =
 200                     AquaPainter.create(JRSUIState.getInstance());
 201             initIconPainter(painter);
 202 
 203             final int w = getIconWidth();
 204             final int h = getIconHeight();
 205             Image baseImage = createImage(painter, w, h, w, h);
 206 
 207             return new MultiResolutionBufferedImage(
 208                     baseImage, (rvWidth, rvHeight) ->
 209                             createImage(painter, w, h, rvWidth, rvHeight));
 210         }
 211 
 212         private static Image createImage(AquaPainter<JRSUIState> painter,
 213                 int width, int height, int rvWidth, int rvHeight) {
 214             final BufferedImage img = new BufferedImage(rvWidth, rvHeight,
 215                     BufferedImage.TYPE_INT_ARGB_PRE);
 216             final Graphics g = img.getGraphics();
 217             g.setClip(new Rectangle(0, 0, rvWidth, rvHeight));
 218 
 219             ((Graphics2D) g).scale(rvWidth / width, rvHeight / height);
 220             painter.paint(g, null, 0, 0, width, height);
 221 
 222             g.dispose();
 223             return img;
 224         }
 225 
 226         public abstract void initIconPainter(final AquaPainter<JRSUIState> painter);
 227     }
 228 
 229     static class FileIcon extends CachingScalingIcon {
 230         final File file;
 231 
 232         public FileIcon(final File file, final int width, final int height) {
 233             super(width, height);
 234             this.file = file;
 235         }
 236 
 237         public FileIcon(final File file) {
 238             this(file, 16, 16);
 239         }
 240 
 241         Image createImage() {