Mercurial > hg > jslab
diff src/samer/mds/MatrixBall.java.not @ 0:bf79fb79ee13
Initial Mercurial check in.
author | samer |
---|---|
date | Tue, 17 Jan 2012 17:50:20 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/samer/mds/MatrixBall.java.not Tue Jan 17 17:50:20 2012 +0000 @@ -0,0 +1,107 @@ +package samer.mds; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import samer.core.types.*; +import samer.core.*; +import art.oz.*; + +public class MatrixBall implements Drawable, Updatable +{ + // instance data ..................................... + + int x, y, ox, oy; + double rx, ry; + boolean changed=true; + + protected Rectangle dirty=new Rectangle(); + + public MatrixBall() { + ox = x = 0; oy = y = 0; + rx = 0; ry = 0; + } + + + // static data ........................................ + + static Image defaultBlob; + static int IW=4, IH=4; + + public void draw( Graphics2D g) { g.drawImage( defaultBlob, ox=x, oy=y, null); } + public void undraw( Graphics2D g) { g.clearRect( ox, oy, IW, IH); } + + + public void moveTo(int x, int y) { this.x=x; this.y=y; } + + Rectangle tmp=new Rectangle(); + + public void update( Oz oz) { + dirty.setBounds(x,y,IW,IH); + Oz.union(dirty,ox,oy,IW,IH); + oz.invalidateRect(dirty); + } + + public static Image getImage() { return defaultBlob; } + public static void setImage(Image normal) { + defaultBlob = normal; + } + + public static void setBallSize(int w, int h) + { + IW=w; IH=h; + defaultBlob = new BufferedImage(IW,IH,BufferedImage.TYPE_4BYTE_ABGR_PRE); + } + + public static void drawBall( Image img, Color c, float alpha) + { + Graphics2D g=(Graphics2D)img.getGraphics(); + AlphaComposite comp; + + g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g.setBackground(new Color(0,0,0,0)); + g.clearRect(0,0,IW,IH); + g.setComposite( AlphaComposite.SrcOver); + drawBall(g,c,alpha); + g.dispose(); + } + + public static void drawMarker( Image img, Color c, float alpha) + { + Graphics2D g=(Graphics2D)img.getGraphics(); + AlphaComposite comp; + + g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g.setBackground(new Color(0,0,0,0)); + g.clearRect(0,0,IW,IH); + g.setComposite( AlphaComposite.SrcOver); + float [] rgba=c.getRGBComponents(null); + + // ball image has transparent background + g.setColor(new Color(0,0,0,80)); + g.fillRect(0,0,IW,IH); + g.setColor(new Color(rgba[0],rgba[1],rgba[2],alpha)); + g.fillRect(1,1,IW-2,IH-2); + g.dispose(); + } + + public static void drawBall( Graphics2D g, Color c, float alpha) + { + int cx = IW/2; + int cy = IH/2; + + float [] rgba=c.getRGBComponents(null); +// float [] rgba2=c.brighter().getRGBComponents(null); + + // ball image has transparent background + g.setColor(new Color(0,0,0,80)); + oval(g,cx+1,cy+1,IW/2-2,IH/2-2); + g.setColor(new Color(rgba[0],rgba[1],rgba[2],alpha)); + oval(g,cx,cy,IW/2-3,IH/2-3); +// g.setColor(new Color(rgba2[0],rgba2[1],rgba2[2],alpha)); +// oval(g,4*cx/5,4*cy/5,IH/6,IW/6); + } + + static void oval(Graphics2D g, int x, int y, int rx, int ry) { + g.fillOval(x-rx,y-ry,2*rx,2*ry); + } +}