1 /* 2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 import java.awt.*; 25 import java.awt.MultipleGradientPaint.*; 26 import java.awt.geom.*; 27 import java.awt.image.*; 28 29 /** 30 * @test 31 * @bug 8023483 32 * @summary tests if the transform-parameter is applied correctly when creating 33 * a gradient. 34 * @author ceisserer 35 */ 36 public class GradientTransformTest extends Frame { 37 BufferedImage srcImg; 38 Image dstImg; 39 40 public GradientTransformTest() { 41 srcImg = createSrcImage(); 42 dstImg = getGraphicsConfiguration().createCompatibleVolatileImage(20, 43 20); 44 } 45 46 protected void renderToVI(BufferedImage src, Image dst) { 47 Graphics2D g = (Graphics2D) dst.getGraphics(); 48 49 g.setColor(Color.WHITE); 50 g.fillRect(0, 0, dst.getWidth(null), dst.getHeight(null)); 51 52 AffineTransform at = new AffineTransform(); 53 at.translate(-100, 0); 54 55 g.setPaint(new LinearGradientPaint(new Point2D.Float(100, 0), 56 new Point2D.Float(120, 0), new float[] { 0.0f, 0.75f, 1.0f }, 57 new Color[] { Color.red, Color.green, Color.blue }, 58 CycleMethod.NO_CYCLE, ColorSpaceType.SRGB, at)); 59 60 g.fillRect(-10, -10, 30, 30); 61 } 62 63 public void paint(Graphics g1) { 64 Graphics2D g = (Graphics2D) g1; 65 renderToVI(createSrcImage(), dstImg); 66 g.drawImage(dstImg, 20, 20, null); 67 } 68 69 public void showFrame() { 70 setSize(500, 500); 71 setVisible(true); 72 } 73 74 public void test() { 75 renderToVI(createSrcImage(), dstImg); 76 77 BufferedImage validationImg = new BufferedImage(20, 20, 78 BufferedImage.TYPE_INT_RGB); 79 Graphics2D valG = (Graphics2D) validationImg.getGraphics(); 80 valG.drawImage(dstImg, 0, 0, null); 81 82 // Loop over all pixel, and count the different pixel values 83 // encountered. 84 boolean gradientTranslated = false; 85 for (int x = 0; x < validationImg.getWidth() && !gradientTranslated; x++) { 86 for (int y = 0; y < validationImg.getHeight() 87 && !gradientTranslated; y++) { 88 int rgb = validationImg.getRGB(x, y); 89 if (rgb != -65279) { 90 gradientTranslated = true; 91 } 92 } 93 } 94 95 if (gradientTranslated) { 96 System.out.println("Passed!"); 97 } else { 98 throw new RuntimeException("Test FAILED!"); 99 } 100 } 101 102 protected BufferedImage createSrcImage() { 103 BufferedImage bi = new BufferedImage(10, 10, BufferedImage.TYPE_INT_RGB); 104 Graphics2D g = (Graphics2D) bi.getGraphics(); 105 g.setColor(Color.YELLOW); 106 g.fillRect(0, 0, 10, 10); 107 g.setColor(Color.black); 108 g.drawLine(0, 0, 10, 10); 109 return bi; 110 } 111 112 public static void main(String[] args) throws Exception { 113 boolean show = (args.length > 0 && "-show".equals(args[0])); 114 final GradientTransformTest t = new GradientTransformTest(); 115 116 if (show) { 117 EventQueue.invokeAndWait(new Runnable() { 118 public void run() { 119 t.showFrame(); 120 } 121 }); 122 } else { 123 t.test(); 124 } 125 } 126 }