jdk/test/java/awt/image/MultiResolutionImageTest.java
author alexsch
Thu, 09 Jan 2014 18:04:31 +0400
changeset 23256 d71287a532f8
child 31448 1066345d2a8a
permissions -rw-r--r--
8011059: [macosx] Support automatic @2x images loading on Mac OS X Reviewed-by: serb, flar
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
23256
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
     1
/*
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
     2
 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
     4
 *
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
     7
 * published by the Free Software Foundation.
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
     8
 *
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    13
 * accompanied this code).
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    14
 *
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    18
 *
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    21
 * questions.
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    22
 */
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    23
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    24
import java.awt.Color;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    25
import java.awt.Graphics;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    26
import java.awt.Graphics2D;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    27
import java.awt.Image;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    28
import java.awt.Toolkit;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    29
import java.awt.image.BufferedImage;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    30
import java.io.File;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    31
import java.lang.reflect.Method;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    32
import java.net.URL;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    33
import javax.imageio.ImageIO;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    34
import sun.awt.OSInfo;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    35
import sun.awt.SunHints;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    36
import java.awt.MediaTracker;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    37
import java.awt.geom.AffineTransform;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    38
import java.awt.image.ImageObserver;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    39
import java.util.Arrays;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    40
import java.util.List;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    41
import javax.swing.JPanel;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    42
import sun.awt.SunToolkit;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    43
import sun.awt.image.MultiResolutionImage;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    44
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    45
/**
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    46
 * @test
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    47
 * @bug 8011059
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    48
 * @author Alexander Scherbatiy
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    49
 * @summary [macosx] Make JDK demos look perfect on retina displays
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    50
 * @run main MultiResolutionImageTest CUSTOM
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    51
 * @run main MultiResolutionImageTest TOOLKIT_PREPARE
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    52
 * @run main MultiResolutionImageTest TOOLKIT_LOAD
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    53
 * @run main MultiResolutionImageTest TOOLKIT
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    54
 */
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    55
public class MultiResolutionImageTest {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    56
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    57
    private static final int IMAGE_WIDTH = 300;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    58
    private static final int IMAGE_HEIGHT = 200;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    59
    private static final Color COLOR_1X = Color.GREEN;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    60
    private static final Color COLOR_2X = Color.BLUE;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    61
    private static final String IMAGE_NAME_1X = "image.png";
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    62
    private static final String IMAGE_NAME_2X = "image@2x.png";
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    63
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    64
    public static void main(String[] args) throws Exception {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    65
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    66
        System.out.println("args: " + args.length);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    67
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    68
        if (args.length == 0) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    69
            throw new RuntimeException("Not found a test");
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    70
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    71
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    72
        String test = args[0];
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    73
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    74
        System.out.println("TEST: " + test);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    75
        System.out.println("CHECK OS: " + checkOS());
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    76
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    77
        if ("CUSTOM".equals(test)) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    78
            testCustomMultiResolutionImage();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    79
        } else if (checkOS()) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    80
            switch (test) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    81
                case "CUSTOM":
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    82
                    break;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    83
                case "TOOLKIT_PREPARE":
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    84
                    testToolkitMultiResolutionImagePrepare();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    85
                    break;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    86
                case "TOOLKIT_LOAD":
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    87
                    testToolkitMultiResolutionImageLoad();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    88
                    break;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    89
                case "TOOLKIT":
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    90
                    testToolkitMultiResolutionImage();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    91
                    testImageNameTo2xParsing();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    92
                    break;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    93
                default:
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    94
                    throw new RuntimeException("Unknown test: " + test);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    95
            }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    96
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    97
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    98
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
    99
    static boolean checkOS() {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   100
        return OSInfo.getOSType() == OSInfo.OSType.MACOSX;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   101
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   102
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   103
    public static void testCustomMultiResolutionImage() {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   104
        testCustomMultiResolutionImage(false);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   105
        testCustomMultiResolutionImage(true);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   106
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   107
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   108
    public static void testCustomMultiResolutionImage(boolean enableImageScaling) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   109
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   110
        Image image = new MultiResolutionBufferedImage();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   111
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   112
        // Same image size
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   113
        BufferedImage bufferedImage = new BufferedImage(IMAGE_WIDTH, IMAGE_HEIGHT,
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   114
                BufferedImage.TYPE_INT_RGB);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   115
        Graphics2D g2d = (Graphics2D) bufferedImage.getGraphics();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   116
        setImageScalingHint(g2d, enableImageScaling);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   117
        g2d.drawImage(image, 0, 0, null);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   118
        checkColor(bufferedImage.getRGB(3 * IMAGE_WIDTH / 4, 3 * IMAGE_HEIGHT / 4), false);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   119
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   120
        // Twice image size
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   121
        bufferedImage = new BufferedImage(2 * IMAGE_WIDTH, 2 * IMAGE_HEIGHT,
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   122
                BufferedImage.TYPE_INT_RGB);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   123
        g2d = (Graphics2D) bufferedImage.getGraphics();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   124
        setImageScalingHint(g2d, enableImageScaling);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   125
        g2d.drawImage(image, 0, 0, 2 * IMAGE_WIDTH, 2 * IMAGE_HEIGHT, 0, 0, IMAGE_WIDTH, IMAGE_HEIGHT, null);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   126
        checkColor(bufferedImage.getRGB(3 * IMAGE_WIDTH / 2, 3 * IMAGE_HEIGHT / 2), enableImageScaling);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   127
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   128
        // Scale 2x
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   129
        bufferedImage = new BufferedImage(2 * IMAGE_WIDTH, 2 * IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   130
        g2d = (Graphics2D) bufferedImage.getGraphics();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   131
        setImageScalingHint(g2d, enableImageScaling);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   132
        g2d.scale(2, 2);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   133
        g2d.drawImage(image, 0, 0, IMAGE_WIDTH, IMAGE_HEIGHT, null);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   134
        checkColor(bufferedImage.getRGB(3 * IMAGE_WIDTH / 2, 3 * IMAGE_HEIGHT / 2), enableImageScaling);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   135
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   136
        // Rotate
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   137
        bufferedImage = new BufferedImage(IMAGE_WIDTH, IMAGE_HEIGHT,
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   138
                BufferedImage.TYPE_INT_RGB);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   139
        g2d = (Graphics2D) bufferedImage.getGraphics();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   140
        setImageScalingHint(g2d, enableImageScaling);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   141
        g2d.drawImage(image, 0, 0, null);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   142
        g2d.rotate(Math.PI / 4);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   143
        checkColor(bufferedImage.getRGB(3 * IMAGE_WIDTH / 4, 3 * IMAGE_HEIGHT / 4), false);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   144
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   145
        // Scale 2x and Rotate
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   146
        bufferedImage = new BufferedImage(2 * IMAGE_WIDTH, 2 * IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   147
        g2d = (Graphics2D) bufferedImage.getGraphics();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   148
        setImageScalingHint(g2d, enableImageScaling);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   149
        g2d.scale(-2, 2);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   150
        g2d.rotate(-Math.PI / 10);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   151
        g2d.drawImage(image, -IMAGE_WIDTH, 0, IMAGE_WIDTH, IMAGE_HEIGHT, null);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   152
        checkColor(bufferedImage.getRGB(3 * IMAGE_WIDTH / 2, 3 * IMAGE_HEIGHT / 2), enableImageScaling);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   153
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   154
        // General Transform
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   155
        bufferedImage = new BufferedImage(2 * IMAGE_WIDTH, 2 * IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   156
        g2d = (Graphics2D) bufferedImage.getGraphics();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   157
        setImageScalingHint(g2d, enableImageScaling);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   158
        float delta = 0.05f;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   159
        float cos = 1 - delta * delta / 2;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   160
        float sin = 1 + delta;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   161
        AffineTransform transform = new AffineTransform(2 * cos, 0.1, 0.3, -2 * sin, 10, -5);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   162
        g2d.setTransform(transform);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   163
        g2d.drawImage(image, 0, -IMAGE_HEIGHT, IMAGE_WIDTH, IMAGE_HEIGHT, null);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   164
        checkColor(bufferedImage.getRGB(3 * IMAGE_WIDTH / 2, 3 * IMAGE_HEIGHT / 2), enableImageScaling);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   165
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   166
        int D = 10;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   167
        // From Source to small Destination region
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   168
        bufferedImage = new BufferedImage(IMAGE_WIDTH, IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   169
        g2d = (Graphics2D) bufferedImage.getGraphics();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   170
        setImageScalingHint(g2d, enableImageScaling);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   171
        g2d.drawImage(image, IMAGE_WIDTH / 2, IMAGE_HEIGHT / 2, IMAGE_WIDTH - D, IMAGE_HEIGHT - D,
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   172
                D, D, IMAGE_WIDTH - D, IMAGE_HEIGHT - D, null);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   173
        checkColor(bufferedImage.getRGB(3 * IMAGE_WIDTH / 4, 3 * IMAGE_HEIGHT / 4), false);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   174
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   175
        // From Source to large Destination region
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   176
        bufferedImage = new BufferedImage(2 * IMAGE_WIDTH, 2 * IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   177
        g2d = (Graphics2D) bufferedImage.getGraphics();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   178
        setImageScalingHint(g2d, enableImageScaling);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   179
        g2d.drawImage(image, D, D, 2 * IMAGE_WIDTH - D, 2 * IMAGE_HEIGHT - D,
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   180
                IMAGE_WIDTH / 2, IMAGE_HEIGHT / 2, IMAGE_WIDTH - D, IMAGE_HEIGHT - D, null);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   181
        checkColor(bufferedImage.getRGB(3 * IMAGE_WIDTH / 2, 3 * IMAGE_HEIGHT / 2), enableImageScaling);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   182
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   183
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   184
    static class MultiResolutionBufferedImage extends BufferedImage
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   185
            implements MultiResolutionImage {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   186
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   187
        Image highResolutionImage;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   188
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   189
        public MultiResolutionBufferedImage() {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   190
            super(IMAGE_WIDTH, IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   191
            highResolutionImage = new BufferedImage(
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   192
                    2 * IMAGE_WIDTH, 2 * IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   193
            draw(getGraphics(), 1);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   194
            draw(highResolutionImage.getGraphics(), 2);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   195
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   196
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   197
        void draw(Graphics graphics, float resolution) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   198
            Graphics2D g2 = (Graphics2D) graphics;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   199
            g2.scale(resolution, resolution);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   200
            g2.setColor((resolution == 1) ? COLOR_1X : COLOR_2X);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   201
            g2.fillRect(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   202
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   203
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   204
        @Override
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   205
        public Image getResolutionVariant(int width, int height) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   206
            return ((width <= getWidth() && height <= getHeight()))
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   207
                    ? this : highResolutionImage;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   208
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   209
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   210
        @Override
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   211
        public List<Image> getResolutionVariants() {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   212
            return Arrays.asList(this, highResolutionImage);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   213
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   214
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   215
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   216
    static void testToolkitMultiResolutionImagePrepare() throws Exception {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   217
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   218
        generateImages();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   219
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   220
        File imageFile = new File(IMAGE_NAME_1X);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   221
        String fileName = imageFile.getAbsolutePath();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   222
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   223
        Image image = Toolkit.getDefaultToolkit().getImage(fileName);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   224
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   225
        SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   226
        toolkit.prepareImage(image, IMAGE_WIDTH, IMAGE_HEIGHT, new LoadImageObserver(image));
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   227
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   228
        testToolkitMultiResolutionImageLoad(image);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   229
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   230
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   231
    static void testToolkitMultiResolutionImageLoad() throws Exception {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   232
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   233
        generateImages();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   234
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   235
        File imageFile = new File(IMAGE_NAME_1X);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   236
        String fileName = imageFile.getAbsolutePath();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   237
        Image image = Toolkit.getDefaultToolkit().getImage(fileName);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   238
        testToolkitMultiResolutionImageLoad(image);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   239
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   240
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   241
    static void testToolkitMultiResolutionImageLoad(Image image) throws Exception {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   242
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   243
        MediaTracker tracker = new MediaTracker(new JPanel());
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   244
        tracker.addImage(image, 0);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   245
        tracker.waitForID(0);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   246
        if (tracker.isErrorAny()) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   247
            throw new RuntimeException("Error during image loading");
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   248
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   249
        tracker.removeImage(image, 0);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   250
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   251
        testImageLoaded(image);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   252
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   253
        int w = image.getWidth(null);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   254
        int h = image.getHeight(null);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   255
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   256
        Image resolutionVariant = ((MultiResolutionImage) image)
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   257
                .getResolutionVariant(2 * w, 2 * h);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   258
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   259
        if (image == resolutionVariant) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   260
            throw new RuntimeException("Resolution variant is not loaded");
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   261
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   262
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   263
        testImageLoaded(resolutionVariant);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   264
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   265
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   266
    static void testImageLoaded(Image image) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   267
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   268
        SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   269
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   270
        int flags = toolkit.checkImage(image, IMAGE_WIDTH, IMAGE_WIDTH, new SilentImageObserver());
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   271
        if ((flags & (ImageObserver.FRAMEBITS | ImageObserver.ALLBITS)) == 0) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   272
            throw new RuntimeException("Image is not loaded!");
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   273
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   274
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   275
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   276
    static class SilentImageObserver implements ImageObserver {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   277
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   278
        @Override
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   279
        public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   280
            throw new RuntimeException("Observer should not be called!");
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   281
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   282
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   283
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   284
    static class LoadImageObserver implements ImageObserver {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   285
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   286
        Image image;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   287
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   288
        public LoadImageObserver(Image image) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   289
            this.image = image;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   290
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   291
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   292
        @Override
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   293
        public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   294
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   295
            if (image != img) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   296
                throw new RuntimeException("Original image is not passed to the observer");
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   297
            }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   298
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   299
            if ((infoflags & ImageObserver.WIDTH) != 0) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   300
                if (width != IMAGE_WIDTH) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   301
                    throw new RuntimeException("Original width is not passed to the observer");
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   302
                }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   303
            }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   304
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   305
            if ((infoflags & ImageObserver.HEIGHT) != 0) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   306
                if (height != IMAGE_HEIGHT) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   307
                    throw new RuntimeException("Original height is not passed to the observer");
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   308
                }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   309
            }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   310
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   311
            return (infoflags & ALLBITS) == 0;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   312
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   313
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   314
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   315
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   316
    static void testToolkitMultiResolutionImage() throws Exception {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   317
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   318
        generateImages();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   319
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   320
        File imageFile = new File(IMAGE_NAME_1X);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   321
        String fileName = imageFile.getAbsolutePath();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   322
        URL url = imageFile.toURI().toURL();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   323
        testToolkitMultiResolutionImageChache(fileName, url);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   324
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   325
        Image image = Toolkit.getDefaultToolkit().getImage(fileName);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   326
        testToolkitImageObserver(image);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   327
        testToolkitMultiResolutionImage(image, false);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   328
        testToolkitMultiResolutionImage(image, true);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   329
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   330
        image = Toolkit.getDefaultToolkit().getImage(url);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   331
        testToolkitImageObserver(image);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   332
        testToolkitMultiResolutionImage(image, false);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   333
        testToolkitMultiResolutionImage(image, true);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   334
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   335
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   336
    static void testToolkitMultiResolutionImageChache(String fileName, URL url) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   337
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   338
        Image img1 = Toolkit.getDefaultToolkit().getImage(fileName);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   339
        if (!(img1 instanceof MultiResolutionImage)) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   340
            throw new RuntimeException("Not a MultiResolutionImage");
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   341
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   342
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   343
        Image img2 = Toolkit.getDefaultToolkit().getImage(fileName);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   344
        if (img1 != img2) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   345
            throw new RuntimeException("Image is not cached");
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   346
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   347
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   348
        img1 = Toolkit.getDefaultToolkit().getImage(url);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   349
        if (!(img1 instanceof MultiResolutionImage)) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   350
            throw new RuntimeException("Not a MultiResolutionImage");
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   351
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   352
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   353
        img2 = Toolkit.getDefaultToolkit().getImage(url);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   354
        if (img1 != img2) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   355
            throw new RuntimeException("Image is not cached");
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   356
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   357
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   358
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   359
    static void testToolkitMultiResolutionImage(Image image, boolean enableImageScaling)
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   360
            throws Exception {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   361
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   362
        MediaTracker tracker = new MediaTracker(new JPanel());
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   363
        tracker.addImage(image, 0);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   364
        tracker.waitForID(0);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   365
        if (tracker.isErrorAny()) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   366
            throw new RuntimeException("Error during image loading");
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   367
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   368
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   369
        final BufferedImage bufferedImage1x = new BufferedImage(IMAGE_WIDTH, IMAGE_HEIGHT,
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   370
                BufferedImage.TYPE_INT_RGB);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   371
        Graphics2D g1x = (Graphics2D) bufferedImage1x.getGraphics();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   372
        setImageScalingHint(g1x, false);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   373
        g1x.drawImage(image, 0, 0, null);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   374
        checkColor(bufferedImage1x.getRGB(3 * IMAGE_WIDTH / 4, 3 * IMAGE_HEIGHT / 4), false);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   375
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   376
        Image resolutionVariant = ((MultiResolutionImage) image).
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   377
                getResolutionVariant(2 * IMAGE_WIDTH, 2 * IMAGE_HEIGHT);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   378
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   379
        if (resolutionVariant == null) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   380
            throw new RuntimeException("Resolution variant is null");
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   381
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   382
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   383
        MediaTracker tracker2x = new MediaTracker(new JPanel());
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   384
        tracker2x.addImage(resolutionVariant, 0);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   385
        tracker2x.waitForID(0);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   386
        if (tracker2x.isErrorAny()) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   387
            throw new RuntimeException("Error during scalable image loading");
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   388
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   389
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   390
        final BufferedImage bufferedImage2x = new BufferedImage(2 * IMAGE_WIDTH,
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   391
                2 * IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   392
        Graphics2D g2x = (Graphics2D) bufferedImage2x.getGraphics();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   393
        setImageScalingHint(g2x, enableImageScaling);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   394
        g2x.drawImage(image, 0, 0, 2 * IMAGE_WIDTH, 2 * IMAGE_HEIGHT, 0, 0, IMAGE_WIDTH, IMAGE_HEIGHT, null);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   395
        checkColor(bufferedImage2x.getRGB(3 * IMAGE_WIDTH / 2, 3 * IMAGE_HEIGHT / 2), enableImageScaling);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   396
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   397
        if (!(image instanceof MultiResolutionImage)) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   398
            throw new RuntimeException("Not a MultiResolutionImage");
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   399
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   400
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   401
        MultiResolutionImage multiResolutionImage = (MultiResolutionImage) image;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   402
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   403
        Image image1x = multiResolutionImage.getResolutionVariant(IMAGE_WIDTH, IMAGE_HEIGHT);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   404
        Image image2x = multiResolutionImage.getResolutionVariant(2 * IMAGE_WIDTH, 2 * IMAGE_HEIGHT);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   405
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   406
        if (image1x.getWidth(null) * 2 != image2x.getWidth(null)
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   407
                || image1x.getHeight(null) * 2 != image2x.getHeight(null)) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   408
            throw new RuntimeException("Wrong resolution variant size");
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   409
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   410
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   411
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   412
    static void testToolkitImageObserver(final Image image) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   413
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   414
        ImageObserver observer = new ImageObserver() {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   415
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   416
            @Override
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   417
            public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   418
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   419
                if (img != image) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   420
                    throw new RuntimeException("Wrong image in observer");
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   421
                }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   422
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   423
                if ((infoflags & (ImageObserver.ERROR | ImageObserver.ABORT)) != 0) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   424
                    throw new RuntimeException("Error during image loading");
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   425
                }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   426
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   427
                return (infoflags & ImageObserver.ALLBITS) == 0;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   428
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   429
            }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   430
        };
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   431
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   432
        final BufferedImage bufferedImage2x = new BufferedImage(2 * IMAGE_WIDTH,
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   433
                2 * IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   434
        Graphics2D g2x = (Graphics2D) bufferedImage2x.getGraphics();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   435
        setImageScalingHint(g2x, true);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   436
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   437
        g2x.drawImage(image, 0, 0, 2 * IMAGE_WIDTH, 2 * IMAGE_HEIGHT, 0, 0, IMAGE_WIDTH, IMAGE_HEIGHT, observer);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   438
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   439
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   440
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   441
    static void setImageScalingHint(Graphics2D g2d, boolean enableImageScaling) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   442
        g2d.setRenderingHint(SunHints.KEY_RESOLUTION_VARIANT, enableImageScaling
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   443
                ? SunHints.VALUE_RESOLUTION_VARIANT_ON
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   444
                : SunHints.VALUE_RESOLUTION_VARIANT_OFF);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   445
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   446
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   447
    static void checkColor(int rgb, boolean isImageScaled) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   448
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   449
        if (!isImageScaled && COLOR_1X.getRGB() != rgb) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   450
            throw new RuntimeException("Wrong 1x color: " + new Color(rgb));
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   451
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   452
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   453
        if (isImageScaled && COLOR_2X.getRGB() != rgb) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   454
            throw new RuntimeException("Wrong 2x color" + new Color(rgb));
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   455
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   456
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   457
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   458
    static void generateImages() throws Exception {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   459
        if (!new File(IMAGE_NAME_1X).exists()) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   460
            generateImage(1);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   461
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   462
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   463
        if (!new File(IMAGE_NAME_2X).exists()) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   464
            generateImage(2);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   465
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   466
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   467
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   468
    static void generateImage(int scale) throws Exception {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   469
        BufferedImage image = new BufferedImage(scale * IMAGE_WIDTH, scale * IMAGE_HEIGHT,
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   470
                BufferedImage.TYPE_INT_RGB);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   471
        Graphics g = image.getGraphics();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   472
        g.setColor(scale == 1 ? COLOR_1X : COLOR_2X);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   473
        g.fillRect(0, 0, scale * IMAGE_WIDTH, scale * IMAGE_HEIGHT);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   474
        File file = new File(scale == 1 ? IMAGE_NAME_1X : IMAGE_NAME_2X);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   475
        ImageIO.write(image, "png", file);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   476
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   477
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   478
    static void testImageNameTo2xParsing() throws Exception {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   479
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   480
        for (String[] testNames : TEST_FILE_NAMES) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   481
            String testName = testNames[0];
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   482
            String goldenName = testNames[1];
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   483
            String resultName = getTestScaledImageName(testName);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   484
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   485
            if (!isValidPath(testName) && resultName == null) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   486
                continue;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   487
            }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   488
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   489
            if (goldenName.equals(resultName)) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   490
                continue;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   491
            }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   492
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   493
            throw new RuntimeException("Test name " + testName
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   494
                    + ", result name: " + resultName);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   495
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   496
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   497
        for (URL[] testURLs : TEST_URLS) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   498
            URL testURL = testURLs[0];
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   499
            URL goldenURL = testURLs[1];
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   500
            URL resultURL = getTestScaledImageURL(testURL);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   501
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   502
            if (!isValidPath(testURL.getPath()) && resultURL == null) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   503
                continue;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   504
            }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   505
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   506
            if (goldenURL.equals(resultURL)) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   507
                continue;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   508
            }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   509
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   510
            throw new RuntimeException("Test url: " + testURL
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   511
                    + ", result url: " + resultURL);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   512
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   513
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   514
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   515
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   516
    static URL getTestScaledImageURL(URL url) throws Exception {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   517
        Method method = getScalableImageMethod("getScaledImageURL", URL.class);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   518
        return (URL) method.invoke(null, url);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   519
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   520
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   521
    static String getTestScaledImageName(String name) throws Exception {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   522
        Method method = getScalableImageMethod("getScaledImageName", String.class);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   523
        return (String) method.invoke(null, name);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   524
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   525
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   526
    private static boolean isValidPath(String path) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   527
        return !path.isEmpty() && !path.endsWith("/") && !path.endsWith(".")
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   528
                && !path.contains("@2x");
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   529
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   530
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   531
    private static Method getScalableImageMethod(String name,
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   532
            Class... parameterTypes) throws Exception {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   533
        Toolkit toolkit = Toolkit.getDefaultToolkit();
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   534
        Method method = toolkit.getClass().getDeclaredMethod(name, parameterTypes);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   535
        method.setAccessible(true);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   536
        return method;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   537
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   538
    private static final String[][] TEST_FILE_NAMES;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   539
    private static final URL[][] TEST_URLS;
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   540
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   541
    static {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   542
        TEST_FILE_NAMES = new String[][]{
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   543
            {"", null},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   544
            {".", null},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   545
            {"..", null},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   546
            {"/", null},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   547
            {"/.", null},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   548
            {"dir/", null},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   549
            {"dir/.", null},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   550
            {"aaa@2x.png", null},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   551
            {"/dir/aaa@2x.png", null},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   552
            {"image", "image@2x"},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   553
            {"image.ext", "image@2x.ext"},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   554
            {"image.aaa.ext", "image.aaa@2x.ext"},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   555
            {"dir/image", "dir/image@2x"},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   556
            {"dir/image.ext", "dir/image@2x.ext"},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   557
            {"dir/image.aaa.ext", "dir/image.aaa@2x.ext"},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   558
            {"dir/aaa.bbb/image", "dir/aaa.bbb/image@2x"},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   559
            {"dir/aaa.bbb/image.ext", "dir/aaa.bbb/image@2x.ext"},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   560
            {"dir/aaa.bbb/image.ccc.ext", "dir/aaa.bbb/image.ccc@2x.ext"},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   561
            {"/dir/image", "/dir/image@2x"},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   562
            {"/dir/image.ext", "/dir/image@2x.ext"},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   563
            {"/dir/image.aaa.ext", "/dir/image.aaa@2x.ext"},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   564
            {"/dir/aaa.bbb/image", "/dir/aaa.bbb/image@2x"},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   565
            {"/dir/aaa.bbb/image.ext", "/dir/aaa.bbb/image@2x.ext"},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   566
            {"/dir/aaa.bbb/image.ccc.ext", "/dir/aaa.bbb/image.ccc@2x.ext"}
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   567
        };
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   568
        try {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   569
            TEST_URLS = new URL[][]{
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   570
                // file
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   571
                {new URL("file:/aaa"), new URL("file:/aaa@2x")},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   572
                {new URL("file:/aaa.ext"), new URL("file:/aaa@2x.ext")},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   573
                {new URL("file:/aaa.bbb.ext"), new URL("file:/aaa.bbb@2x.ext")},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   574
                {new URL("file:/ccc/aaa.bbb.ext"),
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   575
                    new URL("file:/ccc/aaa.bbb@2x.ext")},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   576
                {new URL("file:/ccc.ddd/aaa.bbb.ext"),
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   577
                    new URL("file:/ccc.ddd/aaa.bbb@2x.ext")},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   578
                {new URL("file:///~/image"), new URL("file:///~/image@2x")},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   579
                {new URL("file:///~/image.ext"),
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   580
                    new URL("file:///~/image@2x.ext")},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   581
                // http
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   582
                {new URL("http://www.test.com"), null},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   583
                {new URL("http://www.test.com/"), null},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   584
                {new URL("http://www.test.com///"), null},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   585
                {new URL("http://www.test.com/image"),
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   586
                    new URL("http://www.test.com/image@2x")},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   587
                {new URL("http://www.test.com/image.ext"),
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   588
                    new URL("http://www.test.com/image@2x.ext")},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   589
                {new URL("http://www.test.com/dir/image"),
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   590
                    new URL("http://www.test.com/dir/image@2x")},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   591
                {new URL("http://www.test.com:80/dir/image.aaa.ext"),
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   592
                    new URL("http://www.test.com:80/dir/image.aaa@2x.ext")},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   593
                {new URL("http://www.test.com:8080/dir/image.aaa.ext"),
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   594
                    new URL("http://www.test.com:8080/dir/image.aaa@2x.ext")},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   595
                // jar
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   596
                {new URL("jar:file:/dir/Java2D.jar!/image"),
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   597
                    new URL("jar:file:/dir/Java2D.jar!/image@2x")},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   598
                {new URL("jar:file:/dir/Java2D.jar!/image.aaa.ext"),
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   599
                    new URL("jar:file:/dir/Java2D.jar!/image.aaa@2x.ext")},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   600
                {new URL("jar:file:/dir/Java2D.jar!/images/image"),
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   601
                    new URL("jar:file:/dir/Java2D.jar!/images/image@2x")},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   602
                {new URL("jar:file:/dir/Java2D.jar!/images/image.ext"),
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   603
                    new URL("jar:file:/dir/Java2D.jar!/images/image@2x.ext")},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   604
                {new URL("jar:file:/aaa.bbb/Java2D.jar!/images/image.ext"),
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   605
                    new URL("jar:file:/aaa.bbb/Java2D.jar!/images/image@2x.ext")},
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   606
                {new URL("jar:file:/dir/Java2D.jar!/aaa.bbb/image.ext"),
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   607
                    new URL("jar:file:/dir/Java2D.jar!/aaa.bbb/image@2x.ext")},};
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   608
        } catch (Exception e) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   609
            throw new RuntimeException(e);
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   610
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   611
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   612
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   613
    static class PreloadedImageObserver implements ImageObserver {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   614
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   615
        @Override
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   616
        public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   617
            throw new RuntimeException("Image should be already preloaded");
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   618
        }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   619
    }
d71287a532f8 8011059: [macosx] Support automatic @2x images loading on Mac OS X
alexsch
parents:
diff changeset
   620
}