[bug#39745,4/7] gnu: java-openjfx-swing: Add new variable.
diff mbox series

Message ID 20200222201755.50425-4-levenson@mmer.org
State Accepted
Headers show
Series
  • [bug#39742,1/7] gnu: java-openjfx-build: Add helpful patch.
Related show

Checks

Context Check Description
cbaines/comparison success View comparision
cbaines/git branch success View Git branch
cbaines/applying patch success View Laminar job

Commit Message

Alexey Abramov Feb. 22, 2020, 8:17 p.m. UTC
* gnu/packages/java.scm (java-openjfx-build): Add patch to the base package.
* gnu/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch: Fix swing compilation for jdk8.
---
 gnu/packages/java.scm                         | 16 ++++-
 ...ld-swing-compile-JFXPanel-with-JDK-8.patch | 58 +++++++++++++++++++
 2 files changed, 73 insertions(+), 1 deletion(-)
 create mode 100644 gnu/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch

Comments

Leo Famulari March 4, 2020, 3:04 a.m. UTC | #1
On Sat, Feb 22, 2020 at 09:17:52PM +0100, Alexey Abramov wrote:
> * gnu/packages/java.scm (java-openjfx-build): Add patch to the base package.
> * gnu/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch: Fix swing compilation for jdk8.

This commit adds the patch file but also makes a new package
java-openjfx-swing. Adding the patch to java-openjfx-build and adding
the new package should be done in separate commits.

Also remember to add the patch to 'gnu/local.mk'.

> +From 173e65937d9e76872df51f7ba39c9d58986dc38f Mon Sep 17 00:00:00 2001
> +From: Alexey Abramov <levenson@mmer.org>
> +Date: Fri, 3 Jan 2020 01:17:45 +0100
> +Subject: [PATCH] java-openjfx-build: Cannot compile JFXPanel with JDK 8
> +
> +For more info please see https://bugs.openjdk.java.net/browse/JDK-8149967

This link is great but please add a brief summary of why we need the
patch and what it does (one or two sentences is enough).
Alexey Abramov March 9, 2020, 10:08 p.m. UTC | #2
Thank you!

Leo Famulari <leo@famulari.name> writes:

> On Sat, Feb 22, 2020 at 09:17:52PM +0100, Alexey Abramov wrote:
>> * gnu/packages/java.scm (java-openjfx-build): Add patch to the base package.
>> * gnu/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch: Fix swing compilation for jdk8.
>
> This commit adds the patch file but also makes a new package
> java-openjfx-swing. Adding the patch to java-openjfx-build and adding
> the new package should be done in separate commits.

I split the change into two separated commits. v3

> Also remember to add the patch to 'gnu/local.mk'.
>
>> +From 173e65937d9e76872df51f7ba39c9d58986dc38f Mon Sep 17 00:00:00 2001
>> +From: Alexey Abramov <levenson@mmer.org>
>> +Date: Fri, 3 Jan 2020 01:17:45 +0100
>> +Subject: [PATCH] java-openjfx-build: Cannot compile JFXPanel with JDK 8
>> +
>> +For more info please see https://bugs.openjdk.java.net/browse/JDK-8149967
>
> This link is great but please add a brief summary of why we need the
> patch and what it does (one or two sentences is enough).

--
Alexey

Patch
diff mbox series

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 4e975a0490..f2a3861501 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2357,7 +2357,8 @@  new Date();"))
               (sha256
                (base32
                 "0yg38mwpivswccv9n96k06x3iv82i4px1a9xg9l8dswzwmfj259f"))
-              (patches (search-patches "java-openjfx-build-get_guix_jdk_version.patch"))))
+              (patches (search-patches "java-openjfx-build-get_guix_jdk_version.patch"
+                                       "java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch"))))
     (build-system ant-build-system)
     (arguments
      `(#:jar-name "java-openjfx.jar"
@@ -3045,6 +3046,19 @@  distribution.")))
             `(("java-openjfx-base" ,java-openjfx-base)
               ("java-swt" ,java-swt)))))
 
+(define-public java-openjfx-swing
+  (package (inherit java-openjfx-build)
+           (name "java-openjfx-swing")
+           (arguments
+            `(#:jar-name "java-openjfx-swing.jar"
+              #:source-dir "modules/swing/src/main/java"
+              #:tests? #f))
+           (inputs
+            `(("antlr3" ,antlr3)
+              ("java-stringtemplate" ,java-stringtemplate)))
+           (propagated-inputs
+            `(("java-openjfx-graphics" ,java-openjfx-graphics)))))
+
 (define-public java-openjfx-media
   (package (inherit java-openjfx-build)
     (name "java-openjfx-media")
diff --git a/gnu/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch b/gnu/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch
new file mode 100644
index 0000000000..948c0355e9
--- /dev/null
+++ b/gnu/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch
@@ -0,0 +1,58 @@ 
+From 173e65937d9e76872df51f7ba39c9d58986dc38f Mon Sep 17 00:00:00 2001
+From: Alexey Abramov <levenson@mmer.org>
+Date: Fri, 3 Jan 2020 01:17:45 +0100
+Subject: [PATCH] java-openjfx-build: Cannot compile JFXPanel with JDK 8
+
+For more info please see https://bugs.openjdk.java.net/browse/JDK-8149967
+---
+ .../java/javafx/embed/swing/JFXPanel.java     | 20 ++++++++++++++++++-
+ 1 file changed, 19 insertions(+), 1 deletion(-)
+
+diff --git a/modules/swing/src/main/java/javafx/embed/swing/JFXPanel.java b/modules/swing/src/main/java/javafx/embed/swing/JFXPanel.java
+index 97515e2290..614ed656b9 100644
+--- a/modules/swing/src/main/java/javafx/embed/swing/JFXPanel.java
++++ b/modules/swing/src/main/java/javafx/embed/swing/JFXPanel.java
+@@ -81,6 +81,7 @@ import sun.awt.AppContext;
+ import sun.awt.CausedFocusEvent;
+ import sun.awt.SunToolkit;
+ import sun.java2d.SunGraphics2D;
++import sun.java2d.SurfaceData;
+ import sun.util.logging.PlatformLogger;
+ import sun.util.logging.PlatformLogger.Level;
+ 
+@@ -681,6 +682,23 @@ 
+                 e.getCaret().getInsertionIndex());
+     }
+
++    // FIXME: once we move to JDK 9 as the boot JDK we should remove the
++    // reflection code from this method, consider changing it to
++    // use double rather than int, and account for the possibility of
++    // a different scale factor in X and Y.
++    private int getDefaultScale(SurfaceData surfaceData) {
++        /*
++          double scale = surfaceData.getDefaultScaleX();
++        */
++        double scale = 1;
++        try {
++            Method meth = SurfaceData.class.getMethod("getDefaultScaleX");
++            scale = (Double)meth.invoke(surfaceData);
++        } catch (Exception ex) {
++        }
++
++        return (int)Math.round(scale);
++    }
+ 
+     /**
+      * Overrides the {@link javax.swing.JComponent#paintComponent(Graphics)}
+@@ -720,7 +738,7 @@ public class JFXPanel extends JComponent {
+ 
+             int newScaleFactor = scaleFactor;
+             if (g instanceof SunGraphics2D) {
+-                newScaleFactor = ((SunGraphics2D)g).surfaceData.getDefaultScale();
++                newScaleFactor = getDefaultScale(((SunGraphics2D)g).surfaceData);
+             }
+             if (scaleFactor != newScaleFactor) {
+                 resizePixelBuffer(newScaleFactor);
+--
+2.24.1
+