Mercurial > hg > ristipolku
comparison game/IDMButton.java @ 169:32b1c41e194a
Implement smooth scaling of buttons.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 02 Mar 2017 14:18:21 +0200 |
parents | dda7152d2402 |
children | 981a8e20b363 |
comparison
equal
deleted
inserted
replaced
168:159252f9480d | 169:32b1c41e194a |
---|---|
14 | 14 |
15 public class IDMButton extends IDMWidget | 15 public class IDMButton extends IDMWidget |
16 { | 16 { |
17 enum State { FOCUSED, PRESSED, NORMAL } | 17 enum State { FOCUSED, PRESSED, NORMAL } |
18 State state; | 18 State state; |
19 static BufferedImage imgUp, imgPressed; | 19 static BufferedImage imgOrigUnpressed, imgOrigPressed; |
20 static BufferedImage imgUnpressed, imgPressed; | |
20 Font font; | 21 Font font; |
21 FontMetrics metrics; | 22 FontMetrics metrics; |
22 String text; | 23 String text; |
23 boolean active; | 24 boolean active; |
24 | 25 |
25 public IDMButton(IDMPoint pos, int keyCode, Font font, String text) | 26 public IDMButton(IDMPoint pos, int keyCode, Font font, String text) |
26 { | 27 { |
27 super(pos); | 28 super(pos); |
28 loadImages(); | 29 loadImages(); |
29 setSize(imgUp.getWidth(), imgUp.getHeight()); | 30 setSize(imgOrigUnpressed.getWidth(), imgOrigUnpressed.getHeight()); |
31 setScale(1, 1); | |
30 | 32 |
31 this.font = font; | 33 this.font = font; |
32 this.keyCode = keyCode; | 34 this.keyCode = keyCode; |
33 this.text = text; | 35 this.text = text; |
34 | 36 |
41 this(new IDMPoint(x, y), keyCode, font, text); | 43 this(new IDMPoint(x, y), keyCode, font, text); |
42 } | 44 } |
43 | 45 |
44 private static void loadImages() | 46 private static void loadImages() |
45 { | 47 { |
46 if (imgUp != null && imgPressed != null) | 48 if (imgUnpressed != null && imgPressed != null) |
47 return; | 49 return; |
48 | 50 |
49 try | 51 try |
50 { | 52 { |
51 ResourceLoader res = new ResourceLoader("graphics/button1_up.png"); | 53 ResourceLoader res = new ResourceLoader("graphics/button1_up.png"); |
52 imgUp = ImageIO.read(res.getStream()); | 54 imgOrigUnpressed = ImageIO.read(res.getStream()); |
53 | 55 |
54 res = new ResourceLoader("graphics/button1_down.png"); | 56 res = new ResourceLoader("graphics/button1_down.png"); |
55 imgPressed = ImageIO.read(res.getStream()); | 57 imgOrigPressed = ImageIO.read(res.getStream()); |
56 } | 58 } |
57 catch (IOException e) | 59 catch (IOException e) |
58 { | 60 { |
59 System.out.print(e.getMessage()); | 61 System.out.print(e.getMessage()); |
60 } | 62 } |
61 } | 63 } |
62 | 64 |
63 public void scale() | 65 public BufferedImage scaleImage(BufferedImage src) |
64 { | 66 { |
67 BufferedImage dst = new BufferedImage(getScaledWidth(), getScaledHeight(), BufferedImage.TYPE_INT_ARGB); | |
68 Graphics2D gimg = dst.createGraphics(); | |
69 | |
70 gimg.setRenderingHint(RenderingHints.KEY_INTERPOLATION, | |
71 RenderingHints.VALUE_INTERPOLATION_BICUBIC); | |
72 | |
73 gimg.setRenderingHint(RenderingHints.KEY_ANTIALIASING, | |
74 RenderingHints.VALUE_ANTIALIAS_ON); | |
75 | |
76 gimg.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, | |
77 RenderingHints.VALUE_TEXT_ANTIALIAS_ON); | |
78 | |
79 gimg.drawImage(src, 0, 0, getScaledWidth(), getScaledHeight(), null); | |
80 return dst; | |
81 } | |
82 | |
83 public void setScale(IDMPoint scale) | |
84 { | |
85 super.setScale(scale); | |
86 imgPressed = scaleImage(imgOrigPressed); | |
87 imgUnpressed = scaleImage(imgOrigUnpressed); | |
65 } | 88 } |
66 | 89 |
67 public void paint(Graphics2D g) | 90 public void paint(Graphics2D g) |
68 { | 91 { |
69 BufferedImage img; | 92 BufferedImage img; |
75 xoffs = yoffs = 5; | 98 xoffs = yoffs = 5; |
76 } | 99 } |
77 else | 100 else |
78 { | 101 { |
79 xoffs = yoffs = 0; | 102 xoffs = yoffs = 0; |
80 img = imgUp; | 103 img = imgUnpressed; |
81 } | 104 } |
82 | 105 |
83 if (metrics == null) | 106 if (metrics == null) |
84 metrics = g.getFontMetrics(font); | 107 metrics = g.getFontMetrics(font); |
85 | 108 |
86 int textWidth = metrics.stringWidth(text); | 109 int textWidth = metrics.stringWidth(text); |
87 g.drawImage(img, | 110 g.drawImage(img, getScaledX() + xoffs, getScaledY() + yoffs, null); |
88 getScaledX() + xoffs, getScaledY() + yoffs, | |
89 getScaledWidth(), getScaledHeight(), | |
90 null); | |
91 | |
92 g.setFont(font); | 111 g.setFont(font); |
93 g.setPaint(Color.black); | 112 g.setPaint(Color.black); |
94 g.drawString(text, | 113 g.drawString(text, |
95 getScaledX() + xoffs + (getScaledWidth() - textWidth) / 2, | 114 getScaledX() + xoffs + (getScaledWidth() - textWidth) / 2, |
96 getScaledY() + yoffs + getScaledHeight() / 2); | 115 getScaledY() + yoffs + getScaledHeight() / 2); |