diff --git a/src/main/java/net/rptools/maptool/client/DeveloperOptions.java b/src/main/java/net/rptools/maptool/client/DeveloperOptions.java index 485faaa312..298f965911 100644 --- a/src/main/java/net/rptools/maptool/client/DeveloperOptions.java +++ b/src/main/java/net/rptools/maptool/client/DeveloperOptions.java @@ -55,12 +55,6 @@ public static final class Toggle { "Preferences.developer.debugTokenDragging.label", "Preferences.developer.debugTokenDragging.tooltip", false); - public static final Preference EnableLibGdxRendererToggleButton = - store.defineBoolean( - "enableLibGDXRendererToggleButton", - "Preferences.developer.enableLibGDXRendererToggleButton.label", - "Preferences.developer.enableLibGDXRendererToggleButton.tooltip", - false); public static List> getOptions() { return store.getDefinedPreferences().stream() 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 654961d98f..b2bb1f0970 100644 --- a/src/main/java/net/rptools/maptool/client/tool/PointerTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/PointerTool.java @@ -478,6 +478,8 @@ public void mousePressed(MouseEvent e) { @Override public void mouseReleased(MouseEvent e) { + final boolean isDraggingMap = isDraggingMap(); + super.mouseReleased(e); mouseButtonDown = false; @@ -563,7 +565,7 @@ public void mouseReleased(MouseEvent e) { } // POPUP MENU - if (SwingUtilities.isRightMouseButton(e) && tokenDragOp == null && !isDraggingMap()) { + if (SwingUtilities.isRightMouseButton(e) && tokenDragOp == null && !isDraggingMap) { final var selectionModel = renderer.getSelectionModel(); if (tokenUnderMouse != null && !selectionModel.isSelected(tokenUnderMouse.getId())) { if (!SwingUtil.isShiftDown(e)) { @@ -585,7 +587,6 @@ public void mouseReleased(MouseEvent e) { return; } } - super.mouseReleased(e); } // // 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 af3dbe5f4f..15c81e10ff 100644 --- a/src/main/java/net/rptools/maptool/client/tool/StampTool.java +++ b/src/main/java/net/rptools/maptool/client/tool/StampTool.java @@ -377,6 +377,8 @@ public void mousePressed(MouseEvent e) { @Override public void mouseReleased(MouseEvent e) { + final boolean isDraggingMap = isDraggingMap(); + super.mouseReleased(e); if (isShowingTokenStackPopup) { @@ -446,7 +448,7 @@ public void mouseReleased(MouseEvent e) { return; } // POPUP MENU - if (SwingUtilities.isRightMouseButton(e) && tokenDragOp == null && !isDraggingMap()) { + if (SwingUtilities.isRightMouseButton(e) && tokenDragOp == null && !isDraggingMap) { final var selectionModel = renderer.getSelectionModel(); if (tokenUnderMouse != null && !selectionModel.isSelected(tokenUnderMouse.getId())) { if (!SwingUtil.isShiftDown(e)) { @@ -469,7 +471,6 @@ public void mouseReleased(MouseEvent e) { return; } } - super.mouseReleased(e); } // // diff --git a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java index 2def723e30..096f799622 100644 --- a/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java +++ b/src/main/java/net/rptools/maptool/client/ui/MapToolFrame.java @@ -14,13 +14,10 @@ */ package net.rptools.maptool.client.ui; -import com.badlogic.gdx.backends.jogamp.JoglAwtApplicationConfiguration; -import com.badlogic.gdx.backends.jogamp.JoglSwingCanvas; import com.google.common.eventbus.Subscribe; import com.jidesoft.docking.DefaultDockableHolder; import com.jidesoft.docking.DockableFrame; import com.jidesoft.docking.DockingManager; -import com.jogamp.opengl.awt.GLJPanel; import java.awt.*; import java.awt.event.*; import java.awt.image.BufferedImage; @@ -96,7 +93,6 @@ import net.rptools.maptool.client.ui.zone.PointerOverlay; import net.rptools.maptool.client.ui.zone.PointerToolOverlay; import net.rptools.maptool.client.ui.zone.ZoneMiniMapPanel; -import net.rptools.maptool.client.ui.zone.gdx.GdxRenderer; import net.rptools.maptool.client.ui.zone.renderer.ZoneRenderer; import net.rptools.maptool.events.MapToolEventBus; import net.rptools.maptool.language.I18N; @@ -159,8 +155,6 @@ public class MapToolFrame extends DefaultDockableHolder implements WindowListene /** Contains the zoneRenderer, as well as all overlays. */ private final JPanel zoneRendererPanel; - private GLJPanel gdxPanel; - private JPanel currentRenderPanel; /** Contains the overlays that should be displayed in front of everything else. */ @@ -416,11 +410,9 @@ public MapToolFrame(JMenuBar menuBar) { zoneRendererPanel = new JPanel(new PositionalLayout(5)); zoneRendererPanel.setBackground(Color.black); currentRenderPanel = zoneRendererPanel; - initGdx(); zoneRendererPanel.add(getChatTypingPanel(), PositionalLayout.Position.NW); zoneRendererPanel.add(getChatActionLabel(), PositionalLayout.Position.SW); - zoneRendererPanel.add(gdxPanel, PositionalLayout.Position.CENTER); commandPanel = new CommandPanel(); @@ -472,37 +464,6 @@ public MapToolFrame(JMenuBar menuBar) { setChatTypingLabelColor(AppPreferences.chatNotificationColor.get()); } - private void initGdx() { - var config = new JoglAwtApplicationConfiguration(); - // config.foregroundFPS = 300; - // config.backgroundFPS = 10; - // config.title = "maptool"; - // config.width = 640; - // config.height = 480; - // config.samples = 1; - // var config = new LwjglApplicationConfiguration(); - config.foregroundFPS = 10000; - config.vSyncEnabled = false; - - var joglSwingCanvas = new JoglSwingCanvas(GdxRenderer.getInstance(), config); - // var joglSwingCanvas = new LwjglAWTCanvas(GdxRenderer.getInstance(), config); - - gdxPanel = joglSwingCanvas.getGLCanvas(); - gdxPanel.setVisible(false); - gdxPanel.setOpaque(false); - // gdxPanel.setLayout(new PositionalLayout(5)); - } - - public void switchRenderers() { - var isVisible = gdxPanel.isVisible(); - gdxPanel.setVisible(!isVisible); - // currentRenderer.setVisible(isVisible); - } - - public GLJPanel getGdxPanel() { - return gdxPanel; - } - public ChatNotificationTimers getChatNotificationTimers() { return chatTyperTimers; } diff --git a/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java b/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java index bcaf4b7184..76d6874b42 100644 --- a/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java +++ b/src/main/java/net/rptools/maptool/client/ui/ToolbarPanel.java @@ -18,7 +18,6 @@ import java.util.Enumeration; import java.util.Hashtable; import javax.swing.*; -import net.rptools.maptool.client.DeveloperOptions; import net.rptools.maptool.client.MapTool; import net.rptools.maptool.client.functions.MediaPlayerAdapter; import net.rptools.maptool.client.swing.SwingUtil; @@ -167,8 +166,6 @@ public ToolbarPanel(Toolbox tbox) { tokenSelectionButtonAll.setSelected(true); // Jamz: End panel - add(createGdxButton(Icons.TOOLBAR_LIBGDX)); - // the "Select Map" button mapselect = createZoneSelectionButton(); add(mapselect); @@ -541,20 +538,6 @@ private JToggleButton createMuteButton( return button; } - private JToggleButton createGdxButton(final Icons icon) { - final JToggleButton button = new JToggleButton(); - button.addActionListener( - e -> { - MapTool.getFrame().switchRenderers(); - }); - - button.setIcon(RessourceManager.getBigIcon(icon)); - button.setVisible(DeveloperOptions.Toggle.EnableLibGdxRendererToggleButton.get()); - DeveloperOptions.Toggle.EnableLibGdxRendererToggleButton.onChange(button::setVisible); - - return button; - } - private JToggleButton createTokenSelectionButton( final Icons icon, final Icons offIcon, String tooltip, TokenSelection tokenSelection) { final JToggleButton button = new JToggleButton(); diff --git a/src/main/java/net/rptools/maptool/client/ui/htmlframe/HTMLContent.java b/src/main/java/net/rptools/maptool/client/ui/htmlframe/HTMLContent.java index 53dd269644..0ba0913ff0 100644 --- a/src/main/java/net/rptools/maptool/client/ui/htmlframe/HTMLContent.java +++ b/src/main/java/net/rptools/maptool/client/ui/htmlframe/HTMLContent.java @@ -141,9 +141,8 @@ private record HtmlDocumentContent( document.outputSettings().charset(StandardCharsets.US_ASCII); } - public HtmlDocumentContent( - String str, boolean isJavaBridgeInjected, boolean isBaseUrlInjected) { - this(Jsoup.parse(str), isJavaBridgeInjected, isBaseUrlInjected); + public HtmlDocumentContent(String str) { + this(Jsoup.parse(HTMLPanelInterface.fixHTML(str)), false, false); } public String str() { @@ -176,7 +175,7 @@ private HTMLContent(Content content) { * @return an HTMLContent object */ public static HTMLContent htmlFromString(@Nonnull String html) { - return new HTMLContent(new HtmlDocumentContent(html, false, false)); + return new HTMLContent(new HtmlDocumentContent(html)); } /** @@ -333,7 +332,7 @@ public HTMLContent fetchContent() throws IOException { var assetType = Asset.Type.fromMediaType(mediaType); if (assetType == Asset.Type.HTML) { - return new HTMLContent(new HtmlDocumentContent(html, false, false)); + return new HTMLContent(new HtmlDocumentContent(html)); } return new HTMLContent(new StringContent(html)); } @@ -343,7 +342,7 @@ public HTMLContent fetchContent() throws IOException { if (asset != null) { if (asset.isStringAsset()) { if (asset.getType() == Asset.Type.HTML) { - return new HTMLContent(new HtmlDocumentContent(asset.getDataAsString(), false, false)); + return new HTMLContent(new HtmlDocumentContent(asset.getDataAsString())); } return new HTMLContent(new StringContent(asset.getDataAsString())); } else { diff --git a/src/main/java/net/rptools/maptool/client/ui/macrobuttons/dialog/MacroEditorDialog.java b/src/main/java/net/rptools/maptool/client/ui/macrobuttons/dialog/MacroEditorDialog.java index fa9e538699..5ef620a266 100644 --- a/src/main/java/net/rptools/maptool/client/ui/macrobuttons/dialog/MacroEditorDialog.java +++ b/src/main/java/net/rptools/maptool/client/ui/macrobuttons/dialog/MacroEditorDialog.java @@ -78,17 +78,17 @@ public class MacroEditorDialog extends JDialog implements SearchListener { private static final long serialVersionUID = 8228617911117087993L; private static final Logger log = LogManager.getLogger(MacroEditorDialog.class); private final AbeillePanel panel; - MacroButton button; - MacroButtonProperties properties; - boolean isTokenMacro = false; - int oldHashCode = 0; - Boolean startingCompareGroup; - Boolean startingCompareSortPrefix; - Boolean startingCompareCommand; - Boolean startingCompareIncludeLabel; - Boolean startingCompareAutoExecute; - Boolean startingCompareApplyToSelectedTokens; - Boolean startingAllowPlayerEdits; + private MacroButton button; + private MacroButtonProperties properties; + private boolean isTokenMacro = false; + private int oldHashCode = 0; + private Boolean startingCompareGroup; + private Boolean startingCompareSortPrefix; + private Boolean startingCompareCommand; + private Boolean startingCompareIncludeLabel; + private Boolean startingCompareAutoExecute; + private Boolean startingCompareApplyToSelectedTokens; + private Boolean startingAllowPlayerEdits; private final RSyntaxTextArea macroEditorRSyntaxTextArea = new RSyntaxTextArea(2, 2); private CollapsibleSectionPanel csp; @@ -374,6 +374,11 @@ public void show(MacroButton button) { } public void show(MacroButtonProperties mbp) { + if (mbp == null) { + MapTool.showError(I18N.getText("msg.error.macro.buttonPropsAreNull")); + return; + } + String id = mbp.getMacroUUID(); if (openMacroList.contains(id)) { return; @@ -382,11 +387,6 @@ public void show(MacroButtonProperties mbp) { updateOpenMacroList(true); this.isTokenMacro = properties.getToken() != null; - if (properties == null) { - MapTool.showError(I18N.getText("msg.error.macro.buttonPropsAreNull")); - return; - } - oldHashCode = properties.hashCodeForComparison(); boolean playerCanEdit = !MapTool.getPlayer().isGM() && properties.getAllowPlayerEdits(); boolean onGlobalPanel = properties.getSaveLocation().equals("Global"); @@ -726,141 +726,128 @@ protected void executeAction() { } } - // Jamz: maybe later... - // public void rememberLastWindowLocation() { - // Dimension windowSize = this.getSize(); - // - // int x = outerWindow.getLocation().x + (outerSize.width - innerSize.width) - // / 2; - // int y = outerWindow.getLocation().y + (outerSize.height - - // innerSize.height) / 2; - // - // Jamz: For multiple monitor's, x & y can be negative values... - // innerWindow.setLocation(x < 0 ? 0 : x, y < 0 ? 0 : y); - // innerWindow.setLocation(x, y); - // } - private void save(boolean closeDialog) { callback.accept(getCommandTextArea().getText()); - String hotKey = getHotKeyCombo().getSelectedItem().toString(); - properties.setHotKey(hotKey); - properties.setColorKey(getColorComboBox().getSelectedItem().toString()); - properties.setLabel(getLabelTextField().getText()); - properties.setGroup(getGroupTextField().getText()); - properties.setSortby(getSortbyTextField().getText()); - properties.setCommand(getCommandTextArea().getText()); - properties.setAutoExecute(getAutoExecuteCheckBox().isSelected()); - properties.setIncludeLabel(getIncludeLabelCheckBox().isSelected()); - properties.setApplyToTokens(getApplyToTokensCheckBox().isSelected()); - properties.setFontColorKey(getFontColorComboBox().getSelectedItem().toString()); - properties.setFontSize(getFontSizeComboBox().getSelectedItem().toString()); - properties.setMinWidth(getMinWidthTextField().getText()); - properties.setMaxWidth(getMaxWidthTextField().getText()); - properties.setCompareGroup(getCompareGroupCheckBox().isSelected()); - properties.setCompareSortPrefix(getCompareSortPrefixCheckBox().isSelected()); - properties.setCompareCommand(getCompareCommandCheckBox().isSelected()); - properties.setCompareIncludeLabel(getCompareIncludeLabelCheckBox().isSelected()); - properties.setCompareAutoExecute(getCompareAutoExecuteCheckBox().isSelected()); - properties.setCompareApplyToSelectedTokens( - getCompareApplyToSelectedTokensCheckBox().isSelected()); - properties.setAllowPlayerEdits(getAllowPlayerEditsCheckBox().isSelected()); - properties.setToolTip(getToolTipTextField().getText()); - properties.setDisplayHotKey(getDisplayHotkeyCheckBox().isSelected()); - - properties.save(); - - if (button != null) { - - button.getHotKeyManager().assignKeyStroke(hotKey); - button.setColor(getColorComboBox().getSelectedItem().toString()); - button.setText(this.button.getButtonText()); - - if (button.getPanelClass().equals("SelectionPanel")) { - if (MapTool.getFrame() - .getSelectionPanel() - .getCommonMacros() - .contains(button.getProperties())) { - boolean changeAllowPlayerEdits = false; - boolean endingAllowPlayerEdits = false; - if (startingAllowPlayerEdits) { - if (!properties.getAllowPlayerEdits()) { - boolean confirmDisallowPlayerEdits = - MapTool.confirm(I18N.getText("confirm.macro.disallowPlayerEdits")); - if (confirmDisallowPlayerEdits) { - changeAllowPlayerEdits = true; - endingAllowPlayerEdits = false; - } else { - properties.setAllowPlayerEdits(true); + if (properties != null) { + String hotKey = getHotKeyCombo().getSelectedItem().toString(); + properties.setHotKey(hotKey); + properties.setColorKey(getColorComboBox().getSelectedItem().toString()); + properties.setLabel(getLabelTextField().getText()); + properties.setGroup(getGroupTextField().getText()); + properties.setSortby(getSortbyTextField().getText()); + properties.setCommand(getCommandTextArea().getText()); + properties.setAutoExecute(getAutoExecuteCheckBox().isSelected()); + properties.setIncludeLabel(getIncludeLabelCheckBox().isSelected()); + properties.setApplyToTokens(getApplyToTokensCheckBox().isSelected()); + properties.setFontColorKey(getFontColorComboBox().getSelectedItem().toString()); + properties.setFontSize(getFontSizeComboBox().getSelectedItem().toString()); + properties.setMinWidth(getMinWidthTextField().getText()); + properties.setMaxWidth(getMaxWidthTextField().getText()); + properties.setCompareGroup(getCompareGroupCheckBox().isSelected()); + properties.setCompareSortPrefix(getCompareSortPrefixCheckBox().isSelected()); + properties.setCompareCommand(getCompareCommandCheckBox().isSelected()); + properties.setCompareIncludeLabel(getCompareIncludeLabelCheckBox().isSelected()); + properties.setCompareAutoExecute(getCompareAutoExecuteCheckBox().isSelected()); + properties.setCompareApplyToSelectedTokens( + getCompareApplyToSelectedTokensCheckBox().isSelected()); + properties.setAllowPlayerEdits(getAllowPlayerEditsCheckBox().isSelected()); + properties.setToolTip(getToolTipTextField().getText()); + properties.setDisplayHotKey(getDisplayHotkeyCheckBox().isSelected()); + + properties.save(); + + if (button != null) { + button.getHotKeyManager().assignKeyStroke(hotKey); + button.setColor(getColorComboBox().getSelectedItem().toString()); + button.setText(this.button.getButtonText()); + + if (button.getPanelClass().equals("SelectionPanel")) { + if (MapTool.getFrame() + .getSelectionPanel() + .getCommonMacros() + .contains(button.getProperties())) { + boolean changeAllowPlayerEdits = false; + boolean endingAllowPlayerEdits = false; + if (startingAllowPlayerEdits) { + if (!properties.getAllowPlayerEdits()) { + boolean confirmDisallowPlayerEdits = + MapTool.confirm(I18N.getText("confirm.macro.disallowPlayerEdits")); + if (confirmDisallowPlayerEdits) { + changeAllowPlayerEdits = true; + endingAllowPlayerEdits = false; + } else { + properties.setAllowPlayerEdits(true); + } } - } - } else { - if (properties.getAllowPlayerEdits()) { - boolean confirmAllowPlayerEdits = - MapTool.confirm(I18N.getText("confirm.macro.allowPlayerEdits")); - if (confirmAllowPlayerEdits) { - changeAllowPlayerEdits = true; - endingAllowPlayerEdits = true; - } else { - properties.setAllowPlayerEdits(false); + } else { + if (properties.getAllowPlayerEdits()) { + boolean confirmAllowPlayerEdits = + MapTool.confirm(I18N.getText("confirm.macro.allowPlayerEdits")); + if (confirmAllowPlayerEdits) { + changeAllowPlayerEdits = true; + endingAllowPlayerEdits = true; + } else { + properties.setAllowPlayerEdits(false); + } } } - } - boolean trusted = true; - for (Token nextToken : - MapTool.getFrame().getCurrentZoneRenderer().getSelectedTokensList()) { - trusted = AppUtil.playerOwns(nextToken); - boolean isGM = MapTool.getPlayer().isGM(); - for (MacroButtonProperties nextMacro : nextToken.getMacroList(trusted)) { - if (isGM || nextMacro.getApplyToTokens()) { - if (nextMacro.hashCodeForComparison() == oldHashCode) { - nextMacro.setLabel(properties.getLabel()); - if (properties.getCompareGroup() && startingCompareGroup) { - nextMacro.setGroup(properties.getGroup()); - } - if (properties.getCompareSortPrefix() && startingCompareSortPrefix) { - nextMacro.setSortby(properties.getSortby()); - } - if (properties.getCompareCommand() && startingCompareCommand) { - nextMacro.setCommand(properties.getCommand()); - } - if (properties.getCompareAutoExecute() && startingCompareAutoExecute) { - nextMacro.setAutoExecute(properties.getAutoExecute()); - } - if (properties.getCompareIncludeLabel() && startingCompareIncludeLabel) { - nextMacro.setIncludeLabel(properties.getIncludeLabel()); + boolean trusted = true; + for (Token nextToken : + MapTool.getFrame().getCurrentZoneRenderer().getSelectedTokensList()) { + trusted = AppUtil.playerOwns(nextToken); + boolean isGM = MapTool.getPlayer().isGM(); + for (MacroButtonProperties nextMacro : nextToken.getMacroList(trusted)) { + if (isGM || nextMacro.getApplyToTokens()) { + if (nextMacro.hashCodeForComparison() == oldHashCode) { + nextMacro.setLabel(properties.getLabel()); + if (properties.getCompareGroup() && startingCompareGroup) { + nextMacro.setGroup(properties.getGroup()); + } + if (properties.getCompareSortPrefix() && startingCompareSortPrefix) { + nextMacro.setSortby(properties.getSortby()); + } + if (properties.getCompareCommand() && startingCompareCommand) { + nextMacro.setCommand(properties.getCommand()); + } + if (properties.getCompareAutoExecute() && startingCompareAutoExecute) { + nextMacro.setAutoExecute(properties.getAutoExecute()); + } + if (properties.getCompareIncludeLabel() && startingCompareIncludeLabel) { + nextMacro.setIncludeLabel(properties.getIncludeLabel()); + } + if (properties.getCompareApplyToSelectedTokens() + && startingCompareApplyToSelectedTokens) { + nextMacro.setApplyToTokens(properties.getApplyToTokens()); + } + if (changeAllowPlayerEdits) { + nextMacro.setAllowPlayerEdits(endingAllowPlayerEdits); + } + nextMacro.setCompareGroup(properties.getCompareGroup()); + nextMacro.setCompareSortPrefix(properties.getCompareSortPrefix()); + nextMacro.setCompareCommand(properties.getCompareCommand()); + nextMacro.setCompareAutoExecute(properties.getCompareAutoExecute()); + nextMacro.setCompareIncludeLabel(properties.getCompareIncludeLabel()); + nextMacro.setCompareApplyToSelectedTokens( + properties.getCompareApplyToSelectedTokens()); + nextMacro.save(); } - if (properties.getCompareApplyToSelectedTokens() - && startingCompareApplyToSelectedTokens) { - nextMacro.setApplyToTokens(properties.getApplyToTokens()); - } - if (changeAllowPlayerEdits) { - nextMacro.setAllowPlayerEdits(endingAllowPlayerEdits); - } - nextMacro.setCompareGroup(properties.getCompareGroup()); - nextMacro.setCompareSortPrefix(properties.getCompareSortPrefix()); - nextMacro.setCompareCommand(properties.getCompareCommand()); - nextMacro.setCompareAutoExecute(properties.getCompareAutoExecute()); - nextMacro.setCompareIncludeLabel(properties.getCompareIncludeLabel()); - nextMacro.setCompareApplyToSelectedTokens( - properties.getCompareApplyToSelectedTokens()); - nextMacro.save(); } } } } + MapTool.getFrame().getSelectionPanel().reset(); + } + if (button.getPanelClass().equals("CampaignPanel")) { + MapTool.serverCommand() + .updateCampaignMacros(MapTool.getCampaign().getMacroButtonPropertiesArray()); + MapTool.getFrame().getCampaignPanel().reset(); } - MapTool.getFrame().getSelectionPanel().reset(); - } - if (button.getPanelClass().equals("CampaignPanel")) { - MapTool.serverCommand() - .updateCampaignMacros(MapTool.getCampaign().getMacroButtonPropertiesArray()); - MapTool.getFrame().getCampaignPanel().reset(); - } - if (button.getPanelClass().equals("GmPanel")) { - MapTool.serverCommand() - .updateGmMacros(MapTool.getCampaign().getGmMacroButtonPropertiesArray()); - MapTool.getFrame().getGmPanel().reset(); + if (button.getPanelClass().equals("GmPanel")) { + MapTool.serverCommand() + .updateGmMacros(MapTool.getCampaign().getGmMacroButtonPropertiesArray()); + MapTool.getFrame().getGmPanel().reset(); + } } } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneViewModel.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneViewModel.java index ef9d816e1c..4264417601 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneViewModel.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneViewModel.java @@ -108,7 +108,6 @@ public static TokenPosition fromToken(Token token, Zone zone) { private final Rectangle2D viewport = new Rectangle2D.Double(); private Area visibleArea = new Area(); - private final List selectedTokenList = new ArrayList<>(); private final Set movingTokens = new HashSet<>(); private final Map tokenPositions = new HashMap<>(); @@ -222,7 +221,14 @@ public Map> getTokenStackMap() { } public List getSelectedTokenList() { - return Collections.unmodifiableList(selectedTokenList); + var tokens = new ArrayList(); + for (GUID g : selectionModel.getSelectedTokenIds()) { + final var token = zone.getToken(g); + if (token != null) { + tokens.add(token); + } + } + return tokens; } public Set getVisibleTokens(Zone.Layer layer) { @@ -252,7 +258,6 @@ public void update() { updateViewport(); updatePlayerView(); updateVisibleArea(); - updateSelectedTokensList(); updateMovingTokens(); updateTokenPositions(); updateMarkerPositions(); @@ -261,15 +266,16 @@ public void update() { updateLightPosition(); } + // What follows are "systems". + + /** Updates {@link #isUsingGdxRenderer}. */ private void updateIsUsingGdxRenderer() { - isUsingGdxRenderer = MapTool.getFrame().getGdxPanel().isVisible(); + isUsingGdxRenderer = false; } - // What follows are "systems". - /** - * If the zone is not already loaded, updates the loading status and emits {@link ZoneLoaded} if - * it becomes loaded. + * If the zone is not already loaded, updates the {@link #loadingProgress} and emits {@link + * ZoneLoaded} if it becomes loaded. */ private void updateIsLoading() { if (loadingProgress == null) { @@ -324,6 +330,7 @@ private void updateIsLoading() { } } + /** Updates {@link #zoneScale} and {@link #viewport}. */ private void updateViewport() { var renderer = MapTool.getFrame().getZoneRenderer(this.zone); if (renderer == null) { @@ -338,21 +345,12 @@ private void updateViewport() { viewport.setFrame(zoneScale.toWorldSpace(screenBounds)); } + /** Updates {@link #visibleArea} based on {@link #playerView}. */ private void updateVisibleArea() { visibleArea = zoneView.getVisibleArea(playerView); } - private void updateSelectedTokensList() { - selectedTokenList.clear(); - - for (GUID g : selectionModel.getSelectedTokenIds()) { - final var token = zone.getToken(g); - if (token != null) { - selectedTokenList.add(token); - } - } - } - + /** Updates {@link #playerView}. */ private void updatePlayerView() { playerView = makePlayerView(MapTool.getPlayer().getEffectiveRole(), true); } @@ -384,7 +382,10 @@ private void updateTokenPositions() { } } + /** Updates {@link #markerList} based on {@link #tokenPositionsByLayer}. */ private void updateMarkerPositions() { + markerList.clear(); + for (var list : tokenPositionsByLayer.values()) { for (var tokenPosition : list) { var token = tokenPosition.token(); @@ -397,6 +398,7 @@ private void updateMarkerPositions() { } } + /** Updates {@link #tokenStackMap} based on {@link #tokenPositionsByLayer}. */ private void updateTokenStacks() { tokenStackMap.clear(); var tokenPositions = tokenPositionsByLayer.get(Zone.Layer.TOKEN); @@ -432,6 +434,10 @@ private void updateTokenStacks() { } } + /** + * Updates {@link #onScreenTokens} and {@link #visibleTokensByLayer} based on {@link + * #tokenPositionsByLayer}, {@link #viewport}, {@link #playerView}, and {@link #visibleArea}. + */ private void updateVisibleTokens() { double scale = 1; var renderer = MapTool.getFrame().getZoneRenderer(this.zone); @@ -472,6 +478,7 @@ private void updateVisibleTokens() { } } + /** Updates {@link #movingTokens}. */ private void updateMovingTokens() { movingTokens.clear(); @@ -485,6 +492,10 @@ private void updateMovingTokens() { } } + /** + * Updates {@link #lightPositions} based on {@link #playerView}, {@link #tokenPositions}, and + * {@link #onScreenTokens}. + */ private void updateLightPosition() { lightPositions.clear(); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/renderer/FogRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/renderer/FogRenderer.java index 154200c656..10f4e17e7e 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/renderer/FogRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/renderer/FogRenderer.java @@ -95,7 +95,7 @@ private void renderWorld(Graphics2D worldG, PlayerView view) { worldG.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC, view.isGMView() ? .6f : 1f)); var bounds = originalClip.getBounds(); worldG.fillRect(bounds.x, bounds.y, bounds.width, bounds.height); - timer.start("renderFog-hardFow"); + timer.stop("renderFog-hardFow"); timer.start("renderFog-softFow"); if (!softFogArea.isEmpty()) { diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/renderer/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/renderer/ZoneRenderer.java index e54a3095b1..cf9508a8f7 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/renderer/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/renderer/ZoneRenderer.java @@ -714,7 +714,7 @@ public void paintComponent(Graphics g) { timer -> { timer.setThreshold(10); - if (!MapTool.getFrame().getGdxPanel().isVisible()) { + if (!viewModel.isUsingGdxRenderer()) { timer.start("paintComponent"); Graphics2D g2d = (Graphics2D) g; @@ -1782,10 +1782,12 @@ protected void renderTokens( if (isTokenInNeedOfClipping(token, position.transformedBounds(), isGMView)) { tokenG = (Graphics2D) clippedG.create(); if (token.getShape() == Token.TokenShape.FIGURE || token.isAlwaysVisible()) { + Area cellVisibleArea = new Area(visibleScreenArea); Area cb = zone.getGrid() .getTokenCellArea(zoneScale.toScreenSpace(position.transformedBounds())); - tokenG.clip(cb); + cellVisibleArea.intersect(cb); + tokenG.clip(cellVisibleArea); } } else { tokenG = (Graphics2D) g.create(); @@ -1815,11 +1817,9 @@ protected void renderTokens( // Render Halo haloRenderer.renderHalo(tokenG, token, position); - // Calculate alpha Transparency from token and use opacity to indicate that token is moving - float opacity = token.getTokenOpacity(); - if (viewModel.isTokenMoving(token.getId())) { - opacity = opacity / 2.0f; - } + // Use opacity to indicate that token is moving + float opacity = viewModel.isTokenMoving(token.getId()) ? 0.5f : 1f; + // Finally render the token image timer.start("token-list-7"); // Clipping is handled in the isTokenInNeedOfClipping() call far above. diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/renderer/tokenRender/FacingArrowRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/renderer/tokenRender/FacingArrowRenderer.java index 5b0aeef38f..fb28e0e6b3 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/renderer/tokenRender/FacingArrowRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/renderer/tokenRender/FacingArrowRenderer.java @@ -68,19 +68,22 @@ public void paintArrow(Graphics2D tokenG, TokenPosition position) { var tokenShape = token.getShape(); timer.start("FacingArrowRenderer-preCheck"); - if (!token.hasFacing()) { - return; - } - final var forceFacing = AppPreferences.forceFacingArrow.get(); - if (!forceFacing) { - if (TokenShape.TOP_DOWN.equals(tokenShape)) { + try { + if (!token.hasFacing()) { return; } - if (TokenShape.FIGURE.equals(tokenShape) && token.getHasImageTable()) { - return; + final var forceFacing = AppPreferences.forceFacingArrow.get(); + if (!forceFacing) { + if (TokenShape.TOP_DOWN.equals(tokenShape)) { + return; + } + if (TokenShape.FIGURE.equals(tokenShape) && token.getHasImageTable()) { + return; + } } + } finally { + timer.stop("FacingArrowRenderer-preCheck"); } - timer.stop("FacingArrowRenderer-preCheck"); timer.start("FacingArrowRenderer-render"); renderHelper.render( diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/renderer/tokenRender/TokenRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/renderer/tokenRender/TokenRenderer.java index 1558e6996f..f1497a8a98 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/renderer/tokenRender/TokenRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/renderer/tokenRender/TokenRenderer.java @@ -47,7 +47,7 @@ public TokenRenderer(RenderHelper renderHelper, Zone zone) { this.zone = zone; } - public void renderToken(Token token, TokenPosition position, Graphics2D g2d, float opacity) { + public void renderToken(Token token, TokenPosition position, Graphics2D g2d, float extraOpacity) { var timer = CodeTimer.get(); timer.increment("TokenRenderer-renderToken"); timer.start("TokenRenderer-renderToken"); @@ -60,7 +60,7 @@ public void renderToken(Token token, TokenPosition position, Graphics2D g2d, flo timer.start("TokenRenderer-paintTokenImage"); renderHelper.render( - g2d, worldG -> paintTokenImage(worldG, position, opacity * token.getTokenOpacity())); + g2d, worldG -> paintTokenImage(worldG, position, extraOpacity * token.getTokenOpacity())); timer.stop("TokenRenderer-paintTokenImage"); timer.stop("TokenRenderer-renderToken"); }