// Copyright 2002-2007, FreeHEP.
package org.freehep.graphicsio.test;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Insets;
import java.awt.MediaTracker;
import java.awt.TexturePaint;
import java.awt.Rectangle;
import java.awt.font.TextAttribute;
import java.awt.geom.GeneralPath;
import java.awt.geom.Rectangle2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.text.AttributedString;
import org.freehep.graphics2d.TagString;
import org.freehep.graphics2d.VectorGraphics;
import org.freehep.graphics2d.VectorGraphicsConstants;
import org.freehep.util.images.ImageHandler;
/**
* @author Simon Fischer
* @version $Id: TestAll.java 10306 2007-01-13 00:45:55Z duns $
*/
public class TestAll extends TestingPanel implements VectorGraphicsConstants {
private BufferedImage marble, sky;
private static float[] dash = { 10.f, 5.f, 2.f, 5.f };
public TestAll(String[] args) throws Exception {
super(args);
setName("All");
}
public void paintComponent(Graphics g) {
if (g == null)
return;
if (marble == null) {
MediaTracker t = new MediaTracker(this);
Image skyI = ImageHandler.getImage("images/sky.gif", TestAll.class);
t.addImage(skyI, 0);
try {
t.waitForAll();
} catch (Exception e) {
e.printStackTrace();
}
sky = new BufferedImage(skyI.getWidth(this), skyI.getHeight(this),
BufferedImage.TYPE_INT_RGB);
sky.createGraphics().drawImage(skyI, 0, 0, this);
}
VectorGraphics vg = VectorGraphics.create(g);
// Rectangle dim = vg.getClip().getBounds();
Dimension dim = getSize();
Insets insets = getInsets();
double width = dim.getWidth();
double height = dim.getHeight();
vg.setColor(Color.white);
vg.fillRect(insets.left, insets.top, dim.width - insets.left
- insets.right, dim.height - insets.top - insets.bottom);
vg.setPaint(new GradientPaint((int) 0, (int) 10, Color.blue,
(int) width, (int) 10, Color.white));
vg.fillRect(0, 10, width, 30);
vg.setFont(new Font("Helvetica", Font.BOLD, 18));
vg.setPaint(new GradientPaint((int) 0, (int) 10, Color.white,
(int) width, (int) 10, Color.orange));
String str = "Testing " + vg.getClass().getName();
vg.drawString(str, 10, 30);
double fx = 3 * width / 16;
double fy = 5 * height / 16;
double fw = width / 4;
for (int i = 0; i < 15; i++) {
vg.setColor(Color.black);
vg.fillRect(fx - fw / 2, fy - fw / 2, fw, fw);
vg.setColor(Color.white);
vg.fillOval(fx - fw / 2, fy - fw / 2, fw, fw);
fw /= Math.sqrt(2);
}
vg.setColor(Color.black);
vg.setFont(new Font("TimesRoman", Font.PLAIN, 11));
// vg.setFont(new Font("Arial", Font.PLAIN, 11));
vg.drawString(
new TagString("The drawString methods in VectorGraphics support"),
fx + 3 * width / 16,
fy - width / 8 + 10);
vg.drawString(
new TagString("output of strings using a subset of the HTML language."),
fx + 3 * width / 16,
fy - width / 8 + 24);
String text = "The direct output of attributed strings is supported too.";
AttributedString as = new AttributedString(text);
as.addAttribute(
TextAttribute.FAMILY,
"TimesRoman");
as.addAttribute(
TextAttribute.SIZE,
new Float(11));
// make "output" italic
as.addAttribute(
TextAttribute.POSTURE,
TextAttribute.POSTURE_OBLIQUE,
text.indexOf("output"),
text.indexOf("output") + "output".length());
// make "attributed" bold
as.addAttribute(
TextAttribute.WEIGHT,
TextAttribute.WEIGHT_BOLD,
text.indexOf("attributed"),
text.indexOf("attributed") + "attributed".length());
// make "supported" bold
as.addAttribute(
TextAttribute.TRANSFORM,
AffineTransform.getTranslateInstance(0, 5),
text.indexOf("supported"),
text.indexOf("supported") + "supported".length());
as.addAttribute(
TextAttribute.FOREGROUND,
Color.red,
text.indexOf("strings"),
text.indexOf("strings") + "strings".length());
as.addAttribute(
TextAttribute.BACKGROUND,
new TexturePaint(sky, new Rectangle(0, 0, 100, 100)),
text.indexOf("direct"),
text.indexOf("direct") + "direct".length());
vg.drawString(
as.getIterator(),
(float)(fx + 3 * width / 16),
(float)(fy - width / 8 + 38));
vg.setColor(Color.red);
double sx = width / 2;
double sy = 5 * height / 16;
for (int i = 0; i < NUMBER_OF_SYMBOLS; i++) {
vg.drawSymbol(sx + 15 * i, sy, 12, i);
vg.fillSymbol(sx + 15 * i, sy + 15, 10, i);
}
vg.setPaint(new TexturePaint(sky, new Rectangle2D.Double(0, 0, sky
.getWidth(), sky.getHeight())));
double mx = 0;
double my = height / 2;
vg.fillRect(mx, my, width / 2, height / 2);
vg.setPaint(Color.black);
vg.setFont(new Font("Impact", Font.BOLD, 60));
vg.drawString("\u25C4Impact\u25BA", mx + width / 4, my + height / 4,
VectorGraphicsConstants.TEXT_CENTER, VectorGraphicsConstants.TEXT_BASELINE);
GeneralPath shape = new GeneralPath();
shape.moveTo(0.f, 0.f);
shape.lineTo(25.f, 50.f);
shape.lineTo(-25.f, 50.f);
shape.lineTo(25.f, -50.f);
shape.lineTo(-25.f, -50.f);
shape.closePath();
Graphics subgraphics = vg.create();
VectorGraphics svg = VectorGraphics.create(subgraphics);
svg.translate(width / 2, height / 2);
svg.setStroke(new BasicStroke(8.f, BasicStroke.CAP_BUTT,
BasicStroke.JOIN_BEVEL, 10.f, null, 0.f));
svg.draw(shape);
subgraphics = svg.create();
VectorGraphics svg2 = VectorGraphics.create(subgraphics);
svg2.setColor(Color.black);
svg2.setStroke(new BasicStroke(3.f, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND, 10.f, dash, 0.f));
svg2.rotate(Math.PI / 5);
svg2.draw(shape);
svg2.dispose();
svg.setLineWidth(1);
svg.shear(0.5, 0.5);
svg.draw(shape);
svg.dispose();
subgraphics = vg.create();
svg = VectorGraphics.create(subgraphics);
double tx = 3 * width / 4;
double ty = 3 * height / 4;
double d = width / 10;
svg.setColor(Color.black);
svg.translate(tx, ty);
svg.fillOval(-d, -d, 2 * d, 2 * d);
svg.setStroke(new BasicStroke(4.f, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND, 10.f, null, 0.f));
svg.drawOval(-1.4 * d, -1.4 * d, 1.4 * 2 * d, 1.4 * 2 * d);
String circle = "ORAETLAB";
svg.setFont(new Font("TimesRoman", Font.BOLD, 16));
for (int i = 0; i < circle.length(); i++) {
svg.drawString(circle.substring(i, i + 1), 0, -1.1 * d);
svg.rotate(Math.PI * 2 / circle.length());
}
svg.dispose();
}
public static void main(String[] args) throws Exception {
new TestAll(args).runTest();
}
}