jdk/src/java.desktop/share/classes/sun/awt/image/MultiResolutionCachedImage.java
author ddehaven
Tue, 19 Aug 2014 10:32:16 -0700
changeset 26037 508779ce6619
parent 26019 jdk/src/share/classes/sun/awt/image/MultiResolutionCachedImage.java@10a56d28f48d
parent 25859 jdk/src/share/classes/sun/awt/image/MultiResolutionCachedImage.java@3317bb8137f4
child 32125 008f0a0d17e0
permissions -rw-r--r--
Merge
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
24532
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
     1
/*
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
     2
 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
     4
 *
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    10
 *
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    15
 * accompanied this code).
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    16
 *
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    20
 *
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    23
 * questions.
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    24
 */
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    25
package sun.awt.image;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    26
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    27
import java.awt.Dimension;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    28
import java.awt.Image;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    29
import java.awt.geom.Dimension2D;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    30
import java.awt.image.ImageObserver;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    31
import java.util.Arrays;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    32
import java.util.List;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    33
import java.util.function.Function;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    34
import java.util.function.BiFunction;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    35
import java.util.stream.Collectors;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    36
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    37
public class MultiResolutionCachedImage extends AbstractMultiResolutionImage {
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    38
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    39
    private final int baseImageWidth;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    40
    private final int baseImageHeight;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    41
    private final Dimension2D[] sizes;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    42
    private final BiFunction<Integer, Integer, Image> mapper;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    43
    private int availableInfo;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    44
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    45
    public MultiResolutionCachedImage(int baseImageWidth, int baseImageHeight,
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    46
            BiFunction<Integer, Integer, Image> mapper) {
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    47
        this(baseImageWidth, baseImageHeight, new Dimension[]{new Dimension(
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    48
            baseImageWidth, baseImageHeight)
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    49
        }, mapper);
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    50
    }
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    51
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    52
    public MultiResolutionCachedImage(int baseImageWidth, int baseImageHeight,
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    53
            Dimension2D[] sizes, BiFunction<Integer, Integer, Image> mapper) {
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    54
        this.baseImageWidth = baseImageWidth;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    55
        this.baseImageHeight = baseImageHeight;
26019
10a56d28f48d 8051838: [Findbugs]sun.awt.image.MultiResolutionCachedImage expose internal representation
alexsch
parents: 24532
diff changeset
    56
        this.sizes = (sizes == null) ? null : Arrays.copyOf(sizes, sizes.length);
24532
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    57
        this.mapper = mapper;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    58
    }
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    59
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    60
    @Override
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    61
    public Image getResolutionVariant(int width, int height) {
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    62
        ImageCache cache = ImageCache.getInstance();
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    63
        ImageCacheKey key = new ImageCacheKey(this, width, height);
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    64
        Image resolutionVariant = cache.getImage(key);
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    65
        if (resolutionVariant == null) {
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    66
            resolutionVariant = mapper.apply(width, height);
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    67
            cache.setImage(key, resolutionVariant);
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    68
        }
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    69
        preload(resolutionVariant, availableInfo);
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    70
        return resolutionVariant;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    71
    }
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    72
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    73
    @Override
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    74
    public List<Image> getResolutionVariants() {
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    75
        return Arrays.stream(sizes).map((Function<Dimension2D, Image>) size
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    76
                -> getResolutionVariant((int) size.getWidth(),
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    77
                        (int) size.getHeight())).collect(Collectors.toList());
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    78
    }
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    79
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    80
    public MultiResolutionCachedImage map(Function<Image, Image> mapper) {
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    81
        return new MultiResolutionCachedImage(baseImageWidth, baseImageHeight,
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    82
                sizes, (width, height) ->
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    83
                        mapper.apply(getResolutionVariant(width, height)));
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    84
    }
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    85
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    86
    @Override
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    87
    public int getWidth(ImageObserver observer) {
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    88
        updateInfo(observer, ImageObserver.WIDTH);
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    89
        return super.getWidth(observer);
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    90
    }
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    91
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    92
    @Override
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    93
    public int getHeight(ImageObserver observer) {
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    94
        updateInfo(observer, ImageObserver.HEIGHT);
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    95
        return super.getHeight(observer);
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    96
    }
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    97
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    98
    @Override
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
    99
    public Object getProperty(String name, ImageObserver observer) {
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   100
        updateInfo(observer, ImageObserver.PROPERTIES);
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   101
        return super.getProperty(name, observer);
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   102
    }
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   103
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   104
    @Override
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   105
    protected Image getBaseImage() {
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   106
        return getResolutionVariant(baseImageWidth, baseImageHeight);
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   107
    }
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   108
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   109
    private void updateInfo(ImageObserver observer, int info) {
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   110
        availableInfo |= (observer == null) ? ImageObserver.ALLBITS : info;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   111
    }
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   112
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   113
    private static int getInfo(Image image) {
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   114
        if (image instanceof ToolkitImage) {
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   115
            return ((ToolkitImage) image).getImageRep().check(
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   116
                    (img, infoflags, x, y, w, h) -> false);
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   117
        }
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   118
        return 0;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   119
    }
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   120
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   121
    private static void preload(Image image, int availableInfo) {
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   122
        if (availableInfo != 0 && image instanceof ToolkitImage) {
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   123
            ((ToolkitImage) image).preload(new ImageObserver() {
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   124
                int flags = availableInfo;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   125
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   126
                @Override
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   127
                public boolean imageUpdate(Image img, int infoflags,
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   128
                        int x, int y, int width, int height) {
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   129
                    flags &= ~infoflags;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   130
                    return (flags != 0) && ((infoflags
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   131
                            & (ImageObserver.ERROR | ImageObserver.ABORT)) == 0);
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   132
                }
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   133
            });
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   134
        }
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   135
    }
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   136
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   137
    private static class ImageCacheKey implements ImageCache.PixelsKey {
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   138
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   139
        private final int pixelCount;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   140
        private final int hash;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   141
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   142
        private final int w;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   143
        private final int h;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   144
        private final Image baseImage;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   145
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   146
        ImageCacheKey(final Image baseImage,
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   147
                final int w, final int h) {
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   148
            this.baseImage = baseImage;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   149
            this.w = w;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   150
            this.h = h;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   151
            this.pixelCount = w * h;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   152
            hash = hash();
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   153
        }
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   154
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   155
        @Override
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   156
        public int getPixelCount() {
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   157
            return pixelCount;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   158
        }
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   159
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   160
        private int hash() {
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   161
            int hash = baseImage.hashCode();
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   162
            hash = 31 * hash + w;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   163
            hash = 31 * hash + h;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   164
            return hash;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   165
        }
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   166
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   167
        @Override
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   168
        public int hashCode() {
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   169
            return hash;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   170
        }
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   171
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   172
        @Override
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   173
        public boolean equals(Object obj) {
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   174
            if (obj instanceof ImageCacheKey) {
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   175
                ImageCacheKey key = (ImageCacheKey) obj;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   176
                return baseImage == key.baseImage && w == key.w && h == key.h;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   177
            }
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   178
            return false;
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   179
        }
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   180
    }
24831bd48764 8040279: [macosx] Do not use the base image in the MultiResolutionBufferedImage
alexsch
parents:
diff changeset
   181
}