/** * Copyright (c) 2004-2006 Regents of the University of California. * See "license-prefuse.txt" for licensing terms. */ package test; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Line2D; import java.awt.geom.Rectangle2D; import javax.swing.JComponent; import javax.swing.JFrame; /** * @author <a href="http://jheer.org">jeffrey heer</a> */ public class RenderingAccuracy extends JComponent { public RenderingAccuracy() { setPreferredSize(new Dimension(100,120)); setBackground(Color.WHITE); setForeground(new Color(100,100,255)); } public void paintComponent(Graphics g) { Graphics2D g2D = (Graphics2D)g; g2D.setColor(getBackground()); g2D.fillRect(0, 0, getWidth(), getHeight()); g2D.setColor(getForeground()); rects(g2D); lines(g2D); } public void rects(Graphics2D g2D) { Rectangle2D r = new Rectangle2D.Double(); double x = 10, y = 4; int inc = 5; // g2D.draw() - vary start coord for ( int i=0; i<=10; ++i ) { r.setFrame(x+i*0.1, y+5*i, 2, 3); g2D.draw(r); } x += inc; // g2D.draw() - vary width for ( int i=0; i<=10; ++i ) { r.setFrame(x, y+5*i, 2+i*0.1, 3); g2D.draw(r); } x += inc; // g2D.fill() - vary start coord for ( int i=0; i<=10; ++i ) { r.setFrame(x+i*0.1, y+5*i, 2, 3); g2D.fill(r); } x += inc; // g2D.fill() - vary width for ( int i=0; i<=10; ++i ) { r.setFrame(x, y+5*i, 2+i*0.1, 3); g2D.fill(r); } x += inc; x += inc; // optimized draw - vary start coord for ( int i=0; i<=10; ++i ) { r.setFrame(x+i*0.1, y+5*i, 2, 3); draw(g2D, r); } x += inc; // optimized draw - vary width for ( int i=0; i<=10; ++i ) { r.setFrame(x, y+5*i, 2+i*0.1, 3); draw(g2D, r); } x += inc; // optimized fill - vary start coord for ( int i=0; i<=10; ++i ) { r.setFrame(x+i*0.1, y+5*i, 2, 3); fill(g2D, r); } x += inc; // optimized fill - vary width for ( int i=0; i<=10; ++i ) { r.setFrame(x, y+5*i, 2+i*0.1, 3); fill(g2D, r); } x += inc; // -- next row ------------------------------- x = 10.35; y += 60; // g2D.draw() - vary start coord for ( int i=0; i<=10; ++i ) { r.setFrame(x+i*0.1, y+5*i, 2, 3); g2D.draw(r); } x += inc; // g2D.draw() - vary width for ( int i=0; i<=10; ++i ) { r.setFrame(x, y+5*i, 2+i*0.1, 3); g2D.draw(r); } x += inc; // g2D.fill() - vary start coord for ( int i=0; i<=10; ++i ) { r.setFrame(x+i*0.1, y+5*i, 2, 3); g2D.fill(r); } x += inc; // g2D.fill() - vary width for ( int i=0; i<=10; ++i ) { r.setFrame(x, y+5*i, 2+i*0.1, 3); g2D.fill(r); } x += inc; x += inc; // optimized draw - vary start coord for ( int i=0; i<=10; ++i ) { r.setFrame(x+i*0.1, y+5*i, 2, 3); draw(g2D, r); } x += inc; // optimized draw - vary width for ( int i=0; i<=10; ++i ) { r.setFrame(x, y+5*i, 2+i*0.1, 3); draw(g2D, r); } x += inc; // optimized fill - vary start coord for ( int i=0; i<=10; ++i ) { r.setFrame(x+i*0.1, y+5*i, 2, 3); fill(g2D, r); } x += inc; // optimized fill - vary width for ( int i=0; i<=10; ++i ) { r.setFrame(x, y+5*i, 2+i*0.1, 3); fill(g2D, r); } x += inc; } public void lines(Graphics2D g2D) { Line2D r = new Line2D.Double(); double x = 60, y = 4; int inc = 5; // g2D.draw() - vary start coord for ( int i=0; i<=10; ++i ) { double x1 = x+i*0.1; double y1 = y+5*i; r.setLine(x1, y1, x1+2, y1); g2D.draw(r); } x += inc; // g2D.draw() - vary width for ( int i=0; i<=10; ++i ) { double x2 = x + 2+i*0.1; double y1 = y+5*i; r.setLine(x, y1, x2, y1); g2D.draw(r); } x += inc; x += inc; // optimized draw - vary start coord for ( int i=0; i<=10; ++i ) { double x1 = x+i*0.1; double y1 = y+5*i; r.setLine(x1, y1, x1+2, y1); draw(g2D, r); } x += inc; // optimized draw - vary width for ( int i=0; i<=10; ++i ) { double x2 = x + 2+i*0.1; double y1 = y+5*i; r.setLine(x, y1, x2, y1); draw(g2D, r); } x += inc; // -- next row ------------------------------- x = 60+0.35; y += 60; // g2D.draw() - vary start coord for ( int i=0; i<=10; ++i ) { double x1 = x+i*0.1; double y1 = y+5*i; r.setLine(x1, y1, x1+2, y1); g2D.draw(r); } x += inc; // g2D.draw() - vary width for ( int i=0; i<=10; ++i ) { double x2 = x + 2+i*0.1; double y1 = y+5*i; r.setLine(x, y1, x2, y1); g2D.draw(r); } x += inc; x += inc; // optimized draw - vary start coord for ( int i=0; i<=10; ++i ) { double x1 = x+i*0.1; double y1 = y+5*i; r.setLine(x1, y1, x1+2, y1); draw(g2D, r); } x += inc; // optimized draw - vary width for ( int i=0; i<=10; ++i ) { double x2 = x + 2+i*0.1; double y1 = y+5*i; r.setLine(x, y1, x2, y1); draw(g2D, r); } x += inc; } public void draw(Graphics2D g, Line2D r) { int x1 = (int)r.getX1(); int y1 = (int)r.getY1(); int x2 = (int)r.getX2(); int y2 = (int)r.getY2(); g.drawLine(x1, y1, x2, y2); } public void draw(Graphics2D g, Rectangle2D r) { int x = (int)r.getMinX(); int y = (int)r.getMinY(); int w = (int)(r.getWidth() +r.getMinX()-x); int h = (int)(r.getHeight()+r.getMinY()-y); g.drawRect(x, y, w, h); } public void fill(Graphics2D g, Rectangle2D r) { int x = (int)r.getMinX(); int y = (int)r.getMinY(); int w = (int)(r.getWidth() +r.getMinX()-x); int h = (int)(r.getHeight()+r.getMinY()-y); g.fillRect(x, y, w, h); } /** * @param args */ public static void main(String[] args) { JFrame f = new JFrame("rendering accuracy"); f.setContentPane(new RenderingAccuracy()); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.pack(); f.setVisible(true); } }