Index: ui/views/view.cc |
diff --git a/ui/views/view.cc b/ui/views/view.cc |
index a38ccb71afdc69bb0bbad15d554cf04de2d8b947..2afb5622b3cbfa86937c66a575c2cf61de6b4927 100644 |
--- a/ui/views/view.cc |
+++ b/ui/views/view.cc |
@@ -20,6 +20,7 @@ |
#include "ui/base/accessibility/accessibility_types.h" |
#include "ui/base/dragdrop/drag_drop_types.h" |
#include "ui/base/ui_base_switches.h" |
+#include "ui/base/win/dpi.h" |
#include "ui/compositor/compositor.h" |
#include "ui/compositor/layer.h" |
#include "ui/compositor/layer_animator.h" |
@@ -665,6 +666,11 @@ void View::ConvertPointToScreen(const View* src, gfx::Point* p) { |
if (widget) { |
ConvertPointToWidget(src, p); |
*p += widget->GetClientAreaBoundsInScreen().OffsetFromOrigin(); |
+#if defined(ENABLE_HIDPI) |
+ static float dpi_scale = ui::GetDPIScale(); |
+ p->set_x(p->x()*dpi_scale); |
+ p->set_y(p->y()*dpi_scale); |
+#endif |
} |
} |
@@ -676,6 +682,11 @@ void View::ConvertPointFromScreen(const View* dst, gfx::Point* p) { |
const views::Widget* widget = dst->GetWidget(); |
if (!widget) |
return; |
+#if defined(ENABLE_HIDPI) |
+ static float dpi_scale = ui::GetDPIScale(); |
+ p->set_x(p->x()/dpi_scale); |
+ p->set_y(p->y()/dpi_scale); |
+#endif |
*p -= widget->GetClientAreaBoundsInScreen().OffsetFromOrigin(); |
views::View::ConvertPointFromWidget(dst, p); |
} |
@@ -735,6 +746,9 @@ void View::Paint(gfx::Canvas* canvas) { |
// Non-empty clip, translate the graphics such that 0,0 corresponds to |
// where this view is located (related to its parent). |
+ static float scale = ui::GetDPIScale(); |
+ //canvas->Scale(scale,scale); |
+ //canvas->Scale(1.0,1.0); |
canvas->Translate(GetMirroredPosition().OffsetFromOrigin()); |
canvas->Transform(GetTransform()); |
@@ -764,6 +778,11 @@ bool View::get_use_acceleration_when_possible() { |
} |
// Input ----------------------------------------------------------------------- |
+void ScalePoint(gfx::Point* point) { |
+ static float os_scale = ui::GetDPIScale(); |
+ point->set_x( point->x() / os_scale); |
+ point->set_y( point->y() / os_scale); |
+} |
View* View::GetEventHandlerForPoint(const gfx::Point& point) { |
// Walk the child Views recursively looking for the View that most |
@@ -775,7 +794,9 @@ View* View::GetEventHandlerForPoint(const gfx::Point& point) { |
gfx::Point point_in_child_coords(point); |
ConvertPointToTarget(this, child, &point_in_child_coords); |
- if (child->HitTestPoint(point_in_child_coords)) |
+ gfx::Point point_in_real_coords(point_in_child_coords); |
+ ScalePoint(&point_in_real_coords); |
+ if (child->HitTestPoint(point_in_real_coords)) |
return child->GetEventHandlerForPoint(point_in_child_coords); |
} |
return this; |