From c290b2d21eeb120db945feb37b00305b277978f8 Mon Sep 17 00:00:00 2001 From: Anton Tarasov Date: Thu, 12 Jul 2018 14:19:33 +0300 Subject: JRE-875 TranslucentWindowPainter leaves white background on window resize --- .../classes/sun/awt/windows/TranslucentWindowPainter.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/windows') diff --git a/src/windows/classes/sun/awt/windows/TranslucentWindowPainter.java b/src/windows/classes/sun/awt/windows/TranslucentWindowPainter.java index 22122561ab..df6b8fddea 100644 --- a/src/windows/classes/sun/awt/windows/TranslucentWindowPainter.java +++ b/src/windows/classes/sun/awt/windows/TranslucentWindowPainter.java @@ -191,12 +191,14 @@ abstract class TranslucentWindowPainter { backBuffer.getHeight(null) != h || !checkScaleValid(backBuffer)) { + Image oldBackBuffer = backBuffer; flush(); // [tav] BufferedImage is not hidpi-aware, create a VolatileImage backed by a hidpi-aware BufImgSurfaceData // backBuffer = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB_PRE); GraphicsConfiguration gc = peer.getGraphicsConfiguration(); try { backBuffer = gc.createCompatibleVolatileImage(w, h, new ImageCapabilities(false), TRANSLUCENT); + paintOld(oldBackBuffer, backBuffer); } catch (AWTException e) { e.printStackTrace(); } @@ -204,6 +206,16 @@ abstract class TranslucentWindowPainter { return clear ? clearImage(backBuffer) : backBuffer; } + protected void paintOld(Image oldImage, Image newImage) { + if (oldImage != null) { + clearImage(newImage); + Graphics2D g = (Graphics2D)newImage.getGraphics(); + g.setComposite(AlphaComposite.Src); + g.setColor(new Color(0, 0, 0, 0)); + g.drawImage(oldImage, 0, 0, null); + } + } + @Override protected boolean update(Image bb) { VolatileImage viBB = null; @@ -272,6 +284,7 @@ abstract class TranslucentWindowPainter { viBB.validate(gc) == IMAGE_INCOMPATIBLE || !checkScaleValid(viBB)) { + Image oldViBB = viBB; flush(); if (gc instanceof AccelGraphicsConfig) { @@ -283,6 +296,7 @@ abstract class TranslucentWindowPainter { if (viBB == null) { viBB = gc.createCompatibleVolatileImage(w, h, TRANSLUCENT); } + paintOld(oldViBB, viBB); viBB.validate(gc); } -- cgit v1.2.3