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() {
|