diff --git a/CHANGELOG.md b/CHANGELOG.md index ffc58f6a..c360b614 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Unreleased - On Android, calling `WindowEvent::Focused` now works properly instead of always returning false. +- On Windows, fix bug preventing windows with transparency enabled from having fully-opaque regions. # 0.23.0 (2020-10-02) diff --git a/src/platform_impl/windows/window.rs b/src/platform_impl/windows/window.rs index 6253c943..bd2362fa 100644 --- a/src/platform_impl/windows/window.rs +++ b/src/platform_impl/windows/window.rs @@ -23,7 +23,6 @@ use winapi::{ ole2, oleidl::LPDROPTARGET, shobjidl_core::{CLSID_TaskbarList, ITaskbarList2}, - wingdi::{CreateRectRgn, DeleteObject}, winnt::LPCWSTR, winuser, }, @@ -708,33 +707,19 @@ unsafe fn init( // making the window transparent if attributes.transparent && !pl_attribs.no_redirection_bitmap { - let region = CreateRectRgn(0, 0, -1, -1); // makes the window transparent - let bb = dwmapi::DWM_BLURBEHIND { - dwFlags: dwmapi::DWM_BB_ENABLE | dwmapi::DWM_BB_BLURREGION, + dwFlags: dwmapi::DWM_BB_ENABLE, fEnable: 1, - hRgnBlur: region, + hRgnBlur: ptr::null_mut(), fTransitionOnMaximized: 0, }; dwmapi::DwmEnableBlurBehindWindow(real_window.0, &bb); - DeleteObject(region as _); if attributes.decorations { - // HACK: When opaque (opacity 255), there is a trail whenever - // the transparent window is moved. By reducing it to 254, - // the window is rendered properly. - let opacity = 254; + let opacity = 255; - // The color key can be any value except for black (0x0). - let color_key = 0x0030c100; - - winuser::SetLayeredWindowAttributes( - real_window.0, - color_key, - opacity, - winuser::LWA_ALPHA, - ); + winuser::SetLayeredWindowAttributes(real_window.0, 0, opacity, winuser::LWA_ALPHA); } }