From a108ed43da5b9f9a075ec87011fa89c401339baa Mon Sep 17 00:00:00 2001 From: "Vassiliy.Kudryashov" Date: Fri, 26 Dec 2014 16:27:08 +0300 Subject: [PATCH] antialiasing for wave underscore --- .../intellij/ui/SimpleColoredComponent.java | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/platform/platform-api/src/com/intellij/ui/SimpleColoredComponent.java b/platform/platform-api/src/com/intellij/ui/SimpleColoredComponent.java index 658e08676729..2e24a9f70e01 100644 --- a/platform/platform-api/src/com/intellij/ui/SimpleColoredComponent.java +++ b/platform/platform-api/src/com/intellij/ui/SimpleColoredComponent.java @@ -19,8 +19,10 @@ import com.intellij.ide.BrowserUtil; import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.ui.GraphicsConfig; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.util.ui.GraphicsUtil; import com.intellij.util.ui.JBInsets; import com.intellij.util.ui.JBUI; import com.intellij.util.ui.UIUtil; @@ -37,6 +39,8 @@ import javax.swing.*; import javax.swing.border.Border; import javax.swing.tree.TreeCellRenderer; import java.awt.*; +import java.awt.geom.GeneralPath; +import java.awt.geom.PathIterator; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -682,13 +686,24 @@ public class SimpleColoredComponent extends JComponent implements Accessible, Co } // 2. Waved effect if (attributes.isWaved()) { - if (attributes.getWaveColor() != null) { - g.setColor(attributes.getWaveColor()); - } - final int wavedAt = textBaseline + 1; - for (int x = offset; x <= offset + fragmentWidth; x += 4) { - UIUtil.drawLine(g, x, wavedAt, x + 2, wavedAt + 2); - UIUtil.drawLine(g, x + 3, wavedAt + 1, x + 4, wavedAt); + GraphicsConfig config = GraphicsUtil.setupAAPainting(g); + Stroke oldStroke = g.getStroke(); + try { + g.setStroke(new BasicStroke(.7F)); + if (attributes.getWaveColor() != null) { + g.setColor(attributes.getWaveColor()); + } + final int wavedAt = textBaseline + 1; + GeneralPath wavePath = new GeneralPath(PathIterator.WIND_EVEN_ODD); + wavePath.moveTo(offset, wavedAt); + for (int x = offset; x <= offset + fragmentWidth; x += 4) { + wavePath.lineTo(x + 2, wavedAt + 2); + wavePath.lineTo(x + 4, wavedAt); + } + g.draw(wavePath); + } finally { + config.restore(); + g.setStroke(oldStroke); } } // 3. Underline