[PATCH 4/7] gnu: java-openjfx-swing: Add new variable.

  • Done
  • quality assurance status badge
Details
2 participants
  • Leo Famulari
  • Alexey Abramov
Owner
unassigned
Submitted by
Alexey Abramov
Severity
normal
Merged with

Debbugs page

Alexey Abramov wrote 5 years ago
(address . guix-patches@gnu.org)
20200222201755.50425-4-levenson@mmer.org
* 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

Toggle diff (100 lines)
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
+
--
2.24.1
Leo Famulari wrote 5 years ago
(name . Alexey Abramov)(address . levenson@mmer.org)(address . 39745@debbugs.gnu.org)
20200304030417.GC1199@jasmine.lan
On Sat, Feb 22, 2020 at 09:17:52PM +0100, Alexey Abramov wrote:
Toggle quote (3 lines)
> * 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'.

Toggle quote (7 lines)
> +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).
Leo Famulari wrote 5 years ago
(no subject)
(address . control@debbugs.gnu.org)
20200304031442.GA2347@jasmine.lan
merge 39741 39742 39743 39744 39745 39746 39747
Alexey Abramov wrote 5 years ago
[v2] gnu: java-openjfx-build: Fix openjfx-swing component build for JDKu8
(address . 39745@debbugs.gnu.org)(name . Alexey Abramov)(address . levenson@mmer.org)
20200309161527.153488-1-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-build)[source]: Use it.
* gnu/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch:
New file.
* gnu/local.mk (dist_patch_DATA): Add it.
---
gnu/local.mk | 1 +
gnu/packages/java.scm | 3 +-
...ld-swing-compile-JFXPanel-with-JDK-8.patch | 64 +++++++++++++++++++
3 files changed, 67 insertions(+), 1 deletion(-)
create mode 100644 gnu/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch

