diff --git a/pom.xml b/pom.xml index 768a7e582d..c3118cd0c2 100644 --- a/pom.xml +++ b/pom.xml @@ -273,8 +273,10 @@ checkstyle.xml - - ${project.build.sourceDirectory} + + + ${project.build.sourceDirectory} + true diff --git a/runelite-client/pom.xml b/runelite-client/pom.xml index debecf5638..95aaedc980 100644 --- a/runelite-client/pom.xml +++ b/runelite-client/pom.xml @@ -302,6 +302,36 @@ + + org.apache.maven.plugins + maven-compiler-plugin + + + compile-java11 + + compile + + + 11 + + ${project.basedir}/src/main/java11 + + ${project.build.outputDirectory}/META-INF/versions/11 + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + true + + + + org.apache.maven.plugins maven-resources-plugin @@ -385,6 +415,17 @@ + + org.apache.maven.plugins + maven-checkstyle-plugin + + + + ${project.build.sourceDirectory} + ${project.basedir}/src/main/java11 + + + org.apache.maven.plugins maven-pmd-plugin diff --git a/runelite-client/src/main/java/net/runelite/client/util/MacOSPopupFactory.java b/runelite-client/src/main/java/net/runelite/client/util/MacOSPopupFactory.java new file mode 100644 index 0000000000..8e9f14551a --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/util/MacOSPopupFactory.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.util; + +import javax.swing.PopupFactory; + +/** + * Dummy popup factory for Java 8 + */ +class MacOSPopupFactory extends PopupFactory +{ +} diff --git a/runelite-client/src/main/java/net/runelite/client/util/SwingUtil.java b/runelite-client/src/main/java/net/runelite/client/util/SwingUtil.java index 90723d9ade..828adfdadf 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/SwingUtil.java +++ b/runelite-client/src/main/java/net/runelite/client/util/SwingUtil.java @@ -50,6 +50,7 @@ import javax.swing.JButton; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.LookAndFeel; +import javax.swing.PopupFactory; import javax.swing.SwingUtilities; import javax.swing.ToolTipManager; import javax.swing.UIManager; @@ -109,6 +110,14 @@ public class SwingUtil try { UIManager.setLookAndFeel(laf); + + if (OSType.getOSType() == OSType.MacOS) + { + // On MacOS Substance doesn't install its own popup factory, and the default one uses lightweight + // components unless the Aqua LAF is used. Lightweight components do not render correctly over AWT + // canvases on MacOS - so replace the popup factory one with that forces heavy components. + PopupFactory.setSharedInstance(new MacOSPopupFactory()); + } } catch (UnsupportedLookAndFeelException ex) { diff --git a/runelite-client/src/main/java11/net/runelite/client/util/MacOSPopupFactory.java b/runelite-client/src/main/java11/net/runelite/client/util/MacOSPopupFactory.java new file mode 100644 index 0000000000..62a91abed8 --- /dev/null +++ b/runelite-client/src/main/java11/net/runelite/client/util/MacOSPopupFactory.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2021, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.util; + +import java.awt.Component; +import javax.swing.Popup; +import javax.swing.PopupFactory; + +/** + * Popup factory for Java 11 which forces heavyweight popups. Lightweight popups do not render correctly + * over AWT canvases on OSX. + */ +class MacOSPopupFactory extends PopupFactory +{ + @Override + protected Popup getPopup(Component owner, Component contents, int x, int y, boolean isHeavyWeightPopup) throws IllegalArgumentException + { + return super.getPopup(owner, contents, x, y, true); + } +} \ No newline at end of file