Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(60)

Unified Diff: ui/views/win/hwnd_message_handler.cc

Issue 2826343002: Remove use of WS_EX_COMPOSITED for translucent windows. (Closed)
Patch Set: post-review changes Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/win/hwnd_message_handler.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/win/hwnd_message_handler.cc
diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc
index 7590741f2054786ef2a6e5ba721e5c20ee486800..4fc34c757eb1143adf0ee40429b2a64788b41aa9 100644
--- a/ui/views/win/hwnd_message_handler.cc
+++ b/ui/views/win/hwnd_message_handler.cc
@@ -528,7 +528,7 @@ void HWNDMessageHandler::SetBounds(const gfx::Rect& bounds_in_pixels,
void HWNDMessageHandler::SetDwmFrameExtension(DwmFrameState state) {
if (!delegate_->HasFrame() && ui::win::IsAeroGlassEnabled() &&
- (window_ex_style() & WS_EX_COMPOSITED) == 0) {
+ !is_translucent_) {
MARGINS m = {0, 0, 0, 0};
if (state == DwmFrameState::ON)
m = {0, 0, 1, 0};
@@ -853,10 +853,9 @@ void HWNDMessageHandler::SizeConstraintsChanged() {
if (style & (WS_POPUP | WS_CHILD))
return;
- LONG exstyle = GetWindowLong(hwnd(), GWL_EXSTYLE);
- // Windows cannot have WS_THICKFRAME set if WS_EX_COMPOSITED is set.
+ // Windows cannot have WS_THICKFRAME set if translucent.
// See CalculateWindowStylesFromInitParams().
- if (delegate_->CanResize() && (exstyle & WS_EX_COMPOSITED) == 0) {
+ if (delegate_->CanResize() && !is_translucent_) {
style |= WS_THICKFRAME | WS_MAXIMIZEBOX;
if (!delegate_->CanMaximize())
style &= ~WS_MAXIMIZEBOX;
@@ -1177,12 +1176,11 @@ bool HWNDMessageHandler::GetClientAreaInsets(gfx::Insets* insets) const {
void HWNDMessageHandler::ResetWindowRegion(bool force, bool redraw) {
// A native frame uses the native window region, and we don't want to mess
// with it.
- // WS_EX_COMPOSITED is used instead of WS_EX_LAYERED under aura. WS_EX_LAYERED
- // automatically makes clicks on transparent pixels fall through, that isn't
- // the case with WS_EX_COMPOSITED. So, we route WS_EX_COMPOSITED through to
- // the delegate to allow for a custom hit mask.
- if ((window_ex_style() & WS_EX_COMPOSITED) == 0 &&
- !custom_window_region_.is_valid() &&
+ // WS_EX_LAYERED automatically makes clicks on transparent pixels fall
+ // through, but that isn't the case when using Direct3D to draw transparent
+ // windows. So we route translucent windows throught to the delegate to
+ // allow for a custom hit mask.
+ if (!is_translucent_ && !custom_window_region_.is_valid() &&
(IsFrameSystemDrawn() || !delegate_->HasNonClientView())) {
if (force)
SetWindowRgn(hwnd(), NULL, redraw);
@@ -1341,11 +1339,13 @@ void HWNDMessageHandler::OnCommand(UINT notification_code,
}
LRESULT HWNDMessageHandler::OnCreate(CREATESTRUCT* create_struct) {
- if (window_ex_style() & WS_EX_COMPOSITED) {
+ if (is_translucent_) {
// This is part of the magic to emulate layered windows with Aura
- // see the explanation elsewere when we set WS_EX_COMPOSITED style.
+ // see the explanation elsewere when we set is_translucent_.
MARGINS margins = {-1, -1, -1, -1};
DwmExtendFrameIntoClientArea(hwnd(), &margins);
+
+ ::SetProp(hwnd(), ui::kWindowTranslucent, reinterpret_cast<HANDLE>(1));
}
fullscreen_handler_->set_hwnd(hwnd());
@@ -1387,6 +1387,7 @@ LRESULT HWNDMessageHandler::OnCreate(CREATESTRUCT* create_struct) {
}
void HWNDMessageHandler::OnDestroy() {
+ ::RemoveProp(hwnd(), ui::kWindowTranslucent);
windows_session_change_observer_.reset(nullptr);
delegate_->HandleDestroying();
// If the window going away is a fullscreen window then remove its references
« no previous file with comments | « ui/views/win/hwnd_message_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698