| Index: chrome/browser/ui/views/frame/minimize_button_metrics_win.cc
|
| diff --git a/chrome/browser/ui/views/frame/minimize_button_metrics_win.cc b/chrome/browser/ui/views/frame/minimize_button_metrics_win.cc
|
| index 095f2574c83c9ed91b29b7ec8972c8022cbe5d8d..93080cd5c189c62b00c9e8fe87185b438f2cf545 100644
|
| --- a/chrome/browser/ui/views/frame/minimize_button_metrics_win.cc
|
| +++ b/chrome/browser/ui/views/frame/minimize_button_metrics_win.cc
|
| @@ -4,11 +4,12 @@
|
|
|
| #include "chrome/browser/ui/views/frame/minimize_button_metrics_win.h"
|
|
|
| -#include "base/logging.h"
|
| #include "base/i18n/rtl.h"
|
| +#include "base/logging.h"
|
| #include "base/win/windows_version.h"
|
| #include "dwmapi.h"
|
| #include "ui/base/win/shell.h"
|
| +#include "ui/display/display.h"
|
| #include "ui/display/win/dpi.h"
|
| #include "ui/display/win/screen_win.h"
|
| #include "ui/gfx/geometry/point.h"
|
| @@ -52,6 +53,29 @@ MinimizeButtonMetrics::MinimizeButtonMetrics()
|
| MinimizeButtonMetrics::~MinimizeButtonMetrics() {
|
| }
|
|
|
| +// static
|
| +int MinimizeButtonMetrics::GetCaptionButtonHeightInDIPs() {
|
| + // At DPI scaling settings other than 100% the result won't be exactly right.
|
| + // TODO: return a more accurate approximation [http://crbug.com/716365]
|
| +
|
| + // SM_CYSIZE returns the caption button height, but to get the full height
|
| + // from the top of the window we add SM_CYSIZEFRAME.
|
| + const int caption_height = GetSystemMetrics(SM_CYSIZE);
|
| + const int frame_thickness = GetSystemMetrics(SM_CYSIZEFRAME);
|
| +
|
| + // The result of GetSystemMetrics depends on the scale factor of the primary
|
| + // display. Divide the sum by that to convert to DIPs. (Converting SM_CYSIZE
|
| + // and SM_CYSIZEFRAME to DIPs individually adds a bigger rounding error.)
|
| + float primary_device_scale_factor =
|
| + display::Screen::GetScreen()->GetPrimaryDisplay().device_scale_factor();
|
| + float height_dips =
|
| + (caption_height + frame_thickness) / primary_device_scale_factor;
|
| +
|
| + // Testing shows that floor() gives a more accurate approximation than
|
| + // round() here.
|
| + return std::floor(height_dips);
|
| +}
|
| +
|
| void MinimizeButtonMetrics::Init(HWND hwnd) {
|
| DCHECK(!hwnd_);
|
| hwnd_ = hwnd;
|
| @@ -123,7 +147,7 @@ int MinimizeButtonMetrics::GetMinimizeButtonOffsetForWindow() const {
|
| TITLEBARINFOEX titlebar_info = {0};
|
| titlebar_info.cbSize = sizeof(TITLEBARINFOEX);
|
| SendMessage(hwnd_, WM_GETTITLEBARINFOEX, 0,
|
| - reinterpret_cast<WPARAM>(&titlebar_info));
|
| + reinterpret_cast<LPARAM>(&titlebar_info));
|
|
|
| // Under DWM WM_GETTITLEBARINFOEX won't return the right thing until after
|
| // WM_NCACTIVATE (maybe it returns classic values?). In an attempt to
|
|
|