Index: ui/views/widget/native_widget_win.cc |
diff --git a/ui/views/widget/native_widget_win.cc b/ui/views/widget/native_widget_win.cc |
index f7a242bdc6bbddaf53db06fb2f931e4419a69985..db36e48f2c8a39d52b6aeb5db5ca4cfc077cb4fe 100644 |
--- a/ui/views/widget/native_widget_win.cc |
+++ b/ui/views/widget/native_widget_win.cc |
@@ -23,6 +23,7 @@ |
#include "ui/base/l10n/l10n_util_win.h" |
#include "ui/base/theme_provider.h" |
#include "ui/base/view_prop.h" |
+#include "ui/base/win/dpi.h" |
#include "ui/base/win/hwnd_util.h" |
#include "ui/base/win/mouse_wheel_util.h" |
#include "ui/base/win/shell.h" |
@@ -30,7 +31,9 @@ |
#include "ui/gfx/canvas_paint.h" |
#include "ui/gfx/canvas_skia_paint.h" |
#include "ui/gfx/path.h" |
+#include "ui/gfx/point_conversions.h" |
#include "ui/gfx/screen.h" |
+#include "ui/gfx/size_conversions.h" |
#include "ui/native_theme/native_theme.h" |
#include "ui/views/controls/native_control_win.h" |
#include "ui/views/controls/textfield/textfield.h" |
@@ -111,8 +114,11 @@ void NativeWidgetWin::Show(int show_state) { |
// NativeWidgetWin, NativeWidget implementation: |
void NativeWidgetWin::InitNativeWidget(const Widget::InitParams& params) { |
- SetInitParams(params); |
- message_handler_->Init(params.parent, params.bounds); |
+ gfx::Rect pixel_bounds = ui::win::DIPToScreenRect(params.bounds); |
+ Widget::InitParams params_in_pixel(params); |
+ params_in_pixel.bounds = pixel_bounds; |
+ SetInitParams(params_in_pixel); |
+ message_handler_->Init(params.parent, pixel_bounds); |
} |
NonClientFrameView* NativeWidgetWin::CreateNonClientFrameView() { |
@@ -211,13 +217,15 @@ internal::InputMethodDelegate* NativeWidgetWin::GetInputMethodDelegate() { |
} |
void NativeWidgetWin::CenterWindow(const gfx::Size& size) { |
- message_handler_->CenterWindow(size); |
+ gfx::Size size_in_pixels = ui::win::DIPToScreenSize(size); |
+ message_handler_->CenterWindow(size_in_pixels); |
} |
void NativeWidgetWin::GetWindowPlacement( |
gfx::Rect* bounds, |
ui::WindowShowState* show_state) const { |
message_handler_->GetWindowPlacement(bounds, show_state); |
+ *bounds = ui::win::ScreenToDIPRect(*bounds); |
} |
void NativeWidgetWin::SetWindowTitle(const string16& title) { |
@@ -234,19 +242,26 @@ void NativeWidgetWin::InitModalType(ui::ModalType modal_type) { |
} |
gfx::Rect NativeWidgetWin::GetWindowBoundsInScreen() const { |
- return message_handler_->GetWindowBoundsInScreen(); |
+ gfx::Rect bounds_in_pixels = message_handler_->GetWindowBoundsInScreen(); |
+ return ui::win::ScreenToDIPRect(bounds_in_pixels); |
} |
gfx::Rect NativeWidgetWin::GetClientAreaBoundsInScreen() const { |
- return message_handler_->GetClientAreaBoundsInScreen(); |
+ gfx::Rect bounds_in_pixels = message_handler_->GetClientAreaBoundsInScreen(); |
+ return ui::win::ScreenToDIPRect(bounds_in_pixels); |
} |
gfx::Rect NativeWidgetWin::GetRestoredBounds() const { |
- return message_handler_->GetRestoredBounds(); |
+ gfx::Rect bounds_in_pixels = message_handler_->GetRestoredBounds(); |
+ return ui::win::ScreenToDIPRect(bounds_in_pixels); |
} |
void NativeWidgetWin::SetBounds(const gfx::Rect& bounds) { |
- message_handler_->SetBounds(bounds); |
+ float scale = ui::win::GetDeviceScaleFactor(); |
+ gfx::Rect bounds_in_pixels( |
+ gfx::ToCeiledPoint(gfx::ScalePoint(bounds.origin(), scale)), |
+ gfx::ToFlooredSize(gfx::ScaleSize(bounds.size(), scale))); |
+ message_handler_->SetBounds(bounds_in_pixels); |
} |
void NativeWidgetWin::SetSize(const gfx::Size& size) { |
@@ -287,7 +302,8 @@ void NativeWidgetWin::Hide() { |
void NativeWidgetWin::ShowMaximizedWithBounds( |
const gfx::Rect& restored_bounds) { |
- message_handler_->ShowMaximizedWithBounds(restored_bounds); |
+ gfx::Rect pixel_bounds = ui::win::DIPToScreenRect(restored_bounds); |
+ message_handler_->ShowMaximizedWithBounds(pixel_bounds); |
} |
void NativeWidgetWin::ShowWithWindowState(ui::WindowShowState show_state) { |
@@ -393,7 +409,8 @@ void NativeWidgetWin::RunShellDrag(View* view, |
} |
void NativeWidgetWin::SchedulePaintInRect(const gfx::Rect& rect) { |
- message_handler_->SchedulePaintInRect(rect); |
+ gfx::Rect pixel_rect = ui::win::DIPToScreenRect(rect); |
+ message_handler_->SchedulePaintInRect(pixel_rect); |
} |
void NativeWidgetWin::SetCursor(gfx::NativeCursor cursor) { |
@@ -405,8 +422,9 @@ void NativeWidgetWin::ClearNativeFocus() { |
} |
gfx::Rect NativeWidgetWin::GetWorkAreaBoundsInScreen() const { |
- return gfx::Screen::GetNativeScreen()->GetDisplayNearestWindow( |
- GetNativeView()).work_area(); |
+ return ui::win::ScreenToDIPRect( |
+ gfx::Screen::GetNativeScreen()->GetDisplayNearestWindow( |
+ GetNativeView()).work_area()); |
} |
void NativeWidgetWin::SetInactiveRenderingDisabled(bool value) { |
@@ -533,7 +551,8 @@ bool NativeWidgetWin::WillProcessWorkAreaChange() const { |
} |
int NativeWidgetWin::GetNonClientComponent(const gfx::Point& point) const { |
- return delegate_->GetNonClientComponent(point); |
+ gfx::Point point_in_dip = ui::win::ScreenToDIPPoint(point); |
+ return delegate_->GetNonClientComponent(point_in_dip); |
} |
void NativeWidgetWin::GetWindowMask(const gfx::Size& size, gfx::Path* path) { |
@@ -547,12 +566,13 @@ bool NativeWidgetWin::GetClientAreaInsets(gfx::Insets* insets) const { |
void NativeWidgetWin::GetMinMaxSize(gfx::Size* min_size, |
gfx::Size* max_size) const { |
- *min_size = delegate_->GetMinimumSize(); |
- *max_size = delegate_->GetMaximumSize(); |
+ *min_size = ui::win::ScreenToDIPSize(delegate_->GetMinimumSize()); |
+ *max_size = ui::win::ScreenToDIPSize(delegate_->GetMaximumSize()); |
} |
gfx::Size NativeWidgetWin::GetRootViewSize() const { |
- return GetWidget()->GetRootView()->size(); |
+ gfx::Size pixel_size = GetWidget()->GetRootView()->size(); |
+ return ui::win::ScreenToDIPSize(pixel_size); |
} |
void NativeWidgetWin::ResetWindowControls() { |
@@ -687,7 +707,8 @@ void NativeWidgetWin::HandleVisibilityChanged(bool visible) { |
} |
void NativeWidgetWin::HandleClientSizeChanged(const gfx::Size& new_size) { |
- delegate_->OnNativeWidgetSizeChanged(new_size); |
+ gfx::Size size_in_dip = ui::win::ScreenToDIPSize(new_size); |
+ delegate_->OnNativeWidgetSizeChanged(size_in_dip); |
} |
void NativeWidgetWin::HandleFrameChanged() { |
@@ -710,8 +731,11 @@ void NativeWidgetWin::HandleNativeBlur(HWND focused_window) { |
} |
bool NativeWidgetWin::HandleMouseEvent(const ui::MouseEvent& event) { |
- delegate_->OnMouseEvent(const_cast<ui::MouseEvent*>(&event)); |
- return event.handled(); |
+ ui::MouseEvent dpi_event(event); |
+ dpi_event.set_location(ui::win::ScreenToDIPPoint(event.location())); |
+ dpi_event.set_root_location(ui::win::ScreenToDIPPoint(event.location())); |
+ delegate_->OnMouseEvent(&dpi_event); |
+ return dpi_event.handled(); |
} |
bool NativeWidgetWin::HandleKeyEvent(const ui::KeyEvent& event) { |
@@ -757,7 +781,8 @@ void NativeWidgetWin::HandleInputLanguageChange(DWORD character_set, |
} |
bool NativeWidgetWin::HandlePaintAccelerated(const gfx::Rect& invalid_rect) { |
- return delegate_->OnNativeWidgetPaintAccelerated(gfx::Rect(invalid_rect)); |
+ gfx::Rect dpi_rect = ui::win::ScreenToDIPRect(invalid_rect); |
+ return delegate_->OnNativeWidgetPaintAccelerated(dpi_rect); |
} |
void NativeWidgetWin::HandlePaint(gfx::Canvas* canvas) { |
@@ -846,11 +871,11 @@ bool Widget::ConvertRect(const Widget* source, |
if (source_hwnd == target_hwnd) |
return true; |
- RECT win_rect = rect->ToRECT(); |
+ RECT win_rect = ui::win::DIPToScreenRect(*rect).ToRECT(); |
if (::MapWindowPoints(source_hwnd, target_hwnd, |
reinterpret_cast<LPPOINT>(&win_rect), |
sizeof(RECT)/sizeof(POINT))) { |
- *rect = gfx::Rect(win_rect); |
+ *rect = ui::win::ScreenToDIPRect(gfx::Rect(win_rect)); |
return true; |
} |
return false; |