Skip to content

Commit cf37ae1

Browse files
committed
The tree list in colopedia now scales using the scaleFactor.
1 parent 4346895 commit cf37ae1

10 files changed

+108
-50
lines changed

src/net/sf/freecol/client/gui/ImageLibrary.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -534,14 +534,14 @@ public static BufferedImage getCanvasBackgroundImage() {
534534
: getUnscaledImage(key);
535535
}
536536

537-
public static BufferedImage getColopediaCellImage(boolean expanded) {
537+
public BufferedImage getColopediaCellImage(boolean expanded) {
538538
final String key = "image.icon.Colopedia."
539539
+ ((expanded) ? "open" : "closed") + "Section";
540-
return getUnscaledImage(key);
540+
return getScaledImage(key);
541541
}
542542

543-
public static BufferedImage getColopediaConceptImage() {
544-
return getUnscaledImage("image.icon.Colopedia.idea");
543+
public BufferedImage getColopediaConceptImage() {
544+
return getScaledImage("image.icon.Colopedia.idea");
545545
}
546546

547547
public static BufferedImage getColorCellRendererBackground() {
@@ -606,7 +606,7 @@ public BufferedImage getLCRImage(Dimension size) {
606606
}
607607

608608
public BufferedImage getLibertyImage() {
609-
return this.imageCache.getSizedImage(BELLS, ICON_SIZE, false);
609+
return this.imageCache.getSizedImage(BELLS, scale(ICON_SIZE), false);
610610
}
611611

612612
public static BufferedImage getListBackground() {
@@ -685,7 +685,7 @@ private BufferedImage getObjectImageInternal(FreeColObject display,
685685
* @return The appropriate {@code BufferedImage}.
686686
*/
687687
public BufferedImage getObjectImage(FreeColObject display) {
688-
return getObjectImageInternal(display, scale(ICON_SIZE, scaleFactor));
688+
return getObjectImageInternal(display, scale(ICON_SIZE));
689689
}
690690

691691
/**

src/net/sf/freecol/client/gui/panel/colopedia/BuildingDetailPanel.java

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
import java.awt.Dimension;
2828
import java.awt.Font;
29+
import java.awt.image.BufferedImage;
2930
import java.util.ArrayList;
3031
import java.util.HashMap;
3132
import java.util.Iterator;
@@ -56,6 +57,7 @@
5657
import net.sf.freecol.common.model.ProductionType;
5758
import net.sf.freecol.common.model.StringTemplate;
5859
import net.sf.freecol.common.model.UnitType;
60+
import net.sf.freecol.common.util.ImageUtils;
5961

6062

6163
/**
@@ -94,12 +96,14 @@ public void addSubTrees(DefaultMutableTreeNode root) {
9496
: getSpecification().getBuildingTypeList()) {
9597
if (buildingType.getUpgradesFrom() == null) {
9698
String name = Messages.getName(buildingType);
99+
final Dimension listItemIconSize = getListItemIconSize();
100+
final BufferedImage buildingTypeImage = getImageLibrary().getBuildingTypeImage(buildingType, new Dimension(-1, listItemIconSize.height));
101+
final BufferedImage centeredImage = ImageUtils.createCenteredImage(buildingTypeImage, listItemIconSize);
102+
97103
DefaultMutableTreeNode item =
98104
new DefaultMutableTreeNode(new ColopediaTreeItem(
99105
this, buildingType.getId(), name,
100-
new ImageIcon(getImageLibrary()
101-
.getBuildingTypeImage(buildingType,
102-
new Dimension(-1, ImageLibrary.ICON_SIZE.height)))));
106+
new ImageIcon(centeredImage)));
103107
buildingHash.put(buildingType, item);
104108
parent.add(item);
105109
} else {
@@ -108,18 +112,21 @@ public void addSubTrees(DefaultMutableTreeNode root) {
108112
}
109113

110114
while (!buildingTypes.isEmpty()) {
111-
Iterator<BuildingType> iterator = buildingTypes.iterator();
115+
final Iterator<BuildingType> iterator = buildingTypes.iterator();
112116
while (iterator.hasNext()) {
113-
BuildingType buildingType = iterator.next();
114-
DefaultMutableTreeNode node = buildingHash.get(buildingType.getUpgradesFrom());
117+
final BuildingType buildingType = iterator.next();
118+
final DefaultMutableTreeNode node = buildingHash.get(buildingType.getUpgradesFrom());
115119
if (node != null) {
116120
String name = Messages.getName(buildingType);
117-
DefaultMutableTreeNode item =
121+
final Dimension listItemIconSize = getListItemIconSize();
122+
final BufferedImage buildingTypeImage = getImageLibrary().getBuildingTypeImage(buildingType, new Dimension(-1, listItemIconSize.height));
123+
final BufferedImage centeredImage = ImageUtils.createCenteredImage(buildingTypeImage, listItemIconSize);
124+
125+
final DefaultMutableTreeNode item =
118126
new DefaultMutableTreeNode(new ColopediaTreeItem(
119127
this, buildingType.getId(), name,
120-
new ImageIcon(getImageLibrary()
121-
.getBuildingTypeImage(buildingType,
122-
new Dimension(-1, ImageLibrary.ICON_SIZE.height)))));
128+
new ImageIcon(centeredImage)));
129+
123130
node.add(item);
124131
buildingHash.put(buildingType, item);
125132
iterator.remove();

src/net/sf/freecol/client/gui/panel/colopedia/ColopediaGameObjectTypePanel.java

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,12 @@
1919

2020
package net.sf.freecol.client.gui.panel.colopedia;
2121

22-
import java.awt.Graphics2D;
23-
import java.awt.Image;
22+
import static net.sf.freecol.common.util.CollectionUtils.alwaysTrue;
23+
import static net.sf.freecol.common.util.CollectionUtils.first;
24+
import static net.sf.freecol.common.util.CollectionUtils.transform;
25+
2426
import java.awt.image.BufferedImage;
27+
import java.awt.Dimension;
2528
import java.util.List;
2629
import java.util.logging.Level;
2730
import java.util.logging.Logger;
@@ -36,9 +39,11 @@
3639
import javax.swing.tree.DefaultMutableTreeNode;
3740

3841
import net.sf.freecol.client.FreeColClient;
39-
import net.sf.freecol.client.gui.*;
42+
import net.sf.freecol.client.gui.ImageLibrary;
43+
import net.sf.freecol.client.gui.ModifierFormat;
4044
import net.sf.freecol.client.gui.action.ColopediaAction.PanelType;
41-
import net.sf.freecol.client.gui.panel.*;
45+
import net.sf.freecol.client.gui.panel.FreeColPanel;
46+
import net.sf.freecol.client.gui.panel.Utility;
4247
import net.sf.freecol.common.i18n.Messages;
4348
import net.sf.freecol.common.model.Ability;
4449
import net.sf.freecol.common.model.AbstractGoods;
@@ -49,7 +54,7 @@
4954
import net.sf.freecol.common.model.ResourceType;
5055
import net.sf.freecol.common.model.Specification;
5156
import net.sf.freecol.common.model.UnitType;
52-
import static net.sf.freecol.common.util.CollectionUtils.*;
57+
import net.sf.freecol.common.util.ImageUtils;
5358

5459

5560
/**
@@ -127,18 +132,9 @@ protected void addSubTrees(DefaultMutableTreeNode root, String id,
127132
String name = getName();
128133
ColopediaTreeItem cti = new ColopediaTreeItem(this, id, name, null);
129134
DefaultMutableTreeNode node = new DefaultMutableTreeNode(cti);
130-
int width = ImageLibrary.ICON_SIZE.width;
131-
int height = ImageLibrary.ICON_SIZE.height;
132135
for (FreeColSpecObjectType type : types) {
133-
Image image = lib.getObjectImage(type, ImageLibrary.ICON_SIZE);
134-
int x = (width - image.getWidth(null)) / 2;
135-
int y = (height - image.getHeight(null)) / 2;
136-
BufferedImage centeredImage
137-
= new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
138-
Graphics2D g = centeredImage.createGraphics();
139-
g.drawImage(image, x, y, null);
140-
g.dispose();
141-
node.add(buildItem(type, new ImageIcon(centeredImage)));
136+
final BufferedImage image = ImageUtils.createCenteredImage(lib.getObjectImage(type), getListItemIconSize());
137+
node.add(buildItem(type, new ImageIcon(image)));
142138
}
143139
root.add(node);
144140
}
@@ -269,6 +265,10 @@ public void appendRequiredAbility(StyledDocument doc, String key, boolean value)
269265
logger.log(Level.WARNING, "Insert fail", ble);
270266
}
271267
}
268+
269+
public Dimension getListItemIconSize() {
270+
return colopediaPanel.getListItemIconSize();
271+
}
272272

273273

274274
// Override Component

src/net/sf/freecol/client/gui/panel/colopedia/ColopediaPanel.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040

4141
import net.miginfocom.swing.MigLayout;
4242
import net.sf.freecol.client.FreeColClient;
43+
import net.sf.freecol.client.gui.ImageLibrary;
4344
import net.sf.freecol.client.gui.panel.FreeColPanel;
4445
import net.sf.freecol.client.gui.panel.MigPanel;
4546
import net.sf.freecol.client.gui.panel.Utility;
@@ -154,7 +155,7 @@ private JTree buildTree() {
154155
DefaultTreeModel treeModel = new DefaultTreeModel(root);
155156
tree = new JTree(treeModel);
156157
tree.setRootVisible(false);
157-
tree.setCellRenderer(new ColopediaTreeCellRenderer());
158+
tree.setCellRenderer(new ColopediaTreeCellRenderer(this, getImageLibrary()));
158159
tree.setOpaque(false);
159160
tree.addTreeSelectionListener(this);
160161

@@ -166,6 +167,16 @@ private JTree buildTree() {
166167
}
167168
return tree;
168169
}
170+
171+
/**
172+
* Gets the preferred size for the list item images in the colopedia tree.
173+
*/
174+
public Dimension getListItemIconSize() {
175+
final int width = getImageLibrary().scaleInt(ImageLibrary.ICON_SIZE.width * 3 / 2);
176+
final int height = getImageLibrary().scaleInt(ImageLibrary.ICON_SIZE.height);
177+
178+
return new Dimension(width, height);
179+
}
169180

170181
/**
171182
* This function analyzes a tree selection event and calls the

src/net/sf/freecol/client/gui/panel/colopedia/ColopediaTreeCellRenderer.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,16 @@
2121

2222
import java.awt.Color;
2323
import java.awt.Component;
24+
import java.awt.image.BufferedImage;
25+
2426
import javax.swing.ImageIcon;
2527

2628
import javax.swing.JTree;
2729
import javax.swing.tree.DefaultMutableTreeNode;
2830
import javax.swing.tree.DefaultTreeCellRenderer;
2931

3032
import net.sf.freecol.client.gui.ImageLibrary;
33+
import net.sf.freecol.common.util.ImageUtils;
3134

3235

3336
/**
@@ -36,10 +39,17 @@
3639
*/
3740
public class ColopediaTreeCellRenderer extends DefaultTreeCellRenderer {
3841

42+
private final ColopediaPanel colopediaPanel;
43+
private final ImageLibrary lib;
44+
45+
3946
/**
4047
* The constructor makes sure that the backgrounds are transparent.
4148
*/
42-
public ColopediaTreeCellRenderer() {
49+
public ColopediaTreeCellRenderer(ColopediaPanel colopediaPanel, ImageLibrary lib) {
50+
this.colopediaPanel = colopediaPanel;
51+
this.lib = lib;
52+
4353
setBackgroundNonSelectionColor(new Color(0,0,0,1));
4454
}
4555

@@ -59,8 +69,8 @@ public Component getTreeCellRendererComponent(JTree tree, Object value,
5969
if (nodeItem.getIcon() != null) {
6070
setIcon(nodeItem.getIcon());
6171
} else if (!leaf) {
62-
setIcon(new ImageIcon(ImageLibrary
63-
.getColopediaCellImage(expanded)));
72+
final BufferedImage image = ImageUtils.createCenteredImage(lib.getColopediaCellImage(expanded), colopediaPanel.getListItemIconSize());
73+
setIcon(new ImageIcon(image));
6474
}
6575
return this;
6676
}

src/net/sf/freecol/client/gui/panel/colopedia/ConceptDetailPanel.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.awt.Graphics;
2323
import java.awt.Graphics2D;
2424
import java.awt.RenderingHints;
25+
import java.awt.image.BufferedImage;
2526
import java.util.ArrayList;
2627
import java.util.Collections;
2728
import java.util.Comparator;
@@ -41,6 +42,7 @@
4142
import net.sf.freecol.client.gui.panel.FreeColPanel;
4243
import net.sf.freecol.client.gui.panel.Utility;
4344
import net.sf.freecol.common.i18n.Messages;
45+
import net.sf.freecol.common.util.ImageUtils;
4446

4547

4648
/**
@@ -139,8 +141,9 @@ public void addSubTrees(DefaultMutableTreeNode root) {
139141
for (String concept : concepts) {
140142
String nodeId = "colopedia.concepts." + concept;
141143
String nodeName = Messages.getName(nodeId);
144+
final BufferedImage image = ImageUtils.createCenteredImage(getImageLibrary().getColopediaConceptImage(), colopediaPanel.getListItemIconSize());
142145
nodes.add(new DefaultMutableTreeNode(new ColopediaTreeItem(this,
143-
nodeId, nodeName, new ImageIcon(ImageLibrary.getColopediaConceptImage()))));
146+
nodeId, nodeName, new ImageIcon(image))));
144147
}
145148
Collections.sort(nodes, nodeComparator);
146149
for (DefaultMutableTreeNode n : nodes) {

src/net/sf/freecol/client/gui/panel/colopedia/FatherDetailPanel.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import net.sf.freecol.common.i18n.Messages;
4141
import net.sf.freecol.common.model.FoundingFather;
4242
import net.sf.freecol.common.model.FoundingFather.FoundingFatherType;
43+
import net.sf.freecol.common.util.ImageUtils;
4344
import net.sf.freecol.common.model.Specification;
4445
import net.sf.freecol.common.model.StringTemplate;
4546
import net.sf.freecol.common.model.Turn;
@@ -85,7 +86,7 @@ public void addSubTrees(DefaultMutableTreeNode root) {
8586
for (FoundingFather foundingFather : spec.getFoundingFathers()) {
8687
fathersByType.get(foundingFather.getType()).add(foundingFather);
8788
}
88-
ImageIcon icon = new ImageIcon(getImageLibrary().getLibertyImage());
89+
ImageIcon icon = new ImageIcon(ImageUtils.createCenteredImage(getImageLibrary().getLibertyImage(), getListItemIconSize()));
8990
for (FoundingFatherType fatherType : FoundingFatherType.values()) {
9091
String id = fatherType.getTypeKey();
9192
String typeName = Messages.message(id);

src/net/sf/freecol/client/gui/panel/colopedia/NationTypeDetailPanel.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import net.sf.freecol.common.model.IndianNationType;
5151
import net.sf.freecol.common.model.NationType;
5252
import net.sf.freecol.common.model.UnitType;
53+
import net.sf.freecol.common.util.ImageUtils;
5354
import net.sf.freecol.common.util.RandomChoice;
5455

5556

@@ -86,7 +87,7 @@ public void addSubTrees(DefaultMutableTreeNode root) {
8687
nations.addAll(getSpecification().getEuropeanNationTypes());
8788
nations.addAll(getSpecification().getREFNationTypes());
8889
nations.addAll(getSpecification().getIndianNationTypes());
89-
ImageIcon icon = new ImageIcon(getImageLibrary().getLibertyImage());
90+
ImageIcon icon = new ImageIcon(ImageUtils.createCenteredImage(getImageLibrary().getLibertyImage(), getListItemIconSize()));
9091
for (NationType type : nations) {
9192
// Suppress special case. FIXME: This is a kludge
9293
if ("model.nationType.optionOnly".equals(type.getId())) continue;

src/net/sf/freecol/client/gui/panel/colopedia/TerrainDetailPanel.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import net.sf.freecol.common.model.Modifier;
4646
import net.sf.freecol.common.model.ResourceType;
4747
import net.sf.freecol.common.model.TileType;
48+
import net.sf.freecol.common.util.ImageUtils;
4849

4950

5051
/**
@@ -76,17 +77,9 @@ public void addSubTrees(DefaultMutableTreeNode root) {
7677
= new DefaultMutableTreeNode(new ColopediaTreeItem(this, getId(),
7778
getName(), null));
7879
for (TileType t : getSpecification().getTileTypeList()) {
79-
BufferedImage tileImage
80-
= getImageLibrary().getTileImageWithOverlayAndForest(t,
81-
new Dimension(-1, ImageLibrary.ICON_SIZE.height));
82-
BufferedImage image = new BufferedImage(tileImage.getWidth(null),
83-
ImageLibrary.ICON_SIZE.height, BufferedImage.TYPE_INT_ARGB);
84-
Graphics2D g = image.createGraphics();
85-
g.drawImage(tileImage, 0,
86-
(ImageLibrary.ICON_SIZE.height - tileImage.getHeight(null)) / 2,
87-
null);
88-
g.dispose();
89-
ImageIcon icon = new ImageIcon(image);
80+
final Dimension size = getListItemIconSize();
81+
final BufferedImage tileImage = getImageLibrary().getTileImageWithOverlayAndForest(t, new Dimension(-1, size.height));
82+
final ImageIcon icon = new ImageIcon(ImageUtils.createCenteredImage(tileImage, size));
9083
node.add(buildItem(t, icon));
9184
}
9285
root.add(node);

src/net/sf/freecol/common/util/ImageUtils.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,38 @@ public static void fillTexture(Graphics2D g2d, BufferedImage img,
221221
g2d.setPaint(paint);
222222
g2d.fillRect(x, y, width, height);
223223
}
224+
225+
/**
226+
* Creates a new image of the given size with the provided image centered.
227+
*
228+
* @param image The image to be drawn in the center (both vertically and horizontally) of
229+
* the new image.
230+
* @param size The size of the new image.
231+
* @return A new image.
232+
*/
233+
public static BufferedImage createCenteredImage(BufferedImage image, Dimension size) {
234+
return createCenteredImage(image, size.width, size.height);
235+
}
236+
237+
/**
238+
* Creates a new image of the given size with the provided image centered.
239+
*
240+
* @param image The image to be drawn in the center (both vertically and horizontally) of
241+
* the new image.
242+
* @param width The width of the new image.
243+
* @param height The height of the new image.
244+
* @return A new image.
245+
*/
246+
public static BufferedImage createCenteredImage(BufferedImage image, int width, int height) {
247+
final int x = (width - image.getWidth(null)) / 2;
248+
final int y = (height - image.getHeight(null)) / 2;
249+
250+
final BufferedImage centeredImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
251+
final Graphics2D g = centeredImage.createGraphics();
252+
g.drawImage(image, x, y, null);
253+
g.dispose();
254+
return centeredImage;
255+
}
224256

225257
/**
226258
* Given a dimension with potential wildcard (non-positive) parts,

0 commit comments

Comments
 (0)