From 3b72d5e6dceec5c4e3937be662cc9e24bc6aa12d Mon Sep 17 00:00:00 2001 From: "Vassiliy.Kudryashov" Date: Thu, 16 Jul 2015 16:08:32 +0300 Subject: [PATCH] Wave underscore: Don't ignore Graphics clip --- .../src/com/intellij/util/ui/WavePainter.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/platform/util/src/com/intellij/util/ui/WavePainter.java b/platform/util/src/com/intellij/util/ui/WavePainter.java index 348da9e65735..c20b2f25e2f6 100644 --- a/platform/util/src/com/intellij/util/ui/WavePainter.java +++ b/platform/util/src/com/intellij/util/ui/WavePainter.java @@ -60,14 +60,21 @@ public class WavePainter { * Paints a wave in given coordinate range. y defines the lower boundary of painted wave. */ public void paint(Graphics2D g, int xStart, int xEnd, int y) { + Shape oldClip = g.getClip(); + final Rectangle rectangle = new Rectangle(xStart, y - 3, xEnd - xStart, 3); + final Rectangle waveClip = oldClip != null ? oldClip.getBounds().intersection(rectangle) : rectangle; + if (waveClip.isEmpty()) return; + Composite oldComposite = g.getComposite(); - g.setComposite(AlphaComposite.SrcOver); - Shape clip = g.getClip(); - g.setClip(xStart, y - 3, xEnd - xStart, 3); - xStart -= xStart % 4; - UIUtil.drawImage(g, myImage, xStart, y - 3, null); - g.setComposite(oldComposite); - g.setClip(clip); + try { + g.setComposite(AlphaComposite.SrcOver); + g.setClip(waveClip); + xStart -= xStart % 4; + UIUtil.drawImage(g, myImage, xStart, y - 3, null); + } finally { + g.setComposite(oldComposite); + g.setClip(oldClip); + } } public static WavePainter forColor(Color color) {