| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_UI_VIEWS_FRAME_MINIMIZE_BUTTON_METRICS_WIN_H_ |
| #define CHROME_BROWSER_UI_VIEWS_FRAME_MINIMIZE_BUTTON_METRICS_WIN_H_ |
| |
| #include <windows.h> |
| |
| #include "base/macros.h" |
| |
| // Class that implements obtaining the X coordinate of the native minimize |
| // button for the native frame on Windows. |
| // This is a separate class because obtaining it is somewhat tricky and this |
| // code is shared between BrowserDesktopWindowTreeHostWin and BrowserFrameWin. |
| class MinimizeButtonMetrics { |
| public: |
| MinimizeButtonMetrics(); |
| ~MinimizeButtonMetrics(); |
| |
| void Init(HWND hwnd); |
| |
| // Obtain the X offset of the native minimize button. Since Windows can lie |
| // to us if we call this at the wrong moment, this might come from a cached |
| // value rather than read when called. |
| int GetMinimizeButtonOffsetX() const; |
| |
| // Must be called when hwnd_ is activated to update the minimize button |
| // position cache. |
| void OnHWNDActivated(); |
| |
| // Must be called when WM_DPICHANGED message is received. |
| void OnDpiChanged(); |
| |
| private: |
| // Gets the value for GetMinimizeButtonOffsetX(), caching if found. |
| int GetAndCacheMinimizeButtonOffsetX() const; |
| |
| int GetButtonBoundsPositionOffset(const RECT& button_bounds, |
| const RECT& window_bounds) const; |
| |
| int GetMinimizeButtonOffsetForWindow() const; |
| |
| HWND hwnd_; |
| |
| // Cached offset of the minimize button. If RTL this is the location of the |
| // minimize button, if LTR this is the offset from the right edge of the |
| // client area to the minimize button. |
| mutable int cached_minimize_button_x_delta_; |
| |
| // Static cache of |cached_minimize_button_x_delta_|. |
| static int last_cached_minimize_button_x_delta_; |
| |
| // Static cache of offset value representing the difference between |
| // DWMWA_CAPTION_BUTTON_BOUNDS and WM_GETTITLEBARINFOEX |
| static int button_bounds_position_offset_; |
| |
| // Has OnHWNDActivated() been invoked? |
| bool was_activated_; |
| |
| DISALLOW_COPY_AND_ASSIGN(MinimizeButtonMetrics); |
| }; |
| |
| #endif // CHROME_BROWSER_UI_VIEWS_FRAME_MINIMIZE_BUTTON_METRICS_WIN_H_ |