From 0fcd1ab685948fd2ca10d5ff7130d38336cedabd Mon Sep 17 00:00:00 2001 From: Kenneth Russel Date: Fri, 28 Oct 2005 01:11:13 +0000 Subject: Updated spec based on comments from rexguo on javagaming.org forums git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/svn-server-sync/jogl/trunk@407 232f8b59-042b-4e1e-8c03-345bb8c30851 --- src/classes/javax/media/opengl/GLCanvas.java | 38 ++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'src/classes/javax/media/opengl/GLCanvas.java') diff --git a/src/classes/javax/media/opengl/GLCanvas.java b/src/classes/javax/media/opengl/GLCanvas.java index f2ca1bf80..26a55ab3c 100644 --- a/src/classes/javax/media/opengl/GLCanvas.java +++ b/src/classes/javax/media/opengl/GLCanvas.java @@ -44,6 +44,8 @@ import java.awt.EventQueue; import java.awt.Graphics; import java.awt.GraphicsConfiguration; import java.awt.GraphicsDevice; +import java.lang.reflect.*; +import java.security.*; import com.sun.opengl.impl.*; // FIXME: Subclasses need to call resetGLFunctionAvailability() on their @@ -121,6 +123,7 @@ public class GLCanvas extends Canvas implements GLAutoDrawable { create an OpenGL context for the component. */ public void addNotify() { super.addNotify(); + disableBackgroundErase(); drawable.setRealized(true); if (DEBUG) { System.err.println("GLCanvas.addNotify()"); @@ -247,4 +250,39 @@ public class GLCanvas extends Canvas implements GLAutoDrawable { } private SwapBuffersOnEventDispatchThreadAction swapBuffersOnEventDispatchThreadAction = new SwapBuffersOnEventDispatchThreadAction(); + + // Disables the AWT's erasing of this Canvas's background on Windows + // in Java SE 6. This internal API is not available in previous + // releases, but the system property + // -Dsun.awt.noerasebackground=true can be specified to get similar + // results globally in previous releases. + private static boolean disableBackgroundEraseInitialized; + private static Method disableBackgroundEraseMethod; + private void disableBackgroundErase() { + if (!disableBackgroundEraseInitialized) { + try { + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + try { + disableBackgroundEraseMethod = + getToolkit().getClass().getDeclaredMethod("disableBackgroundErase", + new Class[] { Canvas.class }); + disableBackgroundEraseMethod.setAccessible(true); + } catch (Exception e) { + } + return null; + } + }); + } catch (Exception e) { + } + disableBackgroundEraseInitialized = true; + } + if (disableBackgroundEraseMethod != null) { + try { + disableBackgroundEraseMethod.invoke(getToolkit(), new Object[] { this }); + } catch (Exception e) { + throw new GLException(e); + } + } + } } -- cgit v1.2.3