jsvg: use RenderingHints.VALUE_STROKE_PURE for correct line rendering

This commit is contained in:
Karl Tauber
2023-07-17 12:43:09 +02:00
parent 193da2bc4d
commit 4715d8d16c
2 changed files with 13 additions and 9 deletions

View File

@@ -574,12 +574,7 @@ public class FlatSVGIcon
Graphics2D g2 = new GraphicsFilter( (Graphics2D) g.create(), colorFilter, ColorFilter.getInstance(), grayFilter ); Graphics2D g2 = new GraphicsFilter( (Graphics2D) g.create(), colorFilter, ColorFilter.getInstance(), grayFilter );
try { try {
// same hints as in FlatUIUtils.setRenderingHints() setRenderingHints( g2 );
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 );
paintSvg( g2, x, y ); paintSvg( g2, x, y );
} finally { } finally {
@@ -652,6 +647,17 @@ public class FlatSVGIcon
return MultiResolutionImageSupport.create( 0, dimensions, producer ); 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 ) { static URL uri2url( URI uri ) {
try { try {
return uri.toURL(); return uri.toURL();

View File

@@ -19,7 +19,6 @@ package com.formdev.flatlaf.extras;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Image; import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.net.URL; import java.net.URL;
import java.util.Arrays; import java.util.Arrays;
@@ -201,8 +200,7 @@ public class FlatSVGUtils
Graphics2D g = image.createGraphics(); Graphics2D g = image.createGraphics();
try { try {
g.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON ); FlatSVGIcon.setRenderingHints( g );
g.setRenderingHint( RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR );
FloatSize size = document.size(); FloatSize size = document.size();
double sx = width / size.width; double sx = width / size.width;