aboutsummaryrefslogtreecommitdiff
path: root/src/windows
diff options
context:
space:
mode:
authorAnton Tarasov <anton.tarasov@jetbrains.com>2018-07-12 14:19:33 +0300
committerAnton Tarasov <anton.tarasov@jetbrains.com>2018-07-12 14:25:05 +0300
commitc290b2d21eeb120db945feb37b00305b277978f8 (patch)
treedbaa4ec00e1396bacf8677805afb3bca7f5d1a6e /src/windows
parentfc67b0af1aa901f7a0260107cef5e578499f532c (diff)
downloadjdk8u_jdk-c290b2d21eeb120db945feb37b00305b277978f8.tar.gz
JRE-875 TranslucentWindowPainter leaves white background on window resize
Diffstat (limited to 'src/windows')
-rw-r--r--src/windows/classes/sun/awt/windows/TranslucentWindowPainter.java14
1 files changed, 14 insertions, 0 deletions
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);
}