From f7d1b73a6c27c682aa80b2e7ff6bcd864d13dae6 Mon Sep 17 00:00:00 2001 From: drdev Date: Tue, 24 Dec 2013 18:11:09 +0000 Subject: [PATCH] Move setShape call from paint to resize listener rather to hopefully fix Linux issue Make FDialog border non-rounded if setShape isn't supported (Mac) --- .../main/java/forge/gui/menus/LayoutMenu.java | 3 +- .../src/main/java/forge/view/FDialog.java | 28 ++++++++++++------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/forge-gui/src/main/java/forge/gui/menus/LayoutMenu.java b/forge-gui/src/main/java/forge/gui/menus/LayoutMenu.java index 7622f263256..16ad3c29382 100644 --- a/forge-gui/src/main/java/forge/gui/menus/LayoutMenu.java +++ b/forge-gui/src/main/java/forge/gui/menus/LayoutMenu.java @@ -202,8 +202,7 @@ public final class LayoutMenu { public void actionPerformed(ActionEvent e) { String[] options = {"800x600", "1024x768", "1280x720"}; final String choice = GuiChoose.oneOrNone("Choose new window size", options); - if (choice != null) - { + if (choice != null) { String[] dims = choice.split("x"); Singletons.getView().getFrame().setSize(Integer.parseInt(dims[0]), Integer.parseInt(dims[1])); } diff --git a/forge-gui/src/main/java/forge/view/FDialog.java b/forge-gui/src/main/java/forge/view/FDialog.java index e0024ef7de5..4aedb49b1fa 100644 --- a/forge-gui/src/main/java/forge/view/FDialog.java +++ b/forge-gui/src/main/java/forge/view/FDialog.java @@ -11,6 +11,8 @@ import java.awt.Point; import java.awt.PopupMenu; import java.awt.RenderingHints; import java.awt.GraphicsDevice.WindowTranslucency; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; @@ -62,26 +64,32 @@ public class FDialog extends JDialog implements ITitleBarOwner { this.titleBar = new FTitleBar(this); this.titleBar.setVisible(true); addMoveSupport(); + + if (isSetShapeSupported) { //if possible, set rounded rectangle shape for dialog + this.addComponentListener(new ComponentAdapter() { + @Override + public void componentResized(final ComponentEvent e) { //must update shape whenever dialog is resized + int arc = cornerDiameter - 4; //leave room for border aliasing + FDialog.this.setShape(new RoundRectangle2D.Float(0, 0, FDialog.this.getWidth(), FDialog.this.getHeight(), arc, arc)); + } + }); + } } @Override public void paint(Graphics g) { - int width = this.getWidth(); - int height = this.getHeight(); - - //set rounded rectangle shape for dialog if possible - if (isSetShapeSupported) { - int arc = cornerDiameter - 4; //leave room for border aliasing - this.setShape(new RoundRectangle2D.Float(0, 0, width, height, arc, arc)); - } - super.paint(g); //draw rounded border final Graphics2D g2d = (Graphics2D) g.create(); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); skin.setGraphicsColor(g2d, borderColor); - g2d.drawRoundRect(0, 0, width - 1, height - 1, cornerDiameter, cornerDiameter); + if (isSetShapeSupported) { + g2d.drawRoundRect(0, 0, this.getWidth() - 1, this.getHeight() - 1, cornerDiameter, cornerDiameter); + } + else { //draw non-rounded border instead if setShape isn't supported + g2d.drawRect(0, 0, this.getWidth() - 1, this.getHeight() - 1); + } g2d.dispose(); }