package org.newdawn.slick.tests; import org.newdawn.slick.AppGameContainer; import org.newdawn.slick.BasicGame; import org.newdawn.slick.Color; import org.newdawn.slick.GameContainer; import org.newdawn.slick.Graphics; import org.newdawn.slick.Image; import org.newdawn.slick.Input; import org.newdawn.slick.SlickException; import org.newdawn.slick.geom.Ellipse; import org.newdawn.slick.geom.Rectangle; import org.newdawn.slick.geom.RoundedRectangle; /** * A simple graphics test for the context allowing vector based graphics * * @author kevin */ public class GeomAccuracyTest extends BasicGame { /** The container holding this test */ private GameContainer container; /** The Geometry color */ private Color geomColor; /** The overlay color */ private Color overlayColor; /** Indicates overlay should be hidden */ private boolean hideOverlay; /** The current color pair id */ private int colorIndex; /** The current test taking place */ private int curTest; /** The number of tests to do */ private static final int NUMTESTS = 3; /** An image used to magnify where the mouse is */ private Image magImage; /** * Create a new test of graphics context rendering */ public GeomAccuracyTest() { super("Geometry Accuracy Tests"); } /** * @see org.newdawn.slick.BasicGame#init(org.newdawn.slick.GameContainer) */ public void init(GameContainer container) throws SlickException { this.container = container; geomColor = Color.magenta; overlayColor = Color.white; magImage = new Image(21, 21); } /** * @see org.newdawn.slick.BasicGame#render(org.newdawn.slick.GameContainer, org.newdawn.slick.Graphics) */ public void render(GameContainer container, Graphics g) { String text = new String(); switch(curTest) { case 0: text = "Rectangles"; rectTest(g); break; case 1: text = "Ovals"; ovalTest(g); break; case 2: text ="Arcs"; arcTest(g); break; } g.setColor(Color.white); g.drawString("Press T to toggle overlay", 200, 55); g.drawString("Press N to switch tests", 200, 35); g.drawString("Press C to cycle drawing colors", 200, 15); g.drawString("Current Test:", 400, 35); g.setColor(Color.blue); g.drawString(text, 485, 35); g.setColor(Color.white); g.drawString("Normal:", 10, 150); g.drawString("Filled:", 10, 300); g.drawString("Drawn with Graphics context", 125, 400); g.drawString("Drawn using Shapes", 450, 400); // Grab our mouse position and copy the screen to our magnified image g.copyArea(magImage, container.getInput().getMouseX() - 10, container.getInput().getMouseY() - 10); magImage.draw(351, 451, 5); g.drawString("Mag Area -", 250, 475); g.setColor(Color.darkGray); g.drawRect(350, 450, 106, 106); g.setColor(Color.white); g.drawString("NOTE:", 500, 450); g.drawString("lines should be flush with edges", 525, 470); g.drawString("corners should be symetric", 525, 490); } /** * Draws arcs * @param g */ void arcTest(Graphics g) { if(hideOverlay == false) { g.setColor(overlayColor); g.drawLine(198, 100, 198, 198); g.drawLine(100, 198, 198, 198); } g.setColor(geomColor); g.drawArc(100, 100, 99, 99, 0, 90); } /** * Draws ovals * @param g */ void ovalTest(Graphics g) { g.setColor(geomColor); g.drawOval(100, 100, 99, 99); g.fillOval(100, 250, 99, 99); //Circle circ = new Circle(400, 100, 99); Ellipse elip = new Ellipse(449, 149, 49, 49); g.draw(elip); elip = new Ellipse(449, 299, 49, 49); g.fill(elip); if(hideOverlay == false) { g.setColor(overlayColor); g.drawLine(100, 149, 198, 149); g.drawLine(149, 100, 149, 198); g.drawLine(100, 149 + 150, 198, 149 + 150); g.drawLine(149, 100 + 150, 149, 198 + 150); g.drawLine(100 + 300, 149, 198 + 300, 149); g.drawLine(149 + 300, 100, 149 + 300, 198); g.drawLine(100 + 300, 149 + 150, 198 + 300, 149 + 150); g.drawLine(149 + 300, 100 + 150, 149 + 300, 198 + 150); } } /** * Draws rects * @param g */ void rectTest(Graphics g) { g.setColor(geomColor); // Draw using graphics routines g.drawRect(100, 100, 99, 99); g.fillRect(100, 250, 99, 99); g.drawRoundRect(250, 100, 99, 99, 10); g.fillRoundRect(250, 250, 99, 99, 10); // Draw using shape routines Rectangle rect = new Rectangle(400, 100, 99, 99); g.draw(rect); rect = new Rectangle(400, 250, 99, 99); g.fill(rect); RoundedRectangle rrect = new RoundedRectangle(550, 100, 99, 99, 10); g.draw(rrect); rrect = new RoundedRectangle(550, 250, 99, 99, 10); g.fill(rrect); // Draw our overlays if(hideOverlay == false) { g.setColor(overlayColor); // Upper row g.drawLine(100, 149, 198, 149); g.drawLine(149, 100, 149, 198); g.drawLine(100 + 150, 149, 198 + 150, 149); g.drawLine(149 + 150, 100, 149 + 150, 198); g.drawLine(100 + 300, 149, 198 + 300, 149); g.drawLine(149 + 300, 100, 149 + 300, 198); g.drawLine(100 + 450, 149, 198 + 450, 149); g.drawLine(149 + 450, 100, 149 + 450, 198); // Lower row g.drawLine(100, 149 + 150, 198, 149 + 150); g.drawLine(149, 100 + 150, 149, 198 + 150); g.drawLine(100 + 150, 149 + 150, 198 + 150, 149 + 150); g.drawLine(149 + 150, 100 + 150, 149 + 150, 198 + 150); g.drawLine(100 + 300, 149 + 150, 198 + 300, 149 + 150); g.drawLine(149 + 300, 100 + 150, 149 + 300, 198 + 150); g.drawLine(100 + 450, 149 + 150, 198 + 450, 149 + 150); g.drawLine(149 + 450, 100 + 150, 149 + 450, 198 + 150); } } /** * @see org.newdawn.slick.BasicGame#update(org.newdawn.slick.GameContainer, int) */ public void update(GameContainer container, int delta) { } /** * @see org.newdawn.slick.BasicGame#keyPressed(int, char) */ public void keyPressed(int key, char c) { if (key == Input.KEY_ESCAPE) { System.exit(0); } if(key == Input.KEY_N) { curTest++; curTest %= NUMTESTS; } if(key == Input.KEY_C) { colorIndex++; colorIndex %= 4; setColors(); } if(key == Input.KEY_T) { hideOverlay = !hideOverlay; } } /** * Used to set the colors for overlay and geometry * */ private void setColors() { switch(colorIndex) { case 0: overlayColor = Color.white; geomColor = Color.magenta; break; case 1: overlayColor = Color.magenta; geomColor = Color.white; break; case 2: overlayColor = Color.red; geomColor = Color.green; break; case 3: overlayColor = Color.red; geomColor = Color.white; break; } } /** * Entry point to our test * * @param argv * The arguments passed to the test */ public static void main(String[] argv) { try { AppGameContainer container = new AppGameContainer(new GeomAccuracyTest()); container.setDisplayMode(800, 600, false); container.start(); } catch (SlickException e) { e.printStackTrace(); } } }