From 8ddd3b6d68256ea79df74b04102abf45fcde208c Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Fri, 31 Dec 2021 10:28:34 +0100 Subject: [PATCH] Native window decorations: fixed blurry iconify/maximize/close button hover rectangles at 125%, 150% or 175% scaling (issue #431) --- CHANGELOG.md | 3 +++ .../com/formdev/flatlaf/icons/FlatWindowAbstractIcon.java | 7 +++++++ .../java/com/formdev/flatlaf/ui/JBRCustomDecorations.java | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e56957a..e0b9a9ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,9 @@ FlatLaf Change Log (instead of using JetBrains custom decorations). System variable `flatlaf.useJetBrainsCustomDecorations` is now `false` by default (was `true` in FlatLaf 1.x). (issue #454) +- Native window decorations: Fixed blurry iconify/maximize/close button hover + rectangles at 125%, 150% or 175% scaling. (issue #431) + ## 2.0-rc1 diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatWindowAbstractIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatWindowAbstractIcon.java index 15a8d6ab..fcea0da8 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatWindowAbstractIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatWindowAbstractIcon.java @@ -20,6 +20,7 @@ import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Graphics2D; +import java.awt.RenderingHints; import javax.swing.UIManager; import com.formdev.flatlaf.ui.FlatButtonUI; import com.formdev.flatlaf.ui.FlatUIUtils; @@ -65,8 +66,14 @@ public abstract class FlatWindowAbstractIcon protected void paintBackground( Component c, Graphics2D g ) { Color background = FlatButtonUI.buttonStateColor( c, null, null, null, hoverBackground, pressedBackground ); if( background != null ) { + // disable antialiasing for background rectangle painting to avoid blury edges when scaled (e.g. at 125% or 175%) + Object oldHint = g.getRenderingHint( RenderingHints.KEY_ANTIALIASING ); + g.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF ); + g.setColor( FlatUIUtils.deriveColor( background, c.getBackground() ) ); g.fillRect( 0, 0, width, height ); + + g.setRenderingHint( RenderingHints.KEY_ANTIALIASING, oldHint ); } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/JBRCustomDecorations.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/JBRCustomDecorations.java index 3cd6156d..8b2b4c11 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/JBRCustomDecorations.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/JBRCustomDecorations.java @@ -298,7 +298,7 @@ public class JBRCustomDecorations } private void paintImpl( Graphics2D g, int x, int y, int width, int height, double scaleFactor ) { - g.drawRect( x, y, width - 1, 0 ); + g.fillRect( x, y, width, 1 ); } void repaintBorder( Component c ) {