# HG changeset patch # User Matti Hamalainen # Date 1488457101 -7200 # Node ID 32b1c41e194ae07401ec3a96ba0c50edde55ad9c # Parent 159252f9480d7899131ce648b742d6161b623b50 Implement smooth scaling of buttons. diff -r 159252f9480d -r 32b1c41e194a game/IDMButton.java --- a/game/IDMButton.java Thu Mar 02 12:30:19 2017 +0200 +++ b/game/IDMButton.java Thu Mar 02 14:18:21 2017 +0200 @@ -16,7 +16,8 @@ { enum State { FOCUSED, PRESSED, NORMAL } State state; - static BufferedImage imgUp, imgPressed; + static BufferedImage imgOrigUnpressed, imgOrigPressed; + static BufferedImage imgUnpressed, imgPressed; Font font; FontMetrics metrics; String text; @@ -26,7 +27,8 @@ { super(pos); loadImages(); - setSize(imgUp.getWidth(), imgUp.getHeight()); + setSize(imgOrigUnpressed.getWidth(), imgOrigUnpressed.getHeight()); + setScale(1, 1); this.font = font; this.keyCode = keyCode; @@ -43,16 +45,16 @@ private static void loadImages() { - if (imgUp != null && imgPressed != null) + if (imgUnpressed != null && imgPressed != null) return; try { ResourceLoader res = new ResourceLoader("graphics/button1_up.png"); - imgUp = ImageIO.read(res.getStream()); + imgOrigUnpressed = ImageIO.read(res.getStream()); res = new ResourceLoader("graphics/button1_down.png"); - imgPressed = ImageIO.read(res.getStream()); + imgOrigPressed = ImageIO.read(res.getStream()); } catch (IOException e) { @@ -60,8 +62,29 @@ } } - public void scale() + public BufferedImage scaleImage(BufferedImage src) { + BufferedImage dst = new BufferedImage(getScaledWidth(), getScaledHeight(), BufferedImage.TYPE_INT_ARGB); + Graphics2D gimg = dst.createGraphics(); + + gimg.setRenderingHint(RenderingHints.KEY_INTERPOLATION, + RenderingHints.VALUE_INTERPOLATION_BICUBIC); + + gimg.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + + gimg.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, + RenderingHints.VALUE_TEXT_ANTIALIAS_ON); + + gimg.drawImage(src, 0, 0, getScaledWidth(), getScaledHeight(), null); + return dst; + } + + public void setScale(IDMPoint scale) + { + super.setScale(scale); + imgPressed = scaleImage(imgOrigPressed); + imgUnpressed = scaleImage(imgOrigUnpressed); } public void paint(Graphics2D g) @@ -77,18 +100,14 @@ else { xoffs = yoffs = 0; - img = imgUp; + img = imgUnpressed; } if (metrics == null) metrics = g.getFontMetrics(font); int textWidth = metrics.stringWidth(text); - g.drawImage(img, - getScaledX() + xoffs, getScaledY() + yoffs, - getScaledWidth(), getScaledHeight(), - null); - + g.drawImage(img, getScaledX() + xoffs, getScaledY() + yoffs, null); g.setFont(font); g.setPaint(Color.black); g.drawString(text,