Toggle diff (98 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 0bcbde7301..7e4554198c 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1034,6 +1034,7 @@ dist_patch_DATA = \
%D%/packages/patches/java-commons-collections-fix-java8.patch \
%D%/packages/patches/java-jeromq-fix-tests.patch \
%D%/packages/patches/java-openjfx-build-get_guix_jdk_version.patch \
+ %D%/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch \
%D%/packages/patches/java-powermock-fix-java-files.patch \
%D%/packages/patches/java-simple-xml-fix-tests.patch \
%D%/packages/patches/java-svg-salamander-Fix-non-det.patch \
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 349b22419a..21217b0211 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2363,7 +2363,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"
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..8f222e1780
--- /dev/null
+++ b/gnu/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch
@@ -0,0 +1,64 @@
+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
+
+In JDKu9 getDefaultScale method was removed and sun.java2d.SurfaceData class now
+has separate getDefaultScaleX() and getDefaultScaleY() methods. See
+https://bugs.openjdk.java.net/browse/JDK-8073320 for more info.
+
+Backport the missing port to build openjfx-swing package using JDKu8. 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
+
--
2.24.1
Alexey Abramov wrote 5 years ago
[v3 2/2] gnu: java-openjfx-swing: Add new variable.
(address . 39745@debbugs.gnu.org)(name . Alexey Abramov)(address . levenson@mmer.org)
20200309163612.167894-2-levenson@mmer.org
---
gnu/packages/java.scm | 13 +++++++++++++
1 file changed, 13 insertions(+)

Toggle diff (26 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 21217b0211..6d3f0f6771 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -3084,6 +3084,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")
--
2.24.1
Alexey Abramov wrote 5 years ago
[v3 1/2] gnu: java-openjfx-build: Fix openjfx-swing component build for JDKu8
(address . 39745@debbugs.gnu.org)(name . Alexey Abramov)(address . levenson@mmer.org)
20200309163612.167894-1-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-build)[source]: Use it.
* gnu/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch:
New file.
* gnu/local.mk (dist_patch_DATA): Add it.
---
gnu/local.mk | 1 +
gnu/packages/java.scm | 3 +-
...ld-swing-compile-JFXPanel-with-JDK-8.patch | 64 +++++++++++++++++++
3 files changed, 67 insertions(+), 1 deletion(-)
create mode 100644 gnu/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch

Toggle diff (98 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 0bcbde7301..7e4554198c 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1034,6 +1034,7 @@ dist_patch_DATA = \
%D%/packages/patches/java-commons-collections-fix-java8.patch \
%D%/packages/patches/java-jeromq-fix-tests.patch \
%D%/packages/patches/java-openjfx-build-get_guix_jdk_version.patch \
+ %D%/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch \
%D%/packages/patches/java-powermock-fix-java-files.patch \
%D%/packages/patches/java-simple-xml-fix-tests.patch \
%D%/packages/patches/java-svg-salamander-Fix-non-det.patch \
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 349b22419a..21217b0211 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2363,7 +2363,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"
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..8f222e1780
--- /dev/null
+++ b/gnu/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch
@@ -0,0 +1,64 @@
+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
+
+In JDKu9 getDefaultScale method was removed and sun.java2d.SurfaceData class now
+has separate getDefaultScaleX() and getDefaultScaleY() methods. See
+https://bugs.openjdk.java.net/browse/JDK-8073320 for more info.
+
+Backport the missing port to build openjfx-swing package using JDKu8. 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
+
--
2.24.1
levenson wrote 5 years ago
Re: [bug#39745] [PATCH 4/7] gnu: java-openjfx-swing: Add new variable.
(name . Leo Famulari)(address . leo@famulari.name)(address . 39745@debbugs.gnu.org)(address . 39741@debbugs.gnu.org)(name . Alexey Abramov)(address . levenson@mmer.org)
84v9ndp4fl.fsf@delta.i-did-not-set--mail-host-address--so-tickle-me
Thank you!

Leo Famulari <leo@famulari.name> writes:

Toggle quote (8 lines)
> 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

Toggle quote (12 lines)
> 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
Alexey Abramov wrote 5 years ago
[v4 2/2] gnu: java-openjfx-swing: Add new variable.
(address . 39745@debbugs.gnu.org)(name . Alexey Abramov)(address . levenson@mmer.org)
20200311103617.185173-2-levenson@mmer.org
---
gnu/packages/java.scm | 13 +++++++++++++
1 file changed, 13 insertions(+)

Toggle diff (24 lines)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 768fbf09a1..494f5e360d 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -3084,6 +3084,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")
--
2.24.1
Alexey Abramov wrote 5 years ago
[v4 1/2] gnu: java-openjfx-build: Fix openjfx-swing component build for JDKu8
(address . 39745@debbugs.gnu.org)(name . Alexey Abramov)(address . levenson@mmer.org)
20200311103617.185173-1-levenson@mmer.org
* gnu/packages/java.scm (java-openjfx-build)[source]: Use it.
* gnu/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch:
New file.
* gnu/local.mk (dist_patch_DATA): Add it.
---
gnu/local.mk | 1 +
gnu/packages/java.scm | 3 +-
...ld-swing-compile-JFXPanel-with-JDK-8.patch | 63 +++++++++++++++++++
3 files changed, 66 insertions(+), 1 deletion(-)
create mode 100644 gnu/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch

Toggle diff (95 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 476aa00511..010247be3b 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1033,6 +1033,7 @@ dist_patch_DATA = \
%D%/packages/patches/java-commons-collections-fix-java8.patch \
%D%/packages/patches/java-jeromq-fix-tests.patch \
%D%/packages/patches/java-openjfx-build-get_guix_jdk_version.patch \
+ %D%/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch \
%D%/packages/patches/java-powermock-fix-java-files.patch \
%D%/packages/patches/java-simple-xml-fix-tests.patch \
%D%/packages/patches/java-svg-salamander-Fix-non-det.patch \
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 6c1c2dba6c..768fbf09a1 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2363,7 +2363,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"
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..363ce9509b
--- /dev/null
+++ b/gnu/packages/patches/java-openjfx-build-swing-compile-JFXPanel-with-JDK-8.patch
@@ -0,0 +1,63 @@
+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
+
+In JDKu9 getDefaultScale method was removed and sun.java2d.SurfaceData class now
+has separate getDefaultScaleX() and getDefaultScaleY() methods. See
+https://bugs.openjdk.java.net/browse/JDK-8073320 for more info.
+
+Backport the missing port to build openjfx-swing package using JDKu8. 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
--
2.24.1
?
Your comment

This issue is archived.

To comment on this conversation send an email to 39745@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 39745
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch
You may also tag this issue. See list of standard tags. For example, to set the confirmed and easy tags
mumi command -t +confirmed -t +easy
Or, remove the moreinfo tag and set the help tag
mumi command -t -moreinfo -t +help