|
@@ -817,3 +817,45 @@ float ImGui_ImplWin32_GetDpiScaleForHwnd(void* hwnd)
|
|
|
HMONITOR monitor = ::MonitorFromWindow((HWND)hwnd, MONITOR_DEFAULTTONEAREST);
|
|
|
return ImGui_ImplWin32_GetDpiScaleForMonitor(monitor);
|
|
|
}
|
|
|
+
|
|
|
+//---------------------------------------------------------------------------------------------------------
|
|
|
+// Transparency related helpers (optional)
|
|
|
+//--------------------------------------------------------------------------------------------------------
|
|
|
+
|
|
|
+#if defined(_MSC_VER)
|
|
|
+#pragma comment(lib, "dwmapi") // Link with dwmapi.lib. MinGW will require linking with '-ldwmapi'
|
|
|
+#endif
|
|
|
+
|
|
|
+// [experimental]
|
|
|
+// Borrowed from GLFW's function updateFramebufferTransparency() in src/win32_window.c
|
|
|
+// (the Dwm* functions are Vista era functions but we are borrowing logic from GLFW)
|
|
|
+void ImGui_ImplWin32_EnableAlphaCompositing(void* hwnd)
|
|
|
+{
|
|
|
+ if (!_IsWindowsVistaOrGreater())
|
|
|
+ return;
|
|
|
+
|
|
|
+ BOOL composition;
|
|
|
+ if (FAILED(::DwmIsCompositionEnabled(&composition)) || !composition)
|
|
|
+ return;
|
|
|
+
|
|
|
+ BOOL opaque;
|
|
|
+ DWORD color;
|
|
|
+ if (_IsWindows8OrGreater() || (SUCCEEDED(::DwmGetColorizationColor(&color, &opaque)) && !opaque))
|
|
|
+ {
|
|
|
+ HRGN region = ::CreateRectRgn(0, 0, -1, -1);
|
|
|
+ DWM_BLURBEHIND bb = {};
|
|
|
+ bb.dwFlags = DWM_BB_ENABLE | DWM_BB_BLURREGION;
|
|
|
+ bb.hRgnBlur = region;
|
|
|
+ bb.fEnable = TRUE;
|
|
|
+ ::DwmEnableBlurBehindWindow((HWND)hwnd, &bb);
|
|
|
+ ::DeleteObject(region);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ DWM_BLURBEHIND bb = {};
|
|
|
+ bb.dwFlags = DWM_BB_ENABLE;
|
|
|
+ ::DwmEnableBlurBehindWindow((HWND)hwnd, &bb);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//---------------------------------------------------------------------------------------------------------
|