From 4715d8d16c351a2c3e26e2657e6f42ad99c6d676 Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Mon, 17 Jul 2023 12:43:09 +0200 Subject: [PATCH] jsvg: use `RenderingHints.VALUE_STROKE_PURE` for correct line rendering --- .../formdev/flatlaf/extras/FlatSVGIcon.java | 18 ++++++++++++------ .../formdev/flatlaf/extras/FlatSVGUtils.java | 4 +--- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatSVGIcon.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatSVGIcon.java index c8ea11a2..ebc31143 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatSVGIcon.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatSVGIcon.java @@ -574,12 +574,7 @@ public class FlatSVGIcon Graphics2D g2 = new GraphicsFilter( (Graphics2D) g.create(), colorFilter, ColorFilter.getInstance(), grayFilter ); try { - // same hints as in FlatUIUtils.setRenderingHints() - g2.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON ); - g2.setRenderingHint( RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_NORMALIZE ); - - // enable better image scaling - g2.setRenderingHint( RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR ); + setRenderingHints( g2 ); paintSvg( g2, x, y ); } finally { @@ -652,6 +647,17 @@ public class FlatSVGIcon return MultiResolutionImageSupport.create( 0, dimensions, producer ); } + static void setRenderingHints( Graphics2D g ) { + // enable anti-aliasing + g.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON ); + + // disable coordinate normalization for correct line rendering + g.setRenderingHint( RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE ); + + // enable better image scaling + g.setRenderingHint( RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR ); + } + static URL uri2url( URI uri ) { try { return uri.toURL(); diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatSVGUtils.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatSVGUtils.java index 2c8d012e..bb546fa7 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatSVGUtils.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatSVGUtils.java @@ -19,7 +19,6 @@ package com.formdev.flatlaf.extras; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Image; -import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.net.URL; import java.util.Arrays; @@ -201,8 +200,7 @@ public class FlatSVGUtils Graphics2D g = image.createGraphics(); try { - g.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON ); - g.setRenderingHint( RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR ); + FlatSVGIcon.setRenderingHints( g ); FloatSize size = document.size(); double sx = width / size.width;