Chromium Code Reviews| Index: ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc |
| diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc |
| index 877e8d1ccb3e30491c326022d939acfcb466e75c..2fc4cd976afd533180b25dd44cffd48bd8535870 100644 |
| --- a/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc |
| +++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc |
| @@ -280,7 +280,30 @@ gfx::Rect DesktopWindowTreeHostWin::GetWorkAreaBoundsInScreen() const { |
| void DesktopWindowTreeHostWin::SetShape(gfx::NativeRegion native_region) { |
| if (native_region) { |
| - message_handler_->SetRegion(gfx::CreateHRGNFromSkRegion(*native_region)); |
| + |
|
sky
2014/09/04 13:23:05
nit: no newline here.
Wez
2014/09/04 17:50:50
Done.
|
| + // TODO(wez): This would be a lot simpler if we were passed an SkPath. |
| + // See crbug.com/410593. |
| + gfx::NativeRegion shape = native_region; |
| + SkRegion device_region; |
| + if (gfx::IsInHighDPIMode()) { |
| + shape = &device_region; |
| + const float& scale = gfx::win::GetDeviceScaleFactor(); |
|
sky
2014/09/04 13:23:05
I think you want GetDPIScale() and no &, just cons
sky
2014/09/04 17:40:09
Actually, both are the same, so it shouldn't matte
Wez
2014/09/04 17:50:50
Re GetDPIScale: Done.
Re const float&: We want to
|
| + std::vector<SkIRect> rects; |
| + for (SkRegion::Iterator it(*native_region); !it.done(); it.next()) { |
| + const SkIRect& rect = it.rect(); |
| + SkRect scaled_rect = |
| + SkRect::MakeLTRB(rect.left() * scale, rect.top() * scale, |
| + rect.right() * scale, rect.bottom() * scale); |
| + SkIRect rounded_scaled_rect; |
| + scaled_rect.roundOut(&rounded_scaled_rect); |
| + rects.push_back(rounded_scaled_rect); |
| + } |
| + if (!rects.empty()) { |
|
sky
2014/09/04 13:23:05
nit: no {}
Wez
2014/09/04 17:50:50
Done.
|
| + device_region.setRects(&rects[0], rects.size()); |
| + } |
| + } |
| + |
| + message_handler_->SetRegion(gfx::CreateHRGNFromSkRegion(*shape)); |
| } else { |
| message_handler_->SetRegion(NULL); |
| } |