From a1a31b7eae503d8e3a708e8ffc8492296e0efa44 Mon Sep 17 00:00:00 2001 From: anthony Date: Mon, 4 Oct 2010 16:21:26 +0400 Subject: [PATCH] 6982279: java/awt/FullScreen/TranslucentWindow/TranslucentWindow.java failed due to NPE Summary: Rely on the WWindowPeer.getTranslucentGraphics()'s return value Reviewed-by: art, dcherepanov --- .../sun/awt/windows/WComponentPeer.java | 30 ++++++++++--------- .../classes/sun/awt/windows/WWindowPeer.java | 10 ------- 2 files changed, 16 insertions(+), 24 deletions(-) diff --git a/src/windows/classes/sun/awt/windows/WComponentPeer.java b/src/windows/classes/sun/awt/windows/WComponentPeer.java index d697fd340..5a3cd2ddd 100644 --- a/src/windows/classes/sun/awt/windows/WComponentPeer.java +++ b/src/windows/classes/sun/awt/windows/WComponentPeer.java @@ -556,24 +556,26 @@ public abstract class WComponentPeer extends WObjectPeer Component target = (Component)getTarget(); Window window = SunToolkit.getContainingWindow(target); - if (window != null && !window.isOpaque()) { - // Non-opaque windows do not support heavyweight children. - // Redirect all painting to the Window's Graphics instead. - // The caller is responsible for calling the - // WindowPeer.updateWindow() after painting has finished. - int x = 0, y = 0; - for (Component c = target; c != window; c = c.getParent()) { - x += c.getX(); - y += c.getY(); - } - + if (window != null) { Graphics g = ((WWindowPeer)window.getPeer()).getTranslucentGraphics(); + // getTranslucentGraphics() returns non-null value for non-opaque windows only + if (g != null) { + // Non-opaque windows do not support heavyweight children. + // Redirect all painting to the Window's Graphics instead. + // The caller is responsible for calling the + // WindowPeer.updateWindow() after painting has finished. + int x = 0, y = 0; + for (Component c = target; c != window; c = c.getParent()) { + x += c.getX(); + y += c.getY(); + } - g.translate(x, y); - g.clipRect(0, 0, target.getWidth(), target.getHeight()); + g.translate(x, y); + g.clipRect(0, 0, target.getWidth(), target.getHeight()); - return g; + return g; + } } SurfaceData surfaceData = this.surfaceData; diff --git a/src/windows/classes/sun/awt/windows/WWindowPeer.java b/src/windows/classes/sun/awt/windows/WWindowPeer.java index c5c979e34..d3ccd4db4 100644 --- a/src/windows/classes/sun/awt/windows/WWindowPeer.java +++ b/src/windows/classes/sun/awt/windows/WWindowPeer.java @@ -594,16 +594,6 @@ public class WWindowPeer extends WPanelPeer implements WindowPeer, } } - @Override - public Graphics getGraphics() { - synchronized (getStateLock()) { - if (!isOpaque) { - return getTranslucentGraphics(); - } - } - return super.getGraphics(); - } - @Override public void setBackground(Color c) { super.setBackground(c); -- GitLab