Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(369)

Side by Side Diff: ui/display/screen.cc

Issue 2549543002: Clamp dialog bounds to be fully visible on the nearest display (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/display/screen.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/display/screen.h" 5 #include "ui/display/screen.h"
6 6
7 #include "ui/display/display.h" 7 #include "ui/display/display.h"
8 #include "ui/display/display_finder.h"
8 #include "ui/gfx/geometry/rect.h" 9 #include "ui/gfx/geometry/rect.h"
9 10
10 namespace display { 11 namespace display {
11 12
12 namespace { 13 namespace {
13 14
14 Screen* g_screen; 15 Screen* g_screen;
15 16
16 } // namespace 17 } // namespace
17 18
18 Screen::Screen() {} 19 Screen::Screen() {}
19 20
20 Screen::~Screen() {} 21 Screen::~Screen() {}
21 22
22 // static 23 // static
23 Screen* Screen::GetScreen() { 24 Screen* Screen::GetScreen() {
24 #if defined(OS_MACOSX) 25 #if defined(OS_MACOSX)
25 // TODO(scottmg): https://crbug.com/558054 26 // TODO(scottmg): https://crbug.com/558054
26 if (!g_screen) 27 if (!g_screen)
27 g_screen = CreateNativeScreen(); 28 g_screen = CreateNativeScreen();
28 #endif 29 #endif
29 return g_screen; 30 return g_screen;
30 } 31 }
31 32
32 // static 33 // static
33 void Screen::SetScreenInstance(Screen* instance) { 34 void Screen::SetScreenInstance(Screen* instance) {
34 g_screen = instance; 35 g_screen = instance;
35 } 36 }
36 37
38 //static
msw 2016/12/12 23:04:35 nit: space after slashes
msw 2016/12/13 22:52:43 Ping
kylix_rd 2016/12/14 17:35:10 Done.
39 gfx::Rect Screen::MoveScreenRectToNearestDisplay(
msw 2016/12/12 23:04:35 Will this be used elsewhere? Might it make sense t
kylix_rd 2016/12/13 14:17:44 I'd originally put this code in that file but this
msw 2016/12/13 22:52:43 I'm also a little surprised that I can't find a si
kylix_rd 2016/12/14 17:35:10 My point was that should this be put elsewhere, it
msw 2016/12/14 18:22:06 Finding code to reuse later isn't too hard. I sear
40 const gfx::Rect& screen_rect) {
41 gfx::Rect display_rect = screen_rect;
42 const display::Display* display =
43 display::FindDisplayNearestPoint(GetScreen()->GetAllDisplays(),
44 display_rect.CenterPoint());
msw 2016/12/14 18:45:11 It might make sense to use the display closest to
45 DCHECK(display);
46 const gfx::Rect work_area = display->work_area();
47 if (!work_area.Contains(display_rect)) {
msw 2016/12/12 23:04:35 q: do we care about making minimal changes to the
kylix_rd 2016/12/13 14:17:44 If the rect were partially visible, it would be so
msw 2016/12/13 22:52:44 Hopefully this positioning fixup is applied before
kylix_rd 2016/12/14 17:35:10 Yes, this is done prior to the dialog is initially
msw 2016/12/14 18:22:06 I'm saying that if a window were larger than the d
msw 2016/12/14 18:45:12 Perhaps the right function for this job is gfx::Re
48 if (display_rect.x() < work_area.x())
49 display_rect.set_x(work_area.x());
50 if (display_rect.right() > work_area.right())
msw 2016/12/13 22:52:44 else if? (or handle rects larger than the work are
kylix_rd 2016/12/14 17:35:10 See above comment.
51 display_rect.set_x(work_area.right() - display_rect.width());
52 if (display_rect.y() < work_area.y())
53 display_rect.set_y(work_area.y());
54 if (display_rect.bottom() > work_area.bottom())
msw 2016/12/13 22:52:44 else if? (or handle rects larger than the work are
55 display_rect.set_y(work_area.bottom() - display_rect.height());
56 }
57 return display_rect;
58 }
59
37 gfx::Rect Screen::ScreenToDIPRectInWindow(gfx::NativeView view, 60 gfx::Rect Screen::ScreenToDIPRectInWindow(gfx::NativeView view,
38 const gfx::Rect& screen_rect) const { 61 const gfx::Rect& screen_rect) const {
39 float scale = GetDisplayNearestWindow(view).device_scale_factor(); 62 float scale = GetDisplayNearestWindow(view).device_scale_factor();
40 return ScaleToEnclosingRect(screen_rect, 1.0f / scale); 63 return ScaleToEnclosingRect(screen_rect, 1.0f / scale);
41 } 64 }
42 65
43 gfx::Rect Screen::DIPToScreenRectInWindow(gfx::NativeView view, 66 gfx::Rect Screen::DIPToScreenRectInWindow(gfx::NativeView view,
44 const gfx::Rect& dip_rect) const { 67 const gfx::Rect& dip_rect) const {
45 float scale = GetDisplayNearestWindow(view).device_scale_factor(); 68 float scale = GetDisplayNearestWindow(view).device_scale_factor();
46 return ScaleToEnclosingRect(dip_rect, scale); 69 return ScaleToEnclosingRect(dip_rect, scale);
47 } 70 }
48 71
49 bool Screen::GetDisplayWithDisplayId(int64_t display_id, 72 bool Screen::GetDisplayWithDisplayId(int64_t display_id,
50 display::Display* display) const { 73 display::Display* display) const {
51 for (const display::Display& display_in_list : GetAllDisplays()) { 74 for (const display::Display& display_in_list : GetAllDisplays()) {
52 if (display_in_list.id() == display_id) { 75 if (display_in_list.id() == display_id) {
53 *display = display_in_list; 76 *display = display_in_list;
54 return true; 77 return true;
55 } 78 }
56 } 79 }
57 return false; 80 return false;
58 } 81 }
59 82
60 } // namespace display 83 } // namespace display
OLDNEW
« no previous file with comments | « ui/display/screen.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698