/* * Copyright 2000-2013 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.pushingpixels.flamingo.internal.hidpi; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.ImageObserver; import java.awt.image.WritableRaster; import java.util.Hashtable; /** * @author Konstantin Bulenkov */ public class JBHiDPIScaledImage extends BufferedImage implements IsHiDpiAware { private final Image myImage; private int myWidth; // == myImage.width / scale private int myHeight; // == myImage.height / scale public JBHiDPIScaledImage(int width, int height, int type) { this(null, 2 * width, 2 * height, type); } public JBHiDPIScaledImage(Image image, int width, int height, int type) { // In case there's a delegate image, create a dummy wrapper image of 1x1 // size super(image != null ? 1 : width, image != null ? 1 : height, type); myImage = image; myWidth = width; myHeight = height; } public JBHiDPIScaledImage(ColorModel cm, WritableRaster raster, boolean isRasterPremultiplied, Hashtable<?, ?> properties, int width, int height) { super(cm, raster, isRasterPremultiplied, properties); myImage = null; myWidth = width; myHeight = height; } @Override public boolean isHiDpiAware() { return true; } public Image getDelegate() { return myImage; } @Override public int getWidth() { return myImage != null ? myWidth : super.getWidth(); } @Override public int getHeight() { return myImage != null ? myHeight : super.getHeight(); } @Override public int getWidth(ImageObserver observer) { return myImage != null ? myWidth : super.getWidth(observer); } @Override public int getHeight(ImageObserver observer) { return myImage != null ? myHeight : super.getHeight(observer); } @Override public Graphics2D createGraphics() { Graphics2D g = super.createGraphics(); if (myImage == null) { return new HiDPIScaledGraphics(g); } return g; } }