Request for backport
Dr Andrew John Hughes
ahughes at redhat.com
Thu Feb 17 08:58:40 PST 2011
On 16:47 Wed 16 Feb , Denis Lila wrote:
> Hi.
>
> I would like to backport these two changesets:
>
> http://hg.openjdk.java.net/jdk7/2d/jdk/rev/a56641c1f54e
> http://hg.openjdk.java.net/jdk7/2d/jdk/rev/3bc4d79d8123
>
> They fix a couple of bugs, add a test and make
> patches/openjdk/6896068-sg2d.patch apply more cleanly.
>
> Ok to push?
>
> Thank you,
> Denis.
Looks good to me. Thanks for keeping on top of these backports.
> diff -r 3f247fe29393 ChangeLog
> --- a/ChangeLog Wed Feb 16 22:23:50 2011 +0100
> +++ b/ChangeLog Wed Feb 16 16:49:54 2011 -0500
> @@ -1,3 +1,10 @@
> +2011-02-16 Denis Lila <dlila at redhat.com>
> +
> + * NEWS: Update with the backports
> + * Makefile.am (ICEDTEA_PATCHES): Added the 2 patches
> + * patches/openjdk/6728834-blurred-lcd-aa-text.patch
> + * patches/openjdk/6749060-bad-lcd-aa-non-opaque-dest.patch
> +
> 2011-02-16 Xerxes Ranby <xerxes at zafena.se>
> Mark Wielaard <mark at klomp.org>
>
> diff -r 3f247fe29393 Makefile.am
> --- a/Makefile.am Wed Feb 16 22:23:50 2011 +0100
> +++ b/Makefile.am Wed Feb 16 16:49:54 2011 -0500
> @@ -304,6 +304,8 @@
> patches/no-static-linking.patch \
> patches/rh676659-gcc-export-dynamic.patch \
> patches/g344659-sparc_fix.patch \
> + patches/openjdk/6728834-blurred-lcd-aa-text.patch \
> + patches/openjdk/6749060-bad-lcd-aa-non-opaque-dest.patch \
> patches/openjdk/6896068-sg2d.patch
>
> if !WITH_ALT_HSBUILD
> diff -r 3f247fe29393 NEWS
> --- a/NEWS Wed Feb 16 22:23:50 2011 +0100
> +++ b/NEWS Wed Feb 16 16:49:54 2011 -0500
> @@ -419,6 +419,8 @@
> - S7017581: missing copyright header in test/sun/java2d/pipe/RegionOps.java
> - S6896068: SunGraphics2D exposes a reference to itself while non fully initialised.
> - PR632: patches/security/20110215/6878713.patch breaks shark zero build
> + - S6749060: LCD AA text rendered incorrectly when destination is non opaque (sw pipeline only)
> + - S6728834: D3D/OGL: LCD AA text becomes bold and blurred when rendering to a non-opaque destination
> * Bug fixes
> - RH661505: JPEGs with sRGB IEC61966-2.1 color profiles have wrong colors
> - PR616, PR99: Don't statically link libstdc++ or libgcc
> diff -r 3f247fe29393 patches/openjdk/6728834-blurred-lcd-aa-text.patch
> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> +++ b/patches/openjdk/6728834-blurred-lcd-aa-text.patch Wed Feb 16 16:49:54 2011 -0500
> @@ -0,0 +1,226 @@
> +# HG changeset patch
> +# User tdv
> +# Date 1217874568 25200
> +# Node ID a56641c1f54e4a81a42ca755a952fd772c14a511
> +# Parent e62bc7b05b8a7cd11d7e76f1c29cf07f0c3c7d34
> +6728834: D3D/OGL: LCD AA text becomes bold and blurred when rendering to a non-opaque destination
> +Reviewed-by: campbell
> +
> +diff -r e62bc7b05b8a -r a56641c1f54e src/share/classes/sun/java2d/opengl/OGLSurfaceData.java
> +--- openjdk.orig/jdk/src/share/classes/sun/java2d/opengl/OGLSurfaceData.java Mon Aug 04 18:50:43 2008 +0400
> ++++ openjdk/jdk/src/share/classes/sun/java2d/opengl/OGLSurfaceData.java Mon Aug 04 11:29:28 2008 -0700
> +@@ -401,6 +401,7 @@
> + * - the fragment shader extension is available, and
> + * - blending is disabled, and
> + * - the source color is opaque
> ++ * - and the destination is opaque
> + *
> + * Eventually, we could enhance the native OGL text rendering code
> + * and remove the above restrictions, but that would require significantly
> +@@ -410,7 +411,8 @@
> + return
> + graphicsConfig.isCapPresent(CAPS_EXT_LCD_SHADER) &&
> + sg2d.compositeState <= SunGraphics2D.COMP_ISCOPY &&
> +- sg2d.paintState <= SunGraphics2D.PAINT_OPAQUECOLOR;
> ++ sg2d.paintState <= SunGraphics2D.PAINT_OPAQUECOLOR &&
> ++ sg2d.surfaceData.getTransparency() == Transparency.OPAQUE;
> + }
> +
> + public void validatePipe(SunGraphics2D sg2d) {
> +diff -r e62bc7b05b8a -r a56641c1f54e src/windows/classes/sun/java2d/d3d/D3DSurfaceData.java
> +--- openjdk.orig/jdk/src/windows/classes/sun/java2d/d3d/D3DSurfaceData.java Mon Aug 04 18:50:43 2008 +0400
> ++++ openjdk/jdk/src/windows/classes/sun/java2d/d3d/D3DSurfaceData.java Mon Aug 04 11:29:28 2008 -0700
> +@@ -501,12 +501,14 @@
> + * - the pixel shaders are available, and
> + * - blending is disabled, and
> + * - the source color is opaque
> ++ * - and the destination is opaque
> + */
> + public boolean canRenderLCDText(SunGraphics2D sg2d) {
> + return
> + graphicsDevice.isCapPresent(CAPS_LCD_SHADER) &&
> + sg2d.compositeState <= SunGraphics2D.COMP_ISCOPY &&
> +- sg2d.paintState <= SunGraphics2D.PAINT_OPAQUECOLOR;
> ++ sg2d.paintState <= SunGraphics2D.PAINT_OPAQUECOLOR &&
> ++ sg2d.surfaceData.getTransparency() == Transparency.OPAQUE;
> + }
> +
> + public void validatePipe(SunGraphics2D sg2d) {
> +diff -r e62bc7b05b8a -r a56641c1f54e test/sun/java2d/DirectX/NonOpaqueDestLCDAATest/NonOpaqueDestLCDAATest.java
> +--- /dev/null Thu Jan 01 00:00:00 1970 +0000
> ++++ openjdk/jdk/test/sun/java2d/DirectX/NonOpaqueDestLCDAATest/NonOpaqueDestLCDAATest.java Mon Aug 04 11:29:28 2008 -0700
> +@@ -0,0 +1,174 @@
> ++/*
> ++ * Copyright 2008 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
> ++ * CA 95054 USA or visit www.sun.com if you need additional information or
> ++ * have any questions.
> ++ */
> ++
> ++/*
> ++ * @test
> ++ * @bug 6728834
> ++ * @summary Tests that LCD AA text rendering works properly with destinations
> ++ * being VolatileImage of all transparency types
> ++ * @author Dmitri.Trembovetski: area=Graphics
> ++ * @run main/manual/othervm NonOpaqueDestLCDAATest
> ++ * @run main/manual/othervm -Dsun.java2d.opengl=True NonOpaqueDestLCDAATest
> ++ */
> ++
> ++import java.awt.AlphaComposite;
> ++import java.awt.Color;
> ++import java.awt.Dimension;
> ++import java.awt.EventQueue;
> ++import java.awt.Graphics;
> ++import java.awt.Graphics2D;
> ++import java.awt.GraphicsConfiguration;
> ++import java.awt.RenderingHints;
> ++import java.awt.event.ActionEvent;
> ++import java.awt.event.ActionListener;
> ++import java.awt.event.ComponentAdapter;
> ++import java.awt.event.ComponentEvent;
> ++import java.awt.event.WindowAdapter;
> ++import java.awt.event.WindowEvent;
> ++import java.awt.image.VolatileImage;
> ++import java.io.File;
> ++import java.util.concurrent.CountDownLatch;
> ++import javax.imageio.ImageIO;
> ++import javax.swing.JButton;
> ++import javax.swing.JFrame;
> ++import javax.swing.JPanel;
> ++import javax.swing.JTextArea;
> ++import static java.awt.Transparency.*;
> ++
> ++public class NonOpaqueDestLCDAATest extends JFrame implements ActionListener {
> ++ private static volatile boolean passed = true;
> ++ private static CountDownLatch complete = new CountDownLatch(1);
> ++
> ++ public NonOpaqueDestLCDAATest() {
> ++ JTextArea desc = new JTextArea();
> ++ desc.setText(
> ++ "\n Instructions: the three text strings below should appear\n" +
> ++ " readable, without smudges or misshapen bold glyphs.\n\n" +
> ++ " If they look fine the test PASSED otherwise it FAILED.\n");
> ++ desc.setEditable(false);
> ++ desc.setBackground(Color.black);
> ++ desc.setForeground(Color.green);
> ++ add("North", desc);
> ++ JPanel renderPanel = new JPanel() {
> ++ public void paintComponent(Graphics g) {
> ++ render(g, getWidth(), getHeight());
> ++ }
> ++ };
> ++ renderPanel.setPreferredSize(new Dimension(350, 150));
> ++ renderPanel.addComponentListener(new ComponentAdapter() {
> ++ public void componentResized(ComponentEvent e) {
> ++ images = null;
> ++ }
> ++ });
> ++ add("Center", renderPanel);
> ++
> ++ JButton passed = new JButton("Passed");
> ++ JButton failed = new JButton("Failed");
> ++ passed.addActionListener(this);
> ++ failed.addActionListener(this);
> ++ JPanel p = new JPanel();
> ++ p.add(passed);
> ++ p.add(failed);
> ++ add("South", p);
> ++ addWindowListener(new WindowAdapter() {
> ++ public void windowClosing(WindowEvent e) {
> ++ complete.countDown();
> ++ }
> ++ });
> ++ setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
> ++ }
> ++
> ++ public void render(Graphics g, int w, int h) {
> ++ initImages(w, h);
> ++
> ++ Graphics2D g2d = (Graphics2D) g.create();
> ++ for (VolatileImage vi : images) {
> ++ g2d.drawImage(vi, 0, 0, null);
> ++ g2d.translate(0, vi.getHeight());
> ++ }
> ++ }
> ++
> ++ String tr[] = { "OPAQUE", "BITMASK", "TRANSLUCENT" };
> ++ public void actionPerformed(ActionEvent e) {
> ++ if (e.getActionCommand().equals("Passed")) {
> ++ passed = true;
> ++ System.out.println("Test Passed");
> ++ } else if (e.getActionCommand().equals("Failed")) {
> ++ System.out.println("Test Failed");
> ++ for (int i = 0; i < images.length; i++) {
> ++ String f = "NonOpaqueDestLCDAATest_"+tr[i]+".png";
> ++ try {
> ++ ImageIO.write(images[i].getSnapshot(), "png", new File(f));
> ++ System.out.printf("Dumped %s image to %s\n", tr[i], f);
> ++ } catch (Throwable t) {}
> ++ }
> ++ passed = false;
> ++ }
> ++ dispose();
> ++ complete.countDown();
> ++ }
> ++
> ++ static void clear(Graphics2D g, int w, int h) {
> ++ Graphics2D gg = (Graphics2D) g.create();
> ++ gg.setColor(new Color(0, 0, 0, 0));
> ++ gg.setComposite(AlphaComposite.Src);
> ++ gg.fillRect(0, 0, w, h);
> ++ }
> ++
> ++ VolatileImage images[];
> ++ private void initImages(int w, int h) {
> ++ if (images == null) {
> ++ images = new VolatileImage[3];
> ++ GraphicsConfiguration gc = getGraphicsConfiguration();
> ++ for (int i = OPAQUE; i <= TRANSLUCENT; i++) {
> ++ VolatileImage vi =
> ++ gc.createCompatibleVolatileImage(w,h/3,i);
> ++ images[i-1] = vi;
> ++ vi.validate(gc);
> ++ Graphics2D g2d = (Graphics2D) vi.getGraphics();
> ++ if (i > OPAQUE) {
> ++ clear(g2d, vi.getWidth(), vi.getHeight());
> ++ }
> ++ g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
> ++ RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
> ++ String s = "LCD AA Text rendered to "+tr[i-1]+ " destination";
> ++ g2d.drawString(s, 10, vi.getHeight()/2);
> ++ }
> ++ }
> ++ }
> ++
> ++ public static void main(String[] args) throws InterruptedException {
> ++ EventQueue.invokeLater(new Runnable() {
> ++ public void run() {
> ++ NonOpaqueDestLCDAATest t = new NonOpaqueDestLCDAATest();
> ++ t.pack();
> ++ t.setVisible(true);
> ++ }
> ++ });
> ++
> ++ complete.await();
> ++ if (!passed) {
> ++ throw new RuntimeException("Test Failed!");
> ++ }
> ++ }
> ++}
> diff -r 3f247fe29393 patches/openjdk/6749060-bad-lcd-aa-non-opaque-dest.patch
> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> +++ b/patches/openjdk/6749060-bad-lcd-aa-non-opaque-dest.patch Wed Feb 16 16:49:54 2011 -0500
> @@ -0,0 +1,219 @@
> +# HG changeset patch
> +# User tdv
> +# Date 1223597570 25200
> +# Node ID 3bc4d79d8123bbc0307e0e58f7c64ee663e25af9
> +# Parent 41ff3f84cd9608ef1b4ecd0a823a8ff188712784
> +6749060: LCD AA text rendered incorrectly when destination is non opaque (sw pipeline only)
> +Reviewed-by: campbell, prr
> +
> +diff -r 41ff3f84cd96 -r 3bc4d79d8123 src/share/classes/sun/java2d/SurfaceData.java
> +--- openjdk.orig/jdk/src/share/classes/sun/java2d/SurfaceData.java Wed Sep 24 11:58:21 2008 -0700
> ++++ openjdk/jdk/src/share/classes/sun/java2d/SurfaceData.java Thu Oct 09 17:12:50 2008 -0700
> +@@ -449,7 +449,8 @@
> + // For now the answer can only be true in the following cases:
> + if (sg2d.compositeState <= SunGraphics2D.COMP_ISCOPY &&
> + sg2d.paintState <= SunGraphics2D.PAINT_ALPHACOLOR &&
> +- sg2d.clipState <= SunGraphics2D.CLIP_RECTANGULAR)
> ++ sg2d.clipState <= SunGraphics2D.CLIP_RECTANGULAR &&
> ++ sg2d.surfaceData.getTransparency() == Transparency.OPAQUE)
> + {
> + if (haveLCDLoop == LCDLOOP_UNKNOWN) {
> + DrawGlyphListLCD loop =
> +diff -r 41ff3f84cd96 -r 3bc4d79d8123 test/sun/java2d/DirectX/NonOpaqueDestLCDAATest/NonOpaqueDestLCDAATest.java
> +--- openjdk.orig/jdk/test/sun/java2d/DirectX/NonOpaqueDestLCDAATest/NonOpaqueDestLCDAATest.java Wed Sep 24 11:58:21 2008 -0700
> ++++ openjdk/jdk/test/sun/java2d/DirectX/NonOpaqueDestLCDAATest/NonOpaqueDestLCDAATest.java Thu Oct 09 17:12:50 2008 -0700
> +@@ -23,10 +23,11 @@
> +
> + /*
> + * @test
> +- * @bug 6728834
> ++ * @bug 6728834 6749060
> + * @summary Tests that LCD AA text rendering works properly with destinations
> + * being VolatileImage of all transparency types
> + * @author Dmitri.Trembovetski: area=Graphics
> ++ * @run main/manual/othervm -Dsun.java2d.d3d=false NonOpaqueDestLCDAATest
> + * @run main/manual/othervm NonOpaqueDestLCDAATest
> + * @run main/manual/othervm -Dsun.java2d.opengl=True NonOpaqueDestLCDAATest
> + */
> +@@ -35,9 +36,11 @@
> + import java.awt.Color;
> + import java.awt.Dimension;
> + import java.awt.EventQueue;
> ++import java.awt.Font;
> + import java.awt.Graphics;
> + import java.awt.Graphics2D;
> + import java.awt.GraphicsConfiguration;
> ++import java.awt.Image;
> + import java.awt.RenderingHints;
> + import java.awt.event.ActionEvent;
> + import java.awt.event.ActionListener;
> +@@ -45,6 +48,7 @@
> + import java.awt.event.ComponentEvent;
> + import java.awt.event.WindowAdapter;
> + import java.awt.event.WindowEvent;
> ++import java.awt.image.BufferedImage;
> + import java.awt.image.VolatileImage;
> + import java.io.File;
> + import java.util.concurrent.CountDownLatch;
> +@@ -62,35 +66,43 @@
> + public NonOpaqueDestLCDAATest() {
> + JTextArea desc = new JTextArea();
> + desc.setText(
> +- "\n Instructions: the three text strings below should appear\n" +
> +- " readable, without smudges or misshapen bold glyphs.\n\n" +
> +- " If they look fine the test PASSED otherwise it FAILED.\n");
> ++ "\n Instructions: the three text strings below should appear" +
> ++ " readable, without smudges or misshapen bold glyphs.\n" +
> ++ " You may need a magnifier to notice some bad colorfringing in "+
> ++ " in SW Translucent case, especially in vertical stems.\n\n"+
> ++ " Basically text rendered to TRANSLUCENT destination should look"+
> ++ " similar to one rendered to OPAQUE - it may differ in whether or" +
> ++ " not it's LCD, but it should look 'correct'\n\n"+
> ++ "If the text looks fine the test PASSED otherwise it FAILED.\n");
> + desc.setEditable(false);
> + desc.setBackground(Color.black);
> + desc.setForeground(Color.green);
> + add("North", desc);
> + JPanel renderPanel = new JPanel() {
> ++ @Override
> + public void paintComponent(Graphics g) {
> + render(g, getWidth(), getHeight());
> + }
> + };
> +- renderPanel.setPreferredSize(new Dimension(350, 150));
> ++ renderPanel.setPreferredSize(new Dimension(1024, 650));
> + renderPanel.addComponentListener(new ComponentAdapter() {
> ++ @Override
> + public void componentResized(ComponentEvent e) {
> + images = null;
> + }
> + });
> + add("Center", renderPanel);
> +
> +- JButton passed = new JButton("Passed");
> +- JButton failed = new JButton("Failed");
> +- passed.addActionListener(this);
> +- failed.addActionListener(this);
> ++ JButton passedBtn = new JButton("Passed");
> ++ JButton failedBtn = new JButton("Failed");
> ++ passedBtn.addActionListener(this);
> ++ failedBtn.addActionListener(this);
> + JPanel p = new JPanel();
> +- p.add(passed);
> +- p.add(failed);
> ++ p.add(passedBtn);
> ++ p.add(failedBtn);
> + add("South", p);
> + addWindowListener(new WindowAdapter() {
> ++ @Override
> + public void windowClosing(WindowEvent e) {
> + complete.countDown();
> + }
> +@@ -101,14 +113,18 @@
> + public void render(Graphics g, int w, int h) {
> + initImages(w, h);
> +
> ++ g.setColor(new Color(0xAD, 0xD8, 0xE6));
> ++ g.fillRect(0, 0, w, h);
> ++
> + Graphics2D g2d = (Graphics2D) g.create();
> +- for (VolatileImage vi : images) {
> +- g2d.drawImage(vi, 0, 0, null);
> +- g2d.translate(0, vi.getHeight());
> ++ for (Image im : images) {
> ++ g2d.drawImage(im, 0, 0, null);
> ++ g2d.translate(0, im.getHeight(null));
> + }
> + }
> +
> + String tr[] = { "OPAQUE", "BITMASK", "TRANSLUCENT" };
> ++ @Override
> + public void actionPerformed(ActionEvent e) {
> + if (e.getActionCommand().equals("Passed")) {
> + passed = true;
> +@@ -116,9 +132,17 @@
> + } else if (e.getActionCommand().equals("Failed")) {
> + System.out.println("Test Failed");
> + for (int i = 0; i < images.length; i++) {
> +- String f = "NonOpaqueDestLCDAATest_"+tr[i]+".png";
> ++ String f = "NonOpaqueDestLCDAATest_"+tr[i];
> + try {
> +- ImageIO.write(images[i].getSnapshot(), "png", new File(f));
> ++ if (images[i] instanceof VolatileImage) {
> ++ f += "_vi.png";
> ++ ImageIO.write(((VolatileImage)images[i]).
> ++ getSnapshot(), "png", new File(f));
> ++ } else {
> ++ f += "_bi.png";
> ++ ImageIO.write((BufferedImage)images[i],
> ++ "png", new File(f));
> ++ }
> + System.out.printf("Dumped %s image to %s\n", tr[i], f);
> + } catch (Throwable t) {}
> + }
> +@@ -128,37 +152,51 @@
> + complete.countDown();
> + }
> +
> +- static void clear(Graphics2D g, int w, int h) {
> ++ static void clear(Graphics2D g, int type, int w, int h) {
> + Graphics2D gg = (Graphics2D) g.create();
> +- gg.setColor(new Color(0, 0, 0, 0));
> +- gg.setComposite(AlphaComposite.Src);
> ++ if (type > OPAQUE) {
> ++ gg.setColor(new Color(0, 0, 0, 0));
> ++ gg.setComposite(AlphaComposite.Src);
> ++ } else {
> ++ gg.setColor(new Color(0xAD, 0xD8, 0xE6));
> ++ }
> + gg.fillRect(0, 0, w, h);
> + }
> +
> +- VolatileImage images[];
> ++ private void render(Image im, int type, String s) {
> ++ Graphics2D g2d = (Graphics2D) im.getGraphics();
> ++ clear(g2d, type, im.getWidth(null), im.getHeight(null));
> ++ g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
> ++ RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
> ++ Font f = new Font("Dialog", Font.BOLD, 40);// g2d.getFont().deriveFont(32.0f);
> ++ g2d.setColor(Color.white);
> ++ g2d.setFont(g2d.getFont().deriveFont(36.0f));
> ++ g2d.drawString(s, 10, im.getHeight(null) / 2);
> ++ }
> ++
> ++ Image images[];
> + private void initImages(int w, int h) {
> + if (images == null) {
> +- images = new VolatileImage[3];
> ++ images = new Image[6];
> + GraphicsConfiguration gc = getGraphicsConfiguration();
> + for (int i = OPAQUE; i <= TRANSLUCENT; i++) {
> + VolatileImage vi =
> +- gc.createCompatibleVolatileImage(w,h/3,i);
> ++ gc.createCompatibleVolatileImage(w,h/images.length,i);
> + images[i-1] = vi;
> + vi.validate(gc);
> +- Graphics2D g2d = (Graphics2D) vi.getGraphics();
> +- if (i > OPAQUE) {
> +- clear(g2d, vi.getWidth(), vi.getHeight());
> +- }
> +- g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
> +- RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
> +- String s = "LCD AA Text rendered to "+tr[i-1]+ " destination";
> +- g2d.drawString(s, 10, vi.getHeight()/2);
> ++ String s = "LCD AA Text rendered to " + tr[i - 1] + " HW destination";
> ++ render(vi, i, s);
> ++
> ++ s = "LCD AA Text rendered to " + tr[i - 1] + " SW destination";
> ++ images[i-1+3] = gc.createCompatibleImage(w, h/images.length, i);
> ++ render(images[i-1+3], i, s);
> + }
> + }
> + }
> +
> + public static void main(String[] args) throws InterruptedException {
> + EventQueue.invokeLater(new Runnable() {
> ++ @Override
> + public void run() {
> + NonOpaqueDestLCDAATest t = new NonOpaqueDestLCDAATest();
> + t.pack();
--
Andrew :)
Free Java Software Engineer
Red Hat, Inc. (http://www.redhat.com)
Support Free Java!
Contribute to GNU Classpath and IcedTea
http://www.gnu.org/software/classpath
http://icedtea.classpath.org
PGP Key: F5862A37 (https://keys.indymedia.org/)
Fingerprint = EA30 D855 D50F 90CD F54D 0698 0713 C3ED F586 2A37
More information about the distro-pkg-dev
mailing list