From 8a66861e16d870a5a5e9570adde176231dd43ed2 Mon Sep 17 00:00:00 2001 From: Kenneth VanderLinde Date: Mon, 6 May 2024 22:18:34 -0700 Subject: [PATCH 1/4] Update topology toolbar tooltip to include movement blocking --- src/main/resources/net/rptools/maptool/language/i18n.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/net/rptools/maptool/language/i18n.properties b/src/main/resources/net/rptools/maptool/language/i18n.properties index e59f32e4e9..0012acd3d2 100644 --- a/src/main/resources/net/rptools/maptool/language/i18n.properties +++ b/src/main/resources/net/rptools/maptool/language/i18n.properties @@ -2730,7 +2730,7 @@ tools.token.fow.all.tooltip = Show FoW for All Tokens you explicitly own or are tools.token.fow.gm.tooltip = Show FoW for Tokens you explicitly own.
IF you are a GM, you will also see any tokens that have no ownership set. tools.token.fow.npc.tooltip = Show FoW for NPC Tokens you explicitly own or are owned by all. tools.token.fow.pc.tooltip = Show FoW for PC Tokens you explicitly own or are owned by all. -tools.topo.tooltip = Vision Blocking Layer (VBL) Tools +tools.topo.tooltip = Topology Tools (Vision and Movement Blocking Layer) tools.zoneselector.tooltip = Select Map tools.initiative.tooltip = Initiative Tools From 80ff44ac5a57edeb0bbc45971045f20da4d885a3 Mon Sep 17 00:00:00 2001 From: Kenneth VanderLinde Date: Mon, 6 May 2024 21:34:16 -0700 Subject: [PATCH 2/4] Fix several tools to update the coordinate status bar All topology tools needed this fix, as did the oval drawing tool. Each one of these failed to call `super.mouseMoved()` in their respective overrides but now do so at the start of the method. The board and grid adjust tools were similar, but did not need their overrides at all. --- .../rptools/maptool/client/tool/boardtool/BoardTool.java | 6 ------ .../maptool/client/tool/drawing/CrossTopologyTool.java | 2 ++ .../maptool/client/tool/drawing/DiamondTopologyTool.java | 2 ++ .../client/tool/drawing/HollowDiamondTopologyTool.java | 2 ++ .../maptool/client/tool/drawing/HollowOvalTopologyTool.java | 1 + .../client/tool/drawing/HollowRectangleTopologyTool.java | 2 ++ .../net/rptools/maptool/client/tool/drawing/OvalTool.java | 2 ++ .../maptool/client/tool/drawing/OvalTopologyTool.java | 2 ++ .../maptool/client/tool/drawing/RectangleTopologyTool.java | 2 ++ .../net/rptools/maptool/client/tool/gridtool/GridTool.java | 6 ------ 10 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/tool/boardtool/BoardTool.java b/src/main/java/net/rptools/maptool/client/tool/boardtool/BoardTool.java index 3952420334..a25560d39a 100644 --- a/src/main/java/net/rptools/maptool/client/tool/boardtool/BoardTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/boardtool/BoardTool.java @@ -280,12 +280,6 @@ public void mouseDragged(java.awt.event.MouseEvent e) { } } - @Override - public void mouseMoved(java.awt.event.MouseEvent e) { - mouseX = e.getX(); - mouseY = e.getY(); - } - /** A simple enum for correlating keys with directions */ private enum Direction { Left, diff --git a/src/main/java/net/rptools/maptool/client/tool/drawing/CrossTopologyTool.java b/src/main/java/net/rptools/maptool/client/tool/drawing/CrossTopologyTool.java index b9f508c62e..226c75fe81 100644 --- a/src/main/java/net/rptools/maptool/client/tool/drawing/CrossTopologyTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/drawing/CrossTopologyTool.java @@ -119,6 +119,8 @@ public void mouseDragged(MouseEvent e) { @Override public void mouseMoved(MouseEvent e) { + super.mouseMoved(e); + setIsEraser(isEraser(e)); ZonePoint p = getPoint(e); diff --git a/src/main/java/net/rptools/maptool/client/tool/drawing/DiamondTopologyTool.java b/src/main/java/net/rptools/maptool/client/tool/drawing/DiamondTopologyTool.java index b436ab21fb..f8c77dc832 100644 --- a/src/main/java/net/rptools/maptool/client/tool/drawing/DiamondTopologyTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/drawing/DiamondTopologyTool.java @@ -107,6 +107,8 @@ public void mouseDragged(MouseEvent e) { @Override public void mouseMoved(MouseEvent e) { + super.mouseMoved(e); + setIsEraser(isEraser(e)); ZonePoint zp = getPoint(e); diff --git a/src/main/java/net/rptools/maptool/client/tool/drawing/HollowDiamondTopologyTool.java b/src/main/java/net/rptools/maptool/client/tool/drawing/HollowDiamondTopologyTool.java index ccfe55cdc4..2b56df06c8 100644 --- a/src/main/java/net/rptools/maptool/client/tool/drawing/HollowDiamondTopologyTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/drawing/HollowDiamondTopologyTool.java @@ -106,6 +106,8 @@ public void mouseDragged(MouseEvent e) { @Override public void mouseMoved(MouseEvent e) { + super.mouseMoved(e); + setIsEraser(isEraser(e)); ZonePoint zp = getPoint(e); diff --git a/src/main/java/net/rptools/maptool/client/tool/drawing/HollowOvalTopologyTool.java b/src/main/java/net/rptools/maptool/client/tool/drawing/HollowOvalTopologyTool.java index 84504a1702..722e1cd1a3 100644 --- a/src/main/java/net/rptools/maptool/client/tool/drawing/HollowOvalTopologyTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/drawing/HollowOvalTopologyTool.java @@ -124,6 +124,7 @@ public void mouseDragged(MouseEvent e) { } public void mouseMoved(MouseEvent e) { + super.mouseMoved(e); setIsEraser(isEraser(e)); diff --git a/src/main/java/net/rptools/maptool/client/tool/drawing/HollowRectangleTopologyTool.java b/src/main/java/net/rptools/maptool/client/tool/drawing/HollowRectangleTopologyTool.java index 6248b45452..eff224ca08 100644 --- a/src/main/java/net/rptools/maptool/client/tool/drawing/HollowRectangleTopologyTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/drawing/HollowRectangleTopologyTool.java @@ -116,6 +116,8 @@ public void mouseDragged(MouseEvent e) { @Override public void mouseMoved(MouseEvent e) { + super.mouseMoved(e); + setIsEraser(isEraser(e)); ZonePoint p = getPoint(e); diff --git a/src/main/java/net/rptools/maptool/client/tool/drawing/OvalTool.java b/src/main/java/net/rptools/maptool/client/tool/drawing/OvalTool.java index 516e778c88..e99f99a48e 100644 --- a/src/main/java/net/rptools/maptool/client/tool/drawing/OvalTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/drawing/OvalTool.java @@ -126,6 +126,8 @@ public void mouseDragged(MouseEvent e) { */ @Override public void mouseMoved(MouseEvent e) { + super.mouseMoved(e); + if (oval != null) { ZonePoint sp = getPoint(e); diff --git a/src/main/java/net/rptools/maptool/client/tool/drawing/OvalTopologyTool.java b/src/main/java/net/rptools/maptool/client/tool/drawing/OvalTopologyTool.java index 69d410c574..32b994ac70 100644 --- a/src/main/java/net/rptools/maptool/client/tool/drawing/OvalTopologyTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/drawing/OvalTopologyTool.java @@ -109,6 +109,8 @@ public void mouseDragged(MouseEvent e) { @Override public void mouseMoved(MouseEvent e) { + super.mouseMoved(e); + setIsEraser(isEraser(e)); if (oval != null) { ZonePoint sp = getPoint(e); diff --git a/src/main/java/net/rptools/maptool/client/tool/drawing/RectangleTopologyTool.java b/src/main/java/net/rptools/maptool/client/tool/drawing/RectangleTopologyTool.java index ce75e04439..8bf5a95d39 100644 --- a/src/main/java/net/rptools/maptool/client/tool/drawing/RectangleTopologyTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/drawing/RectangleTopologyTool.java @@ -108,6 +108,8 @@ public void mouseDragged(MouseEvent e) { @Override public void mouseMoved(MouseEvent e) { + super.mouseMoved(e); + setIsEraser(isEraser(e)); ZonePoint p = getPoint(e); diff --git a/src/main/java/net/rptools/maptool/client/tool/gridtool/GridTool.java b/src/main/java/net/rptools/maptool/client/tool/gridtool/GridTool.java index 13e0343f70..fa4a0bfcd2 100644 --- a/src/main/java/net/rptools/maptool/client/tool/gridtool/GridTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/gridtool/GridTool.java @@ -302,12 +302,6 @@ public void mouseDragged(java.awt.event.MouseEvent e) { } } - @Override - public void mouseMoved(java.awt.event.MouseEvent e) { - mouseX = e.getX(); - mouseY = e.getY(); - } - //// // MOUSE WHEEL LISTENER /* From 28b4548585ebad50ba15c4282580a67c8ecb0bd6 Mon Sep 17 00:00:00 2001 From: Kenneth VanderLinde Date: Mon, 6 May 2024 21:36:14 -0700 Subject: [PATCH 3/4] Change Pointer, Stamp and Line tool to call super at start of method This ensures the mouse coordinates are saved and the coordinate status bar is updated, regardless of whatever else happens in these methods. --- .../java/net/rptools/maptool/client/tool/PointerTool.java | 5 ++--- src/main/java/net/rptools/maptool/client/tool/StampTool.java | 3 ++- .../net/rptools/maptool/client/tool/drawing/LineTool.java | 3 ++- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/tool/PointerTool.java b/src/main/java/net/rptools/maptool/client/tool/PointerTool.java index 091741f7ec..f952e118c2 100644 --- a/src/main/java/net/rptools/maptool/client/tool/PointerTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/PointerTool.java @@ -662,13 +662,12 @@ public void mouseReleased(MouseEvent e) { // MouseMotion @Override public void mouseMoved(MouseEvent e) { + super.mouseMoved(e); + if (renderer == null) { return; } - super.mouseMoved(e); - // mouseX = e.getX(); // done by super.mouseMoved() - // mouseY = e.getY(); if (isShowingPointer) { ZonePoint zp = new ScreenPoint(mouseX, mouseY).convertToZone(renderer); Pointer pointer = diff --git a/src/main/java/net/rptools/maptool/client/tool/StampTool.java b/src/main/java/net/rptools/maptool/client/tool/StampTool.java index 74d1c6cb77..c85b374f20 100644 --- a/src/main/java/net/rptools/maptool/client/tool/StampTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/StampTool.java @@ -496,10 +496,11 @@ public void mouseReleased(MouseEvent e) { */ @Override public void mouseMoved(MouseEvent e) { + super.mouseMoved(e); + if (renderer == null) { return; } - super.mouseMoved(e); if (isShowingTokenStackPopup) { if (tokenStackPanel.contains(e.getX(), e.getY())) { diff --git a/src/main/java/net/rptools/maptool/client/tool/drawing/LineTool.java b/src/main/java/net/rptools/maptool/client/tool/drawing/LineTool.java index bc88330a9f..6de6cd9cc0 100644 --- a/src/main/java/net/rptools/maptool/client/tool/drawing/LineTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/drawing/LineTool.java @@ -65,12 +65,13 @@ public void mouseDragged(MouseEvent e) { @Override public void mouseMoved(MouseEvent e) { + super.mouseMoved(e); + if (getLine() != null) { if (tempPoint != null) { removePoint(tempPoint); } tempPoint = addPoint(e); } - super.mouseMoved(e); } } From 0c1e2cdd4a55544028ec1efc72f022f716ba847b Mon Sep 17 00:00:00 2001 From: Kenneth VanderLinde Date: Mon, 6 May 2024 21:52:25 -0700 Subject: [PATCH 4/4] Clean up DrawnLabel This is a legacy label implementation, referenced nowhere except during serialization. We have to keep it around because campaigns may have them serialized. However the corresponding tool `DrawnTextTool` is unused and has been removed, and some parts of `DrawnLabel` could be removed as well. --- .../client/tool/drawing/DrawnTextTool.java | 269 ------------------ .../maptool/model/drawing/DrawnLabel.java | 47 +-- 2 files changed, 27 insertions(+), 289 deletions(-) delete mode 100644 src/main/java/net/rptools/maptool/client/tool/drawing/DrawnTextTool.java diff --git a/src/main/java/net/rptools/maptool/client/tool/drawing/DrawnTextTool.java b/src/main/java/net/rptools/maptool/client/tool/drawing/DrawnTextTool.java deleted file mode 100644 index 2dc51bc0cb..0000000000 --- a/src/main/java/net/rptools/maptool/client/tool/drawing/DrawnTextTool.java +++ /dev/null @@ -1,269 +0,0 @@ -/* - * This software Copyright by the RPTools.net development team, and - * licensed under the Affero GPL Version 3 or, at your option, any later - * version. - * - * MapTool Source Code is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU Affero General Public - * License * along with this source Code. If not, please visit - * and specifically the Affero license - * text at . - */ -package net.rptools.maptool.client.tool.drawing; - -import java.awt.Color; -import java.awt.Font; -import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.event.ActionEvent; -import java.awt.event.KeyEvent; -import java.awt.event.MouseEvent; -import java.awt.event.MouseMotionListener; -import java.util.Map; -import javax.swing.AbstractAction; -import javax.swing.Action; -import javax.swing.KeyStroke; -import javax.swing.text.Style; -import net.rptools.maptool.client.swing.TwoToneTextPane; -import net.rptools.maptool.client.tool.Tool; -import net.rptools.maptool.client.ui.zone.renderer.ZoneRenderer; -import net.rptools.maptool.model.drawing.DrawnLabel; -import net.rptools.maptool.model.drawing.Pen; - -/** - * A text tool that uses a text component to allow text to be entered on the display and then - * renders it as an image. - * - * @author jgorrell - * @version $Revision: 5945 $ $Date: 2006-03-11 02:57:18 -0600 (Sat, 11 Mar 2006) $ $Author: - * azhrei_fje $ - */ -public class DrawnTextTool extends AbstractDrawingTool implements MouseMotionListener { - - /*--------------------------------------------------------------------------------------------- - * Instance Variables - *-------------------------------------------------------------------------------------------*/ - - /** Flag used to indicate that the anchor has been set. */ - private boolean anchorSet; - - /** The anchor point originally selected */ - private Point anchor = new Point(); - - /** The bounds of the display rectangle */ - private Rectangle bounds = new Rectangle(); - - /** The text pane used to paint the text. */ - private TwoToneTextPane textPane; - - /*--------------------------------------------------------------------------------------------- - * Constructors - *-------------------------------------------------------------------------------------------*/ - - /** A transparent color used in the background */ - private static final Color TRANSPARENT = new Color(0, 0, 0, 0); - - /*--------------------------------------------------------------------------------------------- - * Constructors - *-------------------------------------------------------------------------------------------*/ - - /** Initialize the tool icon */ - public DrawnTextTool() {} - - /*--------------------------------------------------------------------------------------------- - * Tool & AbstractDrawingTool Abstract Methods - *-------------------------------------------------------------------------------------------*/ - - /** - * @see net.rptools.maptool.client.tool.drawing.AbstractDrawingTool#paintOverlay(ZoneRenderer, - * java.awt.Graphics2D) - */ - @Override - public void paintOverlay(ZoneRenderer aRenderer, Graphics2D aG) { - if (!anchorSet) return; - aG.setColor(Color.BLACK); - aG.drawRect(bounds.x, bounds.y, bounds.width, bounds.height); - } - - /** - * @see Tool#getTooltip() - */ - @Override - public String getTooltip() { - return "tool.text.tooltip"; - } - - /** - * @see Tool#getInstructions() - */ - @Override - public String getInstructions() { - return "tool.text.instructions"; - } - - /** - * @see Tool#resetTool() - */ - @Override - protected void resetTool() { - anchorSet = false; - if (textPane != null) renderer.remove(textPane); - textPane = null; - renderer.repaint(); - } - - /*--------------------------------------------------------------------------------------------- - * MouseListener Interface Methods - *-------------------------------------------------------------------------------------------*/ - - /** - * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent) - */ - public void mouseClicked(MouseEvent event) { - // Do nothing - } - - /** - * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent) - */ - public void mousePressed(MouseEvent event) { - if (!anchorSet) { - anchor.x = event.getX(); - anchor.y = event.getY(); - anchorSet = true; - } else { - setBounds(event); - - // Create a text component and place it on the renderer's component - textPane = createTextPane(bounds, getPen(), "sanserif-BOLD-20"); - renderer.add(textPane); - textPane.requestFocusInWindow(); - - // Make the enter key addthe text - KeyStroke k = KeyStroke.getKeyStroke("ENTER"); - textPane.getKeymap().removeKeyStrokeBinding(k); - textPane - .getKeymap() - .addActionForKeyStroke( - k, - new AbstractAction() { - public void actionPerformed(ActionEvent aE) { - completeDrawable(); - } - }); - } - } - - /** - * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent) - */ - public void mouseReleased(MouseEvent aE) { - // TODO Auto-generated method stub - - } - - /** - * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent) - */ - public void mouseEntered(MouseEvent aE) { - // TODO Auto-generated method stub - - } - - /** - * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent) - */ - public void mouseExited(MouseEvent aE) { - // TODO Auto-generated method stub - - } - - /*--------------------------------------------------------------------------------------------- - * MouseMotionListener Interface Methods - *-------------------------------------------------------------------------------------------*/ - - /** - * @see java.awt.event.MouseMotionListener#mouseMoved(java.awt.event.MouseEvent) - */ - public void mouseMoved(MouseEvent event) { - if (!anchorSet) return; - if (textPane != null) return; - setBounds(event); - renderer.repaint(); - } - - /** - * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent) - */ - public void mouseDragged(MouseEvent aE) { - // TODO Auto-generated method stub - - } - - @Override - protected void installKeystrokes(Map actionMap) { - super.installKeystrokes(actionMap); - actionMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0, true), null); - actionMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0, false), null); - } - - /*--------------------------------------------------------------------------------------------- - * Instance Methods - *-------------------------------------------------------------------------------------------*/ - - /** - * Set the bounds for the text area. - * - * @param event The mouse event used in the calculation. - */ - private void setBounds(MouseEvent event) { - bounds.x = Math.min(anchor.x, event.getX()); - bounds.y = Math.min(anchor.y, event.getY()); - bounds.width = Math.abs(anchor.x - event.getX()); - bounds.height = Math.abs(anchor.y - event.getY()); - } - - /** Finish drawing the text. */ - private void completeDrawable() { - - // Create a drawable from the data and clean up the component. - DrawnLabel label = - new DrawnLabel( - textPane.getText(), bounds, TwoToneTextPane.getFontString(textPane.getLogicalStyle())); - textPane.setVisible(false); - textPane.getParent().remove(textPane); - textPane = null; - - // Tell everybody else - completeDrawable(getPen(), label); - resetTool(); - } - - /** - * Create a text pane with the passed bounds, pen, and font data - * - * @param bounds Bounds of the new text pane - * @param pen Pen used for foreground and background text colors. - * @param font Font used to pain the text - * @return A text pane used to draw text - */ - public static TwoToneTextPane createTextPane(Rectangle bounds, Pen pen, String font) { - // Create a text component and place it on the renderer's component - TwoToneTextPane textPane = new TwoToneTextPane(); - textPane.setBounds(bounds); - textPane.setOpaque(false); - textPane.setBackground(TRANSPARENT); - - // Create a style for the component - Style style = textPane.addStyle("default", null); - TwoToneTextPane.setFont(style, Font.decode(font)); - // style.addAttribute(StyleConstants.Foreground, new Color(pen.getColor())); - // style.addAttribute(StyleConstants.Background, new Color(pen.getBackgroundColor())); - textPane.setLogicalStyle(style); - return textPane; - } -} diff --git a/src/main/java/net/rptools/maptool/model/drawing/DrawnLabel.java b/src/main/java/net/rptools/maptool/model/drawing/DrawnLabel.java index eeda8cf6c2..b1f246145d 100644 --- a/src/main/java/net/rptools/maptool/model/drawing/DrawnLabel.java +++ b/src/main/java/net/rptools/maptool/model/drawing/DrawnLabel.java @@ -15,14 +15,15 @@ package net.rptools.maptool.model.drawing; import com.google.protobuf.StringValue; +import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.geom.Area; import javax.annotation.Nonnull; import javax.swing.CellRendererPane; +import javax.swing.text.Style; import net.rptools.maptool.client.swing.TwoToneTextPane; -import net.rptools.maptool.client.tool.drawing.DrawnTextTool; import net.rptools.maptool.model.GUID; import net.rptools.maptool.model.Zone; import net.rptools.maptool.server.Mapper; @@ -37,13 +38,13 @@ public class DrawnLabel extends AbstractDrawing { /** The bounds of the display rectangle */ - private Rectangle bounds; + private final Rectangle bounds; /** Text being painted. */ - private String text; + private final String text; /** The font used to paint the text. */ - private String font; + private final String font; /** The pane used to render the text */ private transient CellRendererPane renderer; @@ -51,20 +52,6 @@ public class DrawnLabel extends AbstractDrawing { /** The text pane used to paint the text. */ private transient TwoToneTextPane textPane; - /** - * Create a new drawn label. - * - * @param theText Text to be drawn - * @param theBounds The bounds containing the text. - * @param aFont The font used to draw the text as a string that can be passed to {@link - * Font#decode(java.lang.String)}. - */ - public DrawnLabel(String theText, Rectangle theBounds, String aFont) { - text = theText; - bounds = theBounds; - font = aFont; - } - public DrawnLabel(GUID id, String theText, Rectangle theBounds, String aFont) { super(id); text = theText; @@ -95,7 +82,7 @@ public String getFont() { public void draw(Zone zone, Graphics2D aG) { if (renderer == null) { renderer = new CellRendererPane(); - textPane = DrawnTextTool.createTextPane(bounds, null, font); + textPane = createTextPane(bounds, font); textPane.setText(text); } renderer.paintComponent(aG, textPane, null, bounds); @@ -130,7 +117,6 @@ public DrawableDto toDto() { public static DrawnLabel fromDto(DrawnLabelDto dto) { var id = GUID.valueOf(dto.getId()); - var bounds = dto.getBounds(); var drawable = new DrawnLabel(id, dto.getText(), Mapper.map(dto.getBounds()), dto.getFont()); if (dto.hasName()) { drawable.setName(dto.getName().getValue()); @@ -138,4 +124,25 @@ public static DrawnLabel fromDto(DrawnLabelDto dto) { drawable.setLayer(Zone.Layer.valueOf(dto.getLayer())); return drawable; } + + /** + * Create a text pane with the passed bounds, pen, and font data + * + * @param bounds Bounds of the new text pane + * @param font Font used to pain the text + * @return A text pane used to draw text + */ + private static TwoToneTextPane createTextPane(Rectangle bounds, String font) { + // Create a text component and place it on the renderer's component + TwoToneTextPane textPane = new TwoToneTextPane(); + textPane.setBounds(bounds); + textPane.setOpaque(false); + textPane.setBackground(new Color(0, 0, 0, 0)); // Transparent + + // Create a style for the component + Style style = textPane.addStyle("default", null); + TwoToneTextPane.setFont(style, Font.decode(font)); + textPane.setLogicalStyle(style); + return textPane; + } }