From 5403ab5493bf1bb6e8ba200a8e5c318179577045 Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Wed, 5 Jun 2024 10:59:33 +0200 Subject: [PATCH 1/3] Introduces support for AWT's component Fixes #76 --- .../com/github/weisj/jsvg/SVGDocument.java | 21 +++++--- .../awt/AwtComponentPlatformSupport.java | 49 +++++++++++++++++++ .../awt/JComponentPlatformSupport.java | 37 +------------- 3 files changed, 66 insertions(+), 41 deletions(-) create mode 100644 jsvg/src/main/java/com/github/weisj/jsvg/renderer/awt/AwtComponentPlatformSupport.java diff --git a/jsvg/src/main/java/com/github/weisj/jsvg/SVGDocument.java b/jsvg/src/main/java/com/github/weisj/jsvg/SVGDocument.java index 36df09b5..efc8b36c 100644 --- a/jsvg/src/main/java/com/github/weisj/jsvg/SVGDocument.java +++ b/jsvg/src/main/java/com/github/weisj/jsvg/SVGDocument.java @@ -27,6 +27,7 @@ import javax.swing.*; +import com.github.weisj.jsvg.renderer.awt.AwtComponentPlatformSupport; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -36,7 +37,6 @@ import com.github.weisj.jsvg.geometry.size.MeasureContext; import com.github.weisj.jsvg.nodes.SVG; import com.github.weisj.jsvg.renderer.*; -import com.github.weisj.jsvg.renderer.awt.JComponentPlatformSupport; import com.github.weisj.jsvg.renderer.awt.NullPlatformSupport; import com.github.weisj.jsvg.renderer.awt.PlatformSupport; @@ -74,9 +74,22 @@ public void render(@Nullable JComponent component, @NotNull Graphics2D g) { } public void render(@Nullable JComponent component, @NotNull Graphics2D graphics2D, @Nullable ViewBox bounds) { + render(component, graphics2D, bounds); + } + + public void render(@Nullable Component component, @NotNull Graphics2D graphics2D, @Nullable ViewBox bounds) { PlatformSupport platformSupport = component != null - ? new JComponentPlatformSupport(component) + ? new AwtComponentPlatformSupport(component) : new NullPlatformSupport(); + renderWithPlatform(platformSupport, graphics2D, bounds); + } + + private float computePlatformFontSize(@NotNull PlatformSupport platformSupport, @NotNull Output output) { + return output.contextFontSize().orElseGet(platformSupport::fontSize); + } + + public void renderWithPlatform(@NotNull PlatformSupport platformSupport, @NotNull Graphics2D graphics2D, + @Nullable ViewBox bounds) { Graphics2D g = (Graphics2D) graphics2D.create(); setupSVGRenderingHints(g); Output output = new Graphics2DOutput(g); @@ -84,10 +97,6 @@ public void render(@Nullable JComponent component, @NotNull Graphics2D graphics2 output.dispose(); } - private float computePlatformFontSize(@NotNull PlatformSupport platformSupport, @NotNull Output output) { - return output.contextFontSize().orElseGet(platformSupport::fontSize); - } - public void renderWithPlatform(@NotNull PlatformSupport platformSupport, @NotNull Output output, @Nullable ViewBox bounds) { RenderContext context = prepareRenderContext(platformSupport, output, bounds); diff --git a/jsvg/src/main/java/com/github/weisj/jsvg/renderer/awt/AwtComponentPlatformSupport.java b/jsvg/src/main/java/com/github/weisj/jsvg/renderer/awt/AwtComponentPlatformSupport.java new file mode 100644 index 00000000..09d39462 --- /dev/null +++ b/jsvg/src/main/java/com/github/weisj/jsvg/renderer/awt/AwtComponentPlatformSupport.java @@ -0,0 +1,49 @@ +package com.github.weisj.jsvg.renderer.awt; + +import org.jetbrains.annotations.NotNull; + +import java.awt.*; +import java.awt.image.ImageObserver; +import java.awt.image.ImageProducer; + +public class AwtComponentPlatformSupport implements PlatformSupport { + protected final @NotNull Component component; + + public AwtComponentPlatformSupport(@NotNull Component component) { + this.component = component; + } + + @Override + public float fontSize() { + Font font = component.getFont(); + if (font != null) return font.getSize2D(); + return PlatformSupport.super.fontSize(); + } + + @Override + public @NotNull TargetSurface targetSurface() { + return component::repaint; + } + + @Override + public boolean isLongLived() { + return true; + } + + @Override + public @NotNull ImageObserver imageObserver() { + return component; + } + + @Override + public @NotNull Image createImage(@NotNull ImageProducer imageProducer) { + return component.createImage(imageProducer); + } + + @Override + public String toString() { + return "AwtComponentSupport{" + + "component=" + component + + '}'; + } +} diff --git a/jsvg/src/main/java/com/github/weisj/jsvg/renderer/awt/JComponentPlatformSupport.java b/jsvg/src/main/java/com/github/weisj/jsvg/renderer/awt/JComponentPlatformSupport.java index 1956d7e9..5a8723bf 100644 --- a/jsvg/src/main/java/com/github/weisj/jsvg/renderer/awt/JComponentPlatformSupport.java +++ b/jsvg/src/main/java/com/github/weisj/jsvg/renderer/awt/JComponentPlatformSupport.java @@ -21,47 +21,14 @@ */ package com.github.weisj.jsvg.renderer.awt; -import java.awt.*; -import java.awt.image.ImageObserver; -import java.awt.image.ImageProducer; - import javax.swing.*; import org.jetbrains.annotations.NotNull; -public final class JComponentPlatformSupport implements PlatformSupport { - - private final @NotNull JComponent component; +public final class JComponentPlatformSupport extends AwtComponentPlatformSupport { public JComponentPlatformSupport(@NotNull JComponent component) { - this.component = component; - } - - @Override - public float fontSize() { - Font font = component.getFont(); - if (font != null) return font.getSize2D(); - return PlatformSupport.super.fontSize(); - } - - @Override - public @NotNull TargetSurface targetSurface() { - return component::repaint; - } - - @Override - public boolean isLongLived() { - return true; - } - - @Override - public @NotNull ImageObserver imageObserver() { - return component; - } - - @Override - public @NotNull Image createImage(@NotNull ImageProducer imageProducer) { - return component.createImage(imageProducer); + super(component); } @Override From f451ac9c70ff3eeae1f72af87647af72a2fb2dc9 Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Wed, 5 Jun 2024 15:06:48 +0200 Subject: [PATCH 2/3] Fixes stupid recursion Fixes #76 --- jsvg/src/main/java/com/github/weisj/jsvg/SVGDocument.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/jsvg/src/main/java/com/github/weisj/jsvg/SVGDocument.java b/jsvg/src/main/java/com/github/weisj/jsvg/SVGDocument.java index efc8b36c..b4da0305 100644 --- a/jsvg/src/main/java/com/github/weisj/jsvg/SVGDocument.java +++ b/jsvg/src/main/java/com/github/weisj/jsvg/SVGDocument.java @@ -73,8 +73,9 @@ public void render(@Nullable JComponent component, @NotNull Graphics2D g) { render(component, g, null); } + @Deprecated public void render(@Nullable JComponent component, @NotNull Graphics2D graphics2D, @Nullable ViewBox bounds) { - render(component, graphics2D, bounds); + render((Component) component, graphics2D, bounds); } public void render(@Nullable Component component, @NotNull Graphics2D graphics2D, @Nullable ViewBox bounds) { From 59cfc1d7b2a5306b0f4723758707114c79b39ed3 Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Wed, 5 Jun 2024 15:10:47 +0200 Subject: [PATCH 3/3] Deprecate JComponentPlatformSupport Fixes #76 --- .../com/github/weisj/jsvg/SVGDocument.java | 4 +-- .../awt/AwtComponentPlatformSupport.java | 29 ++++++++++++++++--- .../awt/JComponentPlatformSupport.java | 4 +++ 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/jsvg/src/main/java/com/github/weisj/jsvg/SVGDocument.java b/jsvg/src/main/java/com/github/weisj/jsvg/SVGDocument.java index b4da0305..bb980b06 100644 --- a/jsvg/src/main/java/com/github/weisj/jsvg/SVGDocument.java +++ b/jsvg/src/main/java/com/github/weisj/jsvg/SVGDocument.java @@ -27,7 +27,6 @@ import javax.swing.*; -import com.github.weisj.jsvg.renderer.awt.AwtComponentPlatformSupport; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -37,6 +36,7 @@ import com.github.weisj.jsvg.geometry.size.MeasureContext; import com.github.weisj.jsvg.nodes.SVG; import com.github.weisj.jsvg.renderer.*; +import com.github.weisj.jsvg.renderer.awt.AwtComponentPlatformSupport; import com.github.weisj.jsvg.renderer.awt.NullPlatformSupport; import com.github.weisj.jsvg.renderer.awt.PlatformSupport; @@ -90,7 +90,7 @@ private float computePlatformFontSize(@NotNull PlatformSupport platformSupport, } public void renderWithPlatform(@NotNull PlatformSupport platformSupport, @NotNull Graphics2D graphics2D, - @Nullable ViewBox bounds) { + @Nullable ViewBox bounds) { Graphics2D g = (Graphics2D) graphics2D.create(); setupSVGRenderingHints(g); Output output = new Graphics2DOutput(g); diff --git a/jsvg/src/main/java/com/github/weisj/jsvg/renderer/awt/AwtComponentPlatformSupport.java b/jsvg/src/main/java/com/github/weisj/jsvg/renderer/awt/AwtComponentPlatformSupport.java index 09d39462..b5b6a2d3 100644 --- a/jsvg/src/main/java/com/github/weisj/jsvg/renderer/awt/AwtComponentPlatformSupport.java +++ b/jsvg/src/main/java/com/github/weisj/jsvg/renderer/awt/AwtComponentPlatformSupport.java @@ -1,11 +1,32 @@ +/* + * MIT License + * + * Copyright (c) 2024 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ package com.github.weisj.jsvg.renderer.awt; -import org.jetbrains.annotations.NotNull; - import java.awt.*; import java.awt.image.ImageObserver; import java.awt.image.ImageProducer; +import org.jetbrains.annotations.NotNull; + public class AwtComponentPlatformSupport implements PlatformSupport { protected final @NotNull Component component; @@ -43,7 +64,7 @@ public boolean isLongLived() { @Override public String toString() { return "AwtComponentSupport{" + - "component=" + component + - '}'; + "component=" + component + + '}'; } } diff --git a/jsvg/src/main/java/com/github/weisj/jsvg/renderer/awt/JComponentPlatformSupport.java b/jsvg/src/main/java/com/github/weisj/jsvg/renderer/awt/JComponentPlatformSupport.java index 5a8723bf..9c36f45d 100644 --- a/jsvg/src/main/java/com/github/weisj/jsvg/renderer/awt/JComponentPlatformSupport.java +++ b/jsvg/src/main/java/com/github/weisj/jsvg/renderer/awt/JComponentPlatformSupport.java @@ -25,6 +25,10 @@ import org.jetbrains.annotations.NotNull; +/** + * @deprecated Use {@link AwtComponentPlatformSupport} instead. + */ +@Deprecated public final class JComponentPlatformSupport extends AwtComponentPlatformSupport { public JComponentPlatformSupport(@NotNull JComponent component) {