Created
July 9, 2010 22:05
-
-
Save gw666/470141 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
*/ | |
This is a Java class that has been translated into | |
Clojure at http://gist.github.com/369239 | |
*/ | |
package edu.umd.cs.piccolo.tutorial; | |
import java.awt.Color; | |
import java.awt.Graphics2D; | |
import edu.umd.cs.piccolo.*; | |
import edu.umd.cs.piccolo.event.*; | |
import edu.umd.cs.piccolo.nodes.*; | |
import edu.umd.cs.piccolo.util.*; | |
import edu.umd.cs.piccolox.*; | |
public class InterfaceFrame extends PFrame { | |
public void initialize() { | |
// Remove the Default pan event handler and add a drag event handler | |
// so that we can drag the nodes around individually. | |
getCanvas().setPanEventHandler(null); | |
getCanvas().addInputEventListener(new PDragEventHandler()); | |
// Add Some Default Nodes | |
// Create a node. | |
PNode aNode = new PNode(); | |
// A node will not be visible until its bounds and brush are set. | |
aNode.setBounds(0, 0, 100, 80); | |
aNode.setPaint(Color.RED); | |
// A node needs to be a descendent of the root to be displayed. | |
PLayer layer = getCanvas().getLayer(); | |
layer.addChild(aNode); | |
// A node can have child nodes added to it. | |
PNode anotherNode = new PNode(); | |
anotherNode.setBounds(0, 0, 100, 80); | |
anotherNode.setPaint(Color.YELLOW); | |
aNode.addChild(anotherNode); | |
// The base bounds of a node are easy to change. Changing the bounds | |
// of a node will not affect it's children. | |
aNode.setBounds(-10, -10, 200, 110); | |
// Each node has a transform that can be used to modify the position, | |
// scale or rotation of a node. Changing a node's transform, will | |
// transform all of its children as well. | |
aNode.translate(100, 100); | |
aNode.scale(1.5f); | |
aNode.rotate(45); | |
// Add a couple of PPath nodes and a PText node. | |
layer.addChild(PPath.createEllipse(0, 0, 100, 100)); | |
layer.addChild(PPath.createRectangle(0, 100, 100, 100)); | |
layer.addChild(new PText("Hello World")); | |
// Here we create a PImage node that displays a thumbnail image | |
// of the root node. Then we add the new PImage to the main layer. | |
PImage image = new PImage(layer.toImage(300, 300, null)); | |
layer.addChild(image); | |
// Create a New Node using Composition | |
PNode myCompositeFace = PPath.createRectangle(0, 0, 100, 80); | |
// Create parts for the face. | |
PNode eye1 = PPath.createEllipse(0, 0, 20, 20); | |
eye1.setPaint(Color.YELLOW); | |
PNode eye2 = (PNode) eye1.clone(); | |
PNode mouth = PPath.createRectangle(0, 0, 40, 20); | |
mouth.setPaint(Color.BLACK); | |
// Add the face parts. | |
myCompositeFace.addChild(eye1); | |
myCompositeFace.addChild(eye2); | |
myCompositeFace.addChild(mouth); | |
// Don't want anyone grabbing out our eye's. | |
myCompositeFace.setChildrenPickable(false); | |
// Position the face parts. | |
eye2.translate(25, 0); | |
mouth.translate(0, 30); | |
// Set the face bounds so that it neatly contains the face parts. | |
PBounds b = myCompositeFace.getUnionOfChildrenBounds(null); | |
b.inset(-5, -5); | |
myCompositeFace.setBounds(b); | |
// Opps its to small, so scale it up. | |
myCompositeFace.scale(1.5); | |
layer.addChild(myCompositeFace); | |
// Create a New Node using Inheritance. | |
ToggleShape ts = new ToggleShape(); | |
ts.setPaint(Color.ORANGE); | |
layer.addChild(ts); | |
} | |
class ToggleShape extends PPath { | |
private boolean fIsPressed = false; | |
public ToggleShape() { | |
setPathToEllipse(0, 0, 100, 80); | |
addInputEventListener(new PBasicInputEventHandler() { | |
public void mousePressed(PInputEvent event) { | |
super.mousePressed(event); | |
fIsPressed = true; | |
repaint(); | |
} | |
public void mouseReleased(PInputEvent event) { | |
super.mouseReleased(event); | |
fIsPressed = false; | |
repaint(); | |
} | |
}); | |
} | |
protected void paint(PPaintContext paintContext) { | |
if (fIsPressed) { | |
Graphics2D g2 = paintContext.getGraphics(); | |
g2.setPaint(getPaint()); | |
g2.fill(getBoundsReference()); | |
} else { | |
super.paint(paintContext); | |
} | |
} | |
} | |
public static void main(String[] args) { | |
new InterfaceFrame(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment