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/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/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/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/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); } } 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 /* 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; + } } 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