From: Matthias T. <mt...@us...> - 2006-05-30 21:37:36
|
Update of /cvsroot/arianne/stendhal/src/games/stendhal/client In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv650/src/games/stendhal/client Modified Files: Sprite.java Log Message: little gui test with custom painted components Index: Sprite.java =================================================================== RCS file: /cvsroot/arianne/stendhal/src/games/stendhal/client/Sprite.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** Sprite.java 22 May 2006 22:03:44 -0000 1.8 --- Sprite.java 30 May 2006 21:37:32 -0000 1.9 *************** *** 14,17 **** --- 14,18 ---- import java.awt.*; + import java.awt.image.BufferedImage; /** *************** *** 26,29 **** --- 27,35 ---- /** The image to be drawn for this sprite */ protected Image image; + + /** a brighter version of the sprite */ + protected Sprite brighterSprite; + /** a darker version of the sprite */ + protected Sprite darkerSprite; /** *************** *** 83,105 **** } - // Bugfix: to use image.getWidth()/getHeight() is not correct for images - // coming from the Tilestore, as those are used to draw more than 1 Sprite - // from the same image. The relevant image size is that of the image - // that we're painting in, but the Graphics context doesn't say anything - // about the size of the image it belongs to so I had to add parameters - // for width and height. This bug was responsible for the drawing problems - // on Mac OS X. - // What I don't understand now though is why it worked well on Windows ;) - // This bugfix also affects Sprite.draw in TileStore.java and - // SpriteStore.java - // intensifly @ gmx.com, April 20th, 2006 ! // public void draw(Graphics g, int destx, int desty, int x,int y) { public void draw(Graphics g, int destx, int desty, int x, int y, int w, int h) { // g.drawImage(image,destx,desty,image.getWidth(null),image.getHeight(null),x,y,x+image.getWidth(null),y+image.getHeight(null),null); ! g.drawImage(image, destx, desty, w, h, x, y, x + w, y + h, null); } } \ No newline at end of file --- 89,157 ---- } ! /** ! * Draws the image ! * @param g the graphics context where to draw to ! * @param destx destination x ! * @param desty destination y ! * @param x the source x ! * @param y the source y ! * @param w the width ! * @param h the height ! */ ! // Bugfix: to use image.getWidth()/getHeight() is not correct for images ! // coming from the Tilestore, as those are used to draw more than 1 Sprite ! // from the same image. The relevant image size is that of the image ! // that we're painting in, but the Graphics context doesn't say anything ! // about the size of the image it belongs to so I had to add parameters ! // for width and height. This bug was responsible for the drawing problems ! // on Mac OS X. ! // What I don't understand now though is why it worked well on Windows ;) ! // This bugfix also affects Sprite.draw in TileStore.java and ! // SpriteStore.java ! // intensifly @ gmx.com, April 20th, 2006 + // public void draw(Graphics g, int destx, int desty, int x,int y) { public void draw(Graphics g, int destx, int desty, int x, int y, int w, int h) { // g.drawImage(image,destx,desty,image.getWidth(null),image.getHeight(null),x,y,x+image.getWidth(null),y+image.getHeight(null),null); ! g.drawImage(image, destx, desty, destx+w, desty+h, x, y, x + w, y + h, null); } + + /** overlays the image with the given color and returns a new image. */ + private Image getModifiedImage(Color color, float alpha) + { + GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration(); + BufferedImage i = gc.createCompatibleImage(getWidth(), getHeight(),Transparency.TRANSLUCENT); + draw(i.getGraphics(), 0, 0); + Graphics2D g = i.createGraphics(); + g.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), (int) (alpha*255))); + g.fillRect(0,0,i.getWidth(), i.getHeight()); + + return i; + } + + /** returns a brighter version of the sprite */ + public synchronized Sprite brighter() + { + if (brighterSprite == null) + { + brighterSprite = new Sprite(getModifiedImage(Color.WHITE, 0.3f)); + brighterSprite.darkerSprite = this; + } + return brighterSprite; + } + + /** returns a darker version of the sprite */ + public synchronized Sprite darker() + { + if (darkerSprite == null) + { + darkerSprite = new Sprite(getModifiedImage(Color.BLACK, 0.3f)); + darkerSprite.brighterSprite = this; + } + return darkerSprite; + } + } \ No newline at end of file |