# HG changeset patch # User lana # Date 1309468608 25200 # Node ID 2b31e0e2570a53e7d05ee5dffa9fae82dcfd76f3 # Parent 8ccf113a66e741a8ae865cf98e5af4b95c50cb26# Parent 987fd92d04135c9c4b4e1ab7adb3e35c79308b67 Merge diff -r 8ccf113a66e7 -r 2b31e0e2570a jdk/src/share/classes/sun/font/TrueTypeFont.java --- a/jdk/src/share/classes/sun/font/TrueTypeFont.java Mon Jun 27 14:10:46 2011 -0700 +++ b/jdk/src/share/classes/sun/font/TrueTypeFont.java Thu Jun 30 14:16:48 2011 -0700 @@ -106,7 +106,7 @@ private static Map lcidMap; - class DirectoryEntry { + static class DirectoryEntry { int tag; int offset; int length; diff -r 8ccf113a66e7 -r 2b31e0e2570a jdk/src/share/classes/sun/java2d/loops/Blit.java --- a/jdk/src/share/classes/sun/java2d/loops/Blit.java Mon Jun 27 14:10:46 2011 -0700 +++ b/jdk/src/share/classes/sun/java2d/loops/Blit.java Thu Jun 30 14:16:48 2011 -0700 @@ -172,11 +172,11 @@ while (si.nextSpan(span)) { int w = span[2] - span[0]; int h = span[3] - span[1]; - srcRas = srcRas.createChild(srcx + span[0], srcy + span[1], - w, h, 0, 0, null); - dstRas = dstRas.createWritableChild(span[0], span[1], - w, h, 0, 0, null); - ctx.compose(srcRas, dstRas, dstRas); + Raster tmpSrcRas = srcRas.createChild(srcx + span[0], srcy + span[1], + w, h, 0, 0, null); + WritableRaster tmpDstRas = dstRas.createWritableChild(span[0], span[1], + w, h, 0, 0, null); + ctx.compose(tmpSrcRas, tmpDstRas, tmpDstRas); } ctx.dispose(); } diff -r 8ccf113a66e7 -r 2b31e0e2570a jdk/test/sun/java2d/loops/Bug7049339.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/java2d/loops/Bug7049339.java Thu Jun 30 14:16:48 2011 -0700 @@ -0,0 +1,77 @@ +/* + * Copyright 2011 Red Hat, Inc. All Rights Reserved. + * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + @test + @bug 7049339 + @summary Copying images with a non-rectangular clip and a custom composite + fails + @author Denis Lila + @run main Bug7049339 + */ + +import java.awt.Composite; +import java.awt.CompositeContext; +import java.awt.Graphics2D; +import java.awt.RenderingHints; +import java.awt.Shape; +import java.awt.geom.Ellipse2D; +import java.awt.image.BufferedImage; +import java.awt.image.ColorModel; +import java.awt.image.Raster; +import java.awt.image.WritableRaster; + +public class Bug7049339 { + public static void main(String[] argv) { + int x = 100, y = 100; + BufferedImage src = new BufferedImage(x, y, BufferedImage.TYPE_INT_ARGB); + BufferedImage dst = new BufferedImage(x, y, BufferedImage.TYPE_3BYTE_BGR); + + Graphics2D dstg2d = dst.createGraphics(); + dstg2d.setComposite(new Composite() { + @Override + public CompositeContext createContext( + ColorModel srcColorModel, + ColorModel dstColorModel, + RenderingHints hints) + { + return new CompositeContext() { + @Override + public void compose(Raster src, Raster dstIn, + WritableRaster dstOut) + { + // do nothing + } + @Override + public void dispose() { + } + }; + } + }); + Shape clip = new Ellipse2D.Double(x/4, y/4, x/2, y/2); + dstg2d.setClip(clip); + // This will throw a RasterFormatException if the bug is present. + dstg2d.drawImage(src, 0, 0, null); + } +}