aboutsummaryrefslogtreecommitdiffstats
path: root/make
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2015-10-01 23:36:54 +0200
committerSven Gothel <[email protected]>2015-10-01 23:36:54 +0200
commita9b3f6d13b45284e81b91a1e1e31b35c31dd3670 (patch)
tree1a2550bc440cb27476d9d9a328600dc4b5fb296b /make
parent4b0be44f54a7d89192c03725a16e396eba98a712 (diff)
Bug 1232 - NEWT Translucent Decorated Windows Not Working On Windows >= 8 (Lack of Aero / Blur )
Adopting new undocumented user32.dll Windows >= 8 API: - SetWindowCompositionAttribute / AccentState See: - <https://github.com/riverar/sample-win10-aeroglass/blob/master/MainWindow.xaml.cs> - <http://withinrafael.com/adding-the-aero-glass-blur-to-your-windows-10-apps/> - <http://undoc.airesoft.co.uk/user32.dll/SetWindowCompositionAttribute.php> - <http://undoc.airesoft.co.uk/user32.dll/GetWindowCompositionAttribute.php> +++ Cleaning up WindowsDWM.h, use on header file (in stub_includes) for GlueGen and implementation. +++ Merge java implementation within GDIUtil.DwmSetupTranslucency(..), to be utilized by NEWT and JOGL. NEWT issues GDIUtil.DwmSetupTranslucency(..) at creation and when toggling decoration. Toggling decoration on Win >= 8 leads to lost of translucency when returning to decorated window. On Win 7, this may work .. but is also buggy. +++ Followup patch is needed for NEWT to _not_ clear the background!
Diffstat (limited to 'make')
-rw-r--r--make/build-nativewindow.xml5
-rw-r--r--make/config/nativewindow/win32-lib.cfg7
-rw-r--r--make/stub_includes/win32/WindowsDWM.h91
-rw-r--r--make/stub_includes/win32/gluegen/windows.h (renamed from make/stub_includes/win32/windows.h)13
-rw-r--r--make/stub_includes/win32/gluegen/wingdi.h (renamed from make/stub_includes/win32/wingdi.h)8
-rw-r--r--make/stub_includes/win32/gluegen/wingdi_types.h (renamed from make/stub_includes/win32/wingdi_types.h)8
-rw-r--r--make/stub_includes/win32/gluegen/winwgl.h (renamed from make/stub_includes/win32/winwgl.h)8
7 files changed, 131 insertions, 9 deletions
diff --git a/make/build-nativewindow.xml b/make/build-nativewindow.xml
index b3a02b9b9..216ae461f 100644
--- a/make/build-nativewindow.xml
+++ b/make/build-nativewindow.xml
@@ -227,7 +227,7 @@
outputRootDir="${build.nativewindow}"
config="${windowlib.os.cfg}"
includeRefid="stub.includes.fileset.platform"
- literalInclude="${stub.includes.gluegen.gg}, ${src.c}/${window.os.system}"
+ literalInclude="${stub.includes.gluegen.gg}, ${stub.includes}/${window.os.system}/gluegen, ${src.c}/${window.os.system}"
emitter="com.jogamp.gluegen.JavaEmitter"
debug="false"
dumpCPP="false">
@@ -246,7 +246,7 @@
outputRootDir="${build.nativewindow}"
config="${jawt.cfg}"
includeRefid="stub.includes.fileset.platform"
- literalInclude="${stub.includes.gluegen.gg}, ${stub.includes.gluegen}/jni, ${stub.includes.gluegen}/jni/${jni.platform.sub}"
+ literalInclude="${stub.includes.gluegen.gg}, ${stub.includes.gluegen}/jni, ${stub.includes.gluegen}/jni/${jni.platform.sub}, ${stub.includes}/${window.os.system}/gluegen"
emitter="com.jogamp.gluegen.JavaEmitter"
debug="false"
dumpCPP="false">
@@ -710,6 +710,7 @@
<includepath path="${src.generated.c}" />
<includepath path="${src.generated.c}/X11" if="isX11"/>
<includepath path="${src.generated.c}/MacOSX" if="isOSX"/>
+ <includepath path="stub_includes/win32" if="isWindows"/>
<includepath path="${src.generated.c}/Windows" if="isWindows"/>
<includepath path="${src.c}/x11" if="isX11"/>
<includepath path="${src.c}/macosx" if="isOSX"/>
diff --git a/make/config/nativewindow/win32-lib.cfg b/make/config/nativewindow/win32-lib.cfg
index 3a8fdd66a..da91f6944 100644
--- a/make/config/nativewindow/win32-lib.cfg
+++ b/make/config/nativewindow/win32-lib.cfg
@@ -13,6 +13,13 @@ Opaque long HANDLE
Opaque long PROC
Opaque long void **
+NIODirectOnly DwmEnableBlurBehindWindow
+NIODirectOnly DwmExtendFrameIntoClientArea
+NIODirectOnly DwmGetWindowAttribute
+NIODirectOnly DwmSetWindowAttribute
+NIODirectOnly GetWindowCompositionAccentPolicy
+NIODirectOnly SetWindowCompositionAccentPolicy
+
Import com.jogamp.nativewindow.util.Point
Import com.jogamp.nativewindow.NativeWindowException
Import jogamp.nativewindow.NWJNILibLoader
diff --git a/make/stub_includes/win32/WindowsDWM.h b/make/stub_includes/win32/WindowsDWM.h
index 2115a5908..247464afd 100644
--- a/make/stub_includes/win32/WindowsDWM.h
+++ b/make/stub_includes/win32/WindowsDWM.h
@@ -1,3 +1,6 @@
+#include <windows.h>
+#include <stdint.h>
+
#ifndef WGL_DWM_VERSION_1_X
#define DWM_BB_ENABLE 0x00000001
@@ -6,19 +9,44 @@
#define DWM_EC_DISABLECOMPOSITION 0
#define DWM_EC_ENABLECOMPOSITION 1
+typedef enum _DWMWINDOWATTRIBUTE {
+ DWMWA_NCRENDERING_ENABLED = 1,
+ DWMWA_NCRENDERING_POLICY,
+ DWMWA_TRANSITIONS_FORCEDISABLED,
+ DWMWA_ALLOW_NCPAINT,
+ DWMWA_CAPTION_BUTTON_BOUNDS,
+ DWMWA_NONCLIENT_RTL_LAYOUT,
+ DWMWA_FORCE_ICONIC_REPRESENTATION,
+ DWMWA_FLIP3D_POLICY,
+ DWMWA_EXTENDED_FRAME_BOUNDS,
+ DWMWA_HAS_ICONIC_BITMAP,
+ DWMWA_DISALLOW_PEEK,
+ DWMWA_EXCLUDED_FROM_PEEK,
+ DWMWA_CLOAK,
+ DWMWA_CLOAKED,
+ DWMWA_FREEZE_REPRESENTATION,
+ DWMWA_LAST
+} DWMWINDOWATTRIBUTE;
+
+typedef enum _DWMNCRENDERINGPOLICY {
+ DWMNCRP_USEWINDOWSTYLE = 0,
+ DWMNCRP_DISABLED,
+ DWMNCRP_ENABLED,
+ DWMNCRP_LAST
+} DWMNCRENDERINGPOLICY;
typedef struct tagDWM_BLURBEHIND {
DWORD dwFlags;
- int fEnable; /* BOOL */
+ int32_t fEnable; /* BOOL */
HRGN hRgnBlur;
- int fTransitionOnMaximized; /* BOOL */
+ int32_t fTransitionOnMaximized; /* BOOL */
} DWM_BLURBEHIND, *PDWM_BLURBEHIND;
typedef struct tagMARGINS {
- int cxLeftWidth;
- int cxRightWidth;
- int cyTopHeight;
- int cyBottomHeight;
+ int32_t cxLeftWidth;
+ int32_t cxRightWidth;
+ int32_t cyTopHeight;
+ int32_t cyBottomHeight;
} MARGINS, *PMARGINS;
#endif /* WGL_DWM_VERSION_1_X */
@@ -31,6 +59,57 @@ BOOL DwmIsCompositionEnabled();
BOOL DwmEnableComposition( UINT uCompositionAction );
BOOL DwmEnableBlurBehindWindow(HWND, CONST DWM_BLURBEHIND *);
BOOL DwmExtendFrameIntoClientArea(HWND, CONST MARGINS *);
+HRESULT DwmGetWindowAttribute(HWND hwnd, DWORD dwAttribute, PVOID pvAttribute, DWORD cbAttribute);
+HRESULT DwmSetWindowAttribute(HWND hwnd, DWORD dwAttribute, LPCVOID pvAttribute, DWORD cbAttribute);
#endif /* WGL_DWM_VERSION_1_X */
+#ifndef WGL_WINCOMP_VERSION_0_X
+
+typedef enum _AccentState {
+ ACCENT_DISABLED = 0,
+ ACCENT_ENABLE_GRADIENT = 1,
+ ACCENT_ENABLE_TRANSPARENTGRADIENT = 2,
+ ACCENT_ENABLE_BLURBEHIND = 3,
+ ACCENT_INVALID_STATE = 4
+} AccentState;
+
+typedef struct _AccentPolicy {
+ AccentState AccentState;
+ int32_t AccentFlags;
+ int32_t GradientColor;
+ int32_t AnimationId;
+} AccentPolicy;
+
+
+#ifndef __GLUEGEN__
+
+typedef enum _WindowCompositionAttribute {
+ WCA_ACCENT_POLICY = 19
+} WindowCompositionAttribute;
+
+typedef struct _WINCOMPATTRDATA {
+ /** The attribute to query */
+ WindowCompositionAttribute attribute;
+ /** result storage */
+ PVOID pData;
+ /** size of the result storage */
+ ULONG dataSize;
+} WINCOMPATTRDATA;
+
+#endif
+
+#endif /* WGL_WINCOMP_VERSION_0_X */
+
+#ifndef WGL_WINCOMP_VERSION_0_X
+#define WGL_WINCOMP_VERSION_0_X
+
+BOOL IsWindowCompositionExtensionAvailable();
+BOOL GetWindowCompositionAccentPolicy(HWND hwnd, AccentPolicy* pAccentPolicy);
+BOOL SetWindowCompositionAccentPolicy(HWND hwnd, const AccentPolicy* pAccentPolicy);
+#if 0
+ BOOL GetWindowCompositionAttribute(HWND hwnd, WINCOMPATTRDATA* pAttrData);
+ BOOL SetWindowCompositionAttribute(HWND hwnd, WINCOMPATTRDATA* pAttrData);
+#endif
+
+#endif /* WGL_WINCOMP_VERSION_0_X */
diff --git a/make/stub_includes/win32/windows.h b/make/stub_includes/win32/gluegen/windows.h
index 9958e6d3a..46a560767 100644
--- a/make/stub_includes/win32/windows.h
+++ b/make/stub_includes/win32/gluegen/windows.h
@@ -1,6 +1,14 @@
/* Windows #defines and typedefs required for processing of extracts
from WINGDI.H and jawt_md.h */
+/**
+ * These are standard include replacement files
+ * for gluegen processing only!
+ */
+#ifndef __GLUEGEN__
+ #error "This file is intended to be used for GlueGen code generation, not native compilation.
+#endif
+
#ifndef _WINDOWS_
#define _WINDOWS_
@@ -30,9 +38,12 @@ typedef HANDLE HINSTANCE;
typedef HANDLE HPALETTE;
typedef HANDLE HWND;
typedef HANDLE HRGN;
-typedef __int32 LONG;
typedef const char* LPCSTR;
+typedef void* PVOID;
typedef void* LPVOID;
+typedef const void* LPCVOID;
+typedef __int32 LONG;
+typedef unsigned __int32 ULONG;
typedef unsigned __int64 ULONG_PTR;
typedef struct _proc* PROC;
typedef unsigned int* PUINT;
diff --git a/make/stub_includes/win32/wingdi.h b/make/stub_includes/win32/gluegen/wingdi.h
index 0fb042eb1..5914c708c 100644
--- a/make/stub_includes/win32/wingdi.h
+++ b/make/stub_includes/win32/gluegen/wingdi.h
@@ -9,6 +9,14 @@
* Editions / Removals and a split (wingdi.h -> wingdi.h + wingdi_types.h + winwgl.h) were made by the JogAmp Community, 2010, 2012
*/
+/**
+ * These are standard include replacement files
+ * for gluegen processing only!
+ */
+#ifndef __GLUEGEN__
+ #error "This file is intended to be used for GlueGen code generation, not native compilation.
+#endif
+
#ifndef GDI_VERSION_1_X
#define GDI_VERSION_1_X
diff --git a/make/stub_includes/win32/wingdi_types.h b/make/stub_includes/win32/gluegen/wingdi_types.h
index 14210bf2f..659b39e8b 100644
--- a/make/stub_includes/win32/wingdi_types.h
+++ b/make/stub_includes/win32/gluegen/wingdi_types.h
@@ -9,6 +9,14 @@
* Editions / Removals and a split (wingdi.h -> wingdi.h + wingdi_types.h + winwgl.h) were made by the JogAmp Community, 2010, 2012
*/
+/**
+ * These are standard include replacement files
+ * for gluegen processing only!
+ */
+#ifndef __GLUEGEN__
+ #error "This file is intended to be used for GlueGen code generation, not native compilation.
+#endif
+
#ifndef GDI_TYPES_1_X
#define GDI_TYPES_1_X
diff --git a/make/stub_includes/win32/winwgl.h b/make/stub_includes/win32/gluegen/winwgl.h
index cc0589574..ca743c9fe 100644
--- a/make/stub_includes/win32/winwgl.h
+++ b/make/stub_includes/win32/gluegen/winwgl.h
@@ -9,6 +9,14 @@
* Editions / Removals and a split (wingdi.h -> wingdi.h + wingdi_types.h + winwgl.h) were made by the JogAmp Community, 2010, 2012
*/
+/**
+ * These are standard include replacement files
+ * for gluegen processing only!
+ */
+#ifndef __GLUEGEN__
+ #error "This file is intended to be used for GlueGen code generation, not native compilation.
+#endif
+
#ifndef WGL_GDI_VERSION_1_X
#include "wingdi_types.h"