diff options
author | Starla Insigna <hatkirby@fourisland.com> | 2009-02-08 12:09:25 -0500 |
---|---|---|
committer | Starla Insigna <hatkirby@fourisland.com> | 2009-02-08 12:09:25 -0500 |
commit | eca79b20cdb258768668c2ecf1b7333de62c7d7f (patch) | |
tree | d8999e81b3569aeff85138dc8df244c9c290a7a0 /src/com/fourisland/fourpuzzle/window/ChoiceWindow.java | |
parent | 3724f4ecbe61e6621d4a7e993cd80ab75ee41266 (diff) | |
download | fourpuzzle-eca79b20cdb258768668c2ecf1b7333de62c7d7f.tar.gz fourpuzzle-eca79b20cdb258768668c2ecf1b7333de62c7d7f.tar.bz2 fourpuzzle-eca79b20cdb258768668c2ecf1b7333de62c7d7f.zip |
Implemented a basic ChoiceWindow
This window should be used when there are a few choices available (such as in TitleScreenGameState and MenuGameState) and one needs to be chosen. The implementation currently is bad, the code is messy and it could be optimized. Plus, there are a few bugs in it and no choice can currently be made, only the rendering has been done.
Diffstat (limited to 'src/com/fourisland/fourpuzzle/window/ChoiceWindow.java')
-rw-r--r-- | src/com/fourisland/fourpuzzle/window/ChoiceWindow.java | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/src/com/fourisland/fourpuzzle/window/ChoiceWindow.java b/src/com/fourisland/fourpuzzle/window/ChoiceWindow.java new file mode 100644 index 0000000..ed20ab0 --- /dev/null +++ b/src/com/fourisland/fourpuzzle/window/ChoiceWindow.java | |||
@@ -0,0 +1,109 @@ | |||
1 | /* | ||
2 | * To change this template, choose Tools | Templates | ||
3 | * and open the template in the editor. | ||
4 | */ | ||
5 | |||
6 | package com.fourisland.fourpuzzle.window; | ||
7 | |||
8 | import com.fourisland.fourpuzzle.util.TransparentPixelFilter; | ||
9 | import java.awt.Font; | ||
10 | import java.awt.Toolkit; | ||
11 | import java.awt.Graphics2D; | ||
12 | import java.awt.Rectangle; | ||
13 | import java.awt.TexturePaint; | ||
14 | import java.awt.image.BufferedImage; | ||
15 | import java.awt.image.FilteredImageSource; | ||
16 | import java.util.List; | ||
17 | import static com.fourisland.fourpuzzle.window.SystemChoiceArea.*; | ||
18 | |||
19 | /* TODO Find a more elegant way to implement window, it looks terrible now */ | ||
20 | |||
21 | /** | ||
22 | * | ||
23 | * @author hatkirby | ||
24 | */ | ||
25 | public class ChoiceWindow { | ||
26 | |||
27 | private final int SPACER = 4; | ||
28 | |||
29 | private List<String> choices; | ||
30 | int numChoices; | ||
31 | public ChoiceWindow(List<String> choices) | ||
32 | { | ||
33 | this.choices = choices; | ||
34 | numChoices = choices.size(); | ||
35 | |||
36 | createGraphic(new BufferedImage(TopLeft.getWidth()+getWidth()+TopRight.getWidth(), TopLeft.getHeight()+getHeight()+BottomLeft.getHeight(), BufferedImage.TYPE_INT_ARGB).createGraphics()); | ||
37 | } | ||
38 | |||
39 | private int width; | ||
40 | private int height; | ||
41 | BufferedImage cacheBase; | ||
42 | private void createGraphic(Graphics2D g3) | ||
43 | { | ||
44 | for (String choice : choices) | ||
45 | { | ||
46 | int l = g3.getFontMetrics().stringWidth(choice); | ||
47 | if (l > getWidth()) | ||
48 | { | ||
49 | width = l; | ||
50 | } | ||
51 | |||
52 | height += g3.getFontMetrics().getHeight() + SPACER; | ||
53 | } | ||
54 | |||
55 | width += SPACER*2; | ||
56 | height -= SPACER; | ||
57 | |||
58 | BufferedImage temp = new BufferedImage(TopLeft.getWidth()+getWidth()+TopRight.getWidth(), TopLeft.getHeight()+getHeight()+BottomLeft.getHeight(), BufferedImage.TYPE_INT_ARGB); | ||
59 | Graphics2D g = temp.createGraphics(); | ||
60 | |||
61 | g.drawImage(SystemGraphic.getChoiceArea(TopLeft), 0, 0, null); | ||
62 | g.drawImage(SystemGraphic.getChoiceArea(Top), TopLeft.getWidth(), 0, getWidth(),Top.getHeight(), null); | ||
63 | g.drawImage(SystemGraphic.getChoiceArea(TopRight), TopLeft.getWidth()+getWidth(), 0, null); | ||
64 | g.drawImage(SystemGraphic.getChoiceArea(Left), 0, TopLeft.getHeight(), Left.getWidth(),getHeight(), null); | ||
65 | g.drawImage(SystemGraphic.getChoiceArea(BottomLeft), 0, TopLeft.getHeight()+getHeight(), null); | ||
66 | g.drawImage(SystemGraphic.getChoiceArea(Bottom), BottomLeft.getWidth(), (getHeight()+TopLeft.getHeight()+BottomLeft.getHeight())-Bottom.getHeight(), getWidth(),Bottom.getHeight(), null); | ||
67 | g.drawImage(SystemGraphic.getChoiceArea(BottomRight), BottomRight.getWidth()+getWidth(), TopRight.getHeight()+getHeight(), null); | ||
68 | g.drawImage(SystemGraphic.getChoiceArea(Right), (getWidth()+TopLeft.getWidth()+TopRight.getWidth())-Right.getWidth(), TopRight.getHeight(), Right.getWidth(),getHeight(), null); | ||
69 | |||
70 | cacheBase = new BufferedImage(TopLeft.getWidth()+getWidth()+TopRight.getWidth(), TopLeft.getHeight()+getHeight()+BottomLeft.getHeight(), BufferedImage.TYPE_INT_ARGB); | ||
71 | Graphics2D g2 = cacheBase.createGraphics(); | ||
72 | |||
73 | g2.drawImage(SystemGraphic.getMessageBackground(), 1, 1, TopLeft.getWidth()+getWidth()+TopRight.getWidth()-2, TopLeft.getHeight()+getHeight()+BottomLeft.getHeight()-2, null); | ||
74 | g2.drawImage(Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(temp.getSource(), new TransparentPixelFilter(-25600))), 0, 0, null); | ||
75 | g2.setFont(g2.getFont().deriveFont(Font.BOLD)); | ||
76 | |||
77 | int tx = TopLeft.getWidth(); | ||
78 | int ty = TopLeft.getHeight()+g2.getFontMetrics().getHeight()-SPACER; | ||
79 | for (String choice : choices) | ||
80 | { | ||
81 | /* TODO The following code paints the text onto the window. However, | ||
82 | * when it paints the lowercase 'y', the tail is white, not the | ||
83 | * correct gradient. */ | ||
84 | |||
85 | g2.setPaint(new TexturePaint(SystemGraphic.getTextColor(), new Rectangle(tx, ty, g2.getFontMetrics().stringWidth(choice),g2.getFontMetrics().getHeight()))); | ||
86 | g2.drawString(choice, tx, ty); | ||
87 | |||
88 | ty+=(SPACER+g2.getFontMetrics().getHeight()); | ||
89 | } | ||
90 | |||
91 | g2.setFont(g2.getFont().deriveFont(Font.PLAIN)); | ||
92 | } | ||
93 | |||
94 | public void render(Graphics2D g2, int x, int y) | ||
95 | { | ||
96 | g2.drawImage(cacheBase, x, y, null); | ||
97 | } | ||
98 | |||
99 | public int getWidth() | ||
100 | { | ||
101 | return width; | ||
102 | } | ||
103 | |||
104 | public int getHeight() | ||
105 | { | ||
106 | return height; | ||
107 | } | ||
108 | |||
109 | } | ||