< prev index next >

src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java

Print this page

        

*** 98,107 **** --- 98,108 ---- import static java.awt.geom.AffineTransform.TYPE_FLIP; import static java.awt.geom.AffineTransform.TYPE_MASK_SCALE; import static java.awt.geom.AffineTransform.TYPE_TRANSLATION; import java.awt.image.VolatileImage; import sun.awt.image.MultiResolutionToolkitImage; + import sun.awt.image.MultiResolutionToolkitImage.ResolutionVariantItem; import sun.awt.image.ToolkitImage; /** * This is a the master Graphics2D superclass for all of the Sun * Graphics implementations. This class relies on subclasses to
*** 3128,3149 **** int width = img.getWidth(observer); int height = img.getHeight(observer); MultiResolutionImage mrImage = (MultiResolutionImage) img; ! Image resolutionVariant = getResolutionVariant(mrImage, width, height, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, xform); ! if (resolutionVariant != img && resolutionVariant != null) { // recalculate source region for the resolution variant ImageObserver rvObserver = MultiResolutionToolkitImage. getResolutionVariantObserver(img, observer, ! width, height, -1, -1); ! int rvWidth = resolutionVariant.getWidth(rvObserver); int rvHeight = resolutionVariant.getHeight(rvObserver); if (0 < width && 0 < height && 0 < rvWidth && 0 < rvHeight) { --- 3129,3154 ---- int width = img.getWidth(observer); int height = img.getHeight(observer); MultiResolutionImage mrImage = (MultiResolutionImage) img; ! ResolutionVariantItem rvItem = getResolutionVariant(mrImage, ! width, height, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, xform); ! ! if (rvItem != null) { // recalculate source region for the resolution variant + Image resolutionVariant = rvItem.getImage(); ImageObserver rvObserver = MultiResolutionToolkitImage. getResolutionVariantObserver(img, observer, ! rvItem.getScaleX(), ! rvItem.getScaleY(), ! false); int rvWidth = resolutionVariant.getWidth(rvObserver); int rvHeight = resolutionVariant.getHeight(rvObserver); if (0 < width && 0 < height && 0 < rvWidth && 0 < rvHeight) {
*** 3218,3228 **** } finally { surfaceData.markDirty(); } } ! private Image getResolutionVariant(MultiResolutionImage img, int srcWidth, int srcHeight, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, AffineTransform xform) { if (srcWidth <= 0 || srcHeight <= 0) { return null; --- 3223,3233 ---- } finally { surfaceData.markDirty(); } } ! private ResolutionVariantItem getResolutionVariant(MultiResolutionImage img, int srcWidth, int srcHeight, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, AffineTransform xform) { if (srcWidth <= 0 || srcHeight <= 0) { return null;
*** 3281,3301 **** } destImageWidth = Math.abs(srcWidth * destRegionWidth / sw); destImageHeight = Math.abs(srcHeight * destRegionHeight / sh); } ! Image resolutionVariant ! = img.getResolutionVariant(destImageWidth, destImageHeight); if (resolutionVariant instanceof ToolkitImage && ((ToolkitImage) resolutionVariant).hasError()) { return null; } ! return resolutionVariant; } /** * Draws an image scaled to x,y,w,h in nonblocking mode with a * callback object. */ public boolean drawImage(Image img, int x, int y, int width, int height, --- 3286,3327 ---- } destImageWidth = Math.abs(srcWidth * destRegionWidth / sw); destImageHeight = Math.abs(srcHeight * destRegionHeight / sh); } ! ResolutionVariantItem rvItem = getResolutionVariantItem( ! img, srcWidth, srcHeight, destImageWidth, destImageHeight); ! ! Image resolutionVariant = rvItem.getImage(); ! if (resolutionVariant == img) { ! return null; ! } if (resolutionVariant instanceof ToolkitImage && ((ToolkitImage) resolutionVariant).hasError()) { return null; } ! return rvItem; } + private static ResolutionVariantItem getResolutionVariantItem( + MultiResolutionImage img, + double srcWidth, double srcHeight, + double dstWidth, double dstHeight) { + + if (img instanceof MultiResolutionToolkitImage) { + return ((MultiResolutionToolkitImage) img) + .getResolutionVariantItem(dstWidth, dstHeight); + } + + Image resolutionVariant + = img.getResolutionVariant(dstWidth, dstHeight); + double sx = resolutionVariant.getWidth(null) / srcWidth; + double sy = resolutionVariant.getWidth(null) / srcHeight; + return new ResolutionVariantItem(resolutionVariant, sx, sy); + } /** * Draws an image scaled to x,y,w,h in nonblocking mode with a * callback object. */ public boolean drawImage(Image img, int x, int y, int width, int height,
< prev index next >