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

Side by Side Diff: ui/views/mus/screen_mus.cc

Issue 2314203002: Move DisplayList to display; add ScreenBase. (Closed)
Patch Set: Update unit test namespace. Created 4 years, 3 months 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/views/mus/screen_mus.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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 // This has to be before any other includes, else default is picked up. 5 // This has to be before any other includes, else default is picked up.
6 // See base/logging for details on this. 6 // See base/logging for details on this.
7 #define NOTIMPLEMENTED_POLICY 5 7 #define NOTIMPLEMENTED_POLICY 5
8 8
9 #include "ui/views/mus/screen_mus.h" 9 #include "ui/views/mus/screen_mus.h"
10 10
11 #include "services/shell/public/cpp/connection.h" 11 #include "services/shell/public/cpp/connection.h"
12 #include "services/shell/public/cpp/connector.h" 12 #include "services/shell/public/cpp/connector.h"
13 #include "ui/aura/window.h" 13 #include "ui/aura/window.h"
14 #include "ui/display/display_finder.h"
15 #include "ui/display/display_observer.h"
16 #include "ui/views/mus/screen_mus_delegate.h" 14 #include "ui/views/mus/screen_mus_delegate.h"
17 #include "ui/views/mus/window_manager_frame_values.h" 15 #include "ui/views/mus/window_manager_frame_values.h"
18 16
19 namespace mojo { 17 namespace mojo {
20 18
21 template <> 19 template <>
22 struct TypeConverter<views::WindowManagerFrameValues, 20 struct TypeConverter<views::WindowManagerFrameValues,
23 ui::mojom::FrameDecorationValuesPtr> { 21 ui::mojom::FrameDecorationValuesPtr> {
24 static views::WindowManagerFrameValues Convert( 22 static views::WindowManagerFrameValues Convert(
25 const ui::mojom::FrameDecorationValuesPtr& input) { 23 const ui::mojom::FrameDecorationValuesPtr& input) {
26 views::WindowManagerFrameValues result; 24 views::WindowManagerFrameValues result;
27 result.normal_insets = input->normal_client_area_insets; 25 result.normal_insets = input->normal_client_area_insets;
28 result.maximized_insets = input->maximized_client_area_insets; 26 result.maximized_insets = input->maximized_client_area_insets;
29 result.max_title_bar_button_width = input->max_title_bar_button_width; 27 result.max_title_bar_button_width = input->max_title_bar_button_width;
30 return result; 28 return result;
31 } 29 }
32 }; 30 };
33 31
34 } // namespace mojo 32 } // namespace mojo
35 33
36 namespace views { 34 namespace views {
37 35
38 ScreenMus::ScreenMus(ScreenMusDelegate* delegate) 36 ScreenMus::ScreenMus(ScreenMusDelegate* delegate)
39 : delegate_(delegate), 37 : delegate_(delegate),
40 display_manager_observer_binding_(this) { 38 display_manager_observer_binding_(this) {
41 } 39 }
42 40
43 ScreenMus::~ScreenMus() { 41 ScreenMus::~ScreenMus() {}
44 DCHECK_EQ(this, display::Screen::GetScreen());
45 display::Screen::SetScreenInstance(nullptr);
46 }
47 42
48 void ScreenMus::Init(shell::Connector* connector) { 43 void ScreenMus::Init(shell::Connector* connector) {
49 display::Screen::SetScreenInstance(this);
50
51 connector->ConnectToInterface("mojo:ui", &display_manager_); 44 connector->ConnectToInterface("mojo:ui", &display_manager_);
52 45
53 display_manager_->AddObserver( 46 display_manager_->AddObserver(
54 display_manager_observer_binding_.CreateInterfacePtrAndBind()); 47 display_manager_observer_binding_.CreateInterfacePtrAndBind());
55 48
56 // We need the set of displays before we can continue. Wait for it. 49 // We need the set of displays before we can continue. Wait for it.
57 // 50 //
58 // TODO(rockot): Do something better here. This should not have to block tasks 51 // TODO(rockot): Do something better here. This should not have to block tasks
59 // from running on the calling thread. http://crbug.com/594852. 52 // from running on the calling thread. http://crbug.com/594852.
60 bool success = display_manager_observer_binding_.WaitForIncomingMethodCall(); 53 bool success = display_manager_observer_binding_.WaitForIncomingMethodCall();
61 54
62 // The WaitForIncomingMethodCall() should have supplied the set of Displays, 55 // The WaitForIncomingMethodCall() should have supplied the set of Displays,
63 // unless mus is going down, in which case encountered_error() is true, or the 56 // unless mus is going down, in which case encountered_error() is true, or the
64 // call to WaitForIncomingMethodCall() failed. 57 // call to WaitForIncomingMethodCall() failed.
65 if (display_list_.displays().empty()) { 58 if (display_list()->displays().empty()) {
66 DCHECK(display_manager_.encountered_error() || !success); 59 DCHECK(display_manager_.encountered_error() || !success);
67 // In this case we install a default display and assume the process is 60 // In this case we install a default display and assume the process is
68 // going to exit shortly so that the real value doesn't matter. 61 // going to exit shortly so that the real value doesn't matter.
69 display_list_.AddDisplay( 62 display_list()->AddDisplay(
70 display::Display(0xFFFFFFFF, gfx::Rect(0, 0, 801, 802)), 63 display::Display(0xFFFFFFFF, gfx::Rect(0, 0, 801, 802)),
71 DisplayList::Type::PRIMARY); 64 display::DisplayList::Type::PRIMARY);
72 } 65 }
73 } 66 }
74 67
75 void ScreenMus::ProcessDisplayChanged(const display::Display& changed_display,
76 bool is_primary) {
77 if (display_list_.FindDisplayById(changed_display.id()) ==
78 display_list_.displays().end()) {
79 display_list_.AddDisplay(changed_display,
80 is_primary ? DisplayList::Type::PRIMARY
81 : DisplayList::Type::NOT_PRIMARY);
82 return;
83 }
84 display_list_.UpdateDisplay(
85 changed_display,
86 is_primary ? DisplayList::Type::PRIMARY : DisplayList::Type::NOT_PRIMARY);
87 }
88
89 gfx::Point ScreenMus::GetCursorScreenPoint() { 68 gfx::Point ScreenMus::GetCursorScreenPoint() {
90 if (!delegate_) { 69 if (!delegate_) {
91 // TODO(erg): If we need the cursor point in the window manager, we'll need 70 // TODO(erg): If we need the cursor point in the window manager, we'll need
92 // to make |delegate_| required. It only recently changed to be optional. 71 // to make |delegate_| required. It only recently changed to be optional.
93 NOTIMPLEMENTED(); 72 NOTIMPLEMENTED();
94 return gfx::Point(); 73 return gfx::Point();
95 } 74 }
96 75
97 return delegate_->GetCursorScreenPoint(); 76 return delegate_->GetCursorScreenPoint();
98 } 77 }
99 78
100 bool ScreenMus::IsWindowUnderCursor(gfx::NativeWindow window) { 79 bool ScreenMus::IsWindowUnderCursor(gfx::NativeWindow window) {
101 if (!window) 80 return window && window->IsVisible() &&
102 return false; 81 window->GetBoundsInScreen().Contains(GetCursorScreenPoint());
103
104 return window->IsVisible() &&
105 window->GetBoundsInScreen().Contains(GetCursorScreenPoint());
106 }
107
108 gfx::NativeWindow ScreenMus::GetWindowAtScreenPoint(const gfx::Point& point) {
109 NOTIMPLEMENTED();
110 return nullptr;
111 }
112
113 display::Display ScreenMus::GetPrimaryDisplay() const {
114 return *display_list_.GetPrimaryDisplayIterator();
115 }
116
117 display::Display ScreenMus::GetDisplayNearestWindow(
118 gfx::NativeView view) const {
119 NOTIMPLEMENTED();
120 return *display_list_.GetPrimaryDisplayIterator();
121 }
122
123 display::Display ScreenMus::GetDisplayNearestPoint(
124 const gfx::Point& point) const {
125 return *display::FindDisplayNearestPoint(display_list_.displays(), point);
126 }
127
128 int ScreenMus::GetNumDisplays() const {
129 return static_cast<int>(display_list_.displays().size());
130 }
131
132 std::vector<display::Display> ScreenMus::GetAllDisplays() const {
133 return display_list_.displays();
134 }
135
136 display::Display ScreenMus::GetDisplayMatching(
137 const gfx::Rect& match_rect) const {
138 const display::Display* match = display::FindDisplayWithBiggestIntersection(
139 display_list_.displays(), match_rect);
140 return match ? *match : GetPrimaryDisplay();
141 }
142
143 void ScreenMus::AddObserver(display::DisplayObserver* observer) {
144 display_list_.AddObserver(observer);
145 }
146
147 void ScreenMus::RemoveObserver(display::DisplayObserver* observer) {
148 display_list_.RemoveObserver(observer);
149 } 82 }
150 83
151 void ScreenMus::OnDisplays(mojo::Array<ui::mojom::WsDisplayPtr> ws_displays) { 84 void ScreenMus::OnDisplays(mojo::Array<ui::mojom::WsDisplayPtr> ws_displays) {
152 // This should only be called once from Init() before any observers have been 85 // This should only be called once from Init() before any observers have been
153 // added. 86 // added.
154 DCHECK(display_list_.displays().empty()); 87 DCHECK(display_list()->displays().empty());
155 for (size_t i = 0; i < ws_displays.size(); ++i) { 88 for (size_t i = 0; i < ws_displays.size(); ++i) {
156 const bool is_primary = ws_displays[i]->is_primary; 89 const bool is_primary = ws_displays[i]->is_primary;
157 display_list_.AddDisplay(ws_displays[i]->display, 90 display_list()->AddDisplay(ws_displays[i]->display,
158 is_primary ? DisplayList::Type::PRIMARY 91 is_primary
159 : DisplayList::Type::NOT_PRIMARY); 92 ? display::DisplayList::Type::PRIMARY
93 : display::DisplayList::Type::NOT_PRIMARY);
160 if (is_primary) { 94 if (is_primary) {
161 // TODO(sky): Make WindowManagerFrameValues per display. 95 // TODO(sky): Make WindowManagerFrameValues per display.
162 WindowManagerFrameValues frame_values = 96 WindowManagerFrameValues frame_values =
163 ws_displays[i] 97 ws_displays[i]
164 ->frame_decoration_values.To<WindowManagerFrameValues>(); 98 ->frame_decoration_values.To<WindowManagerFrameValues>();
165 WindowManagerFrameValues::SetInstance(frame_values); 99 WindowManagerFrameValues::SetInstance(frame_values);
166 } 100 }
167 } 101 }
168 DCHECK(!display_list_.displays().empty()); 102 DCHECK(!display_list()->displays().empty());
169 } 103 }
170 104
171 void ScreenMus::OnDisplaysChanged( 105 void ScreenMus::OnDisplaysChanged(
172 mojo::Array<ui::mojom::WsDisplayPtr> ws_displays) { 106 mojo::Array<ui::mojom::WsDisplayPtr> ws_displays) {
173 for (size_t i = 0; i < ws_displays.size(); ++i) { 107 for (size_t i = 0; i < ws_displays.size(); ++i) {
174 const bool is_primary = ws_displays[i]->is_primary; 108 const bool is_primary = ws_displays[i]->is_primary;
175 ProcessDisplayChanged(ws_displays[i]->display, is_primary); 109 ProcessDisplayChanged(ws_displays[i]->display, is_primary);
176 if (is_primary) { 110 if (is_primary) {
177 WindowManagerFrameValues frame_values = 111 WindowManagerFrameValues frame_values =
178 ws_displays[i] 112 ws_displays[i]
179 ->frame_decoration_values.To<WindowManagerFrameValues>(); 113 ->frame_decoration_values.To<WindowManagerFrameValues>();
180 WindowManagerFrameValues::SetInstance(frame_values); 114 WindowManagerFrameValues::SetInstance(frame_values);
181 if (delegate_) 115 if (delegate_)
182 delegate_->OnWindowManagerFrameValuesChanged(); 116 delegate_->OnWindowManagerFrameValuesChanged();
183 } 117 }
184 } 118 }
185 } 119 }
186 120
187 void ScreenMus::OnDisplayRemoved(int64_t id) { 121 void ScreenMus::OnDisplayRemoved(int64_t id) {
188 display_list_.RemoveDisplay(id); 122 display_list()->RemoveDisplay(id);
189 } 123 }
190 124
191 } // namespace views 125 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/mus/screen_mus.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698