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

Side by Side Diff: services/ui/demo/mus_demo.cc

Issue 2679213003: Refactor Mus demo to prepare support for multiple external windows (Closed)
Patch Set: Use a class instead of a struct to improve data separation. Created 3 years, 10 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 | « services/ui/demo/mus_demo.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 #include "services/ui/demo/mus_demo.h" 5 #include "services/ui/demo/mus_demo.h"
6 6
7 #include "base/memory/ptr_util.h" 7 #include "base/memory/ptr_util.h"
8 #include "base/time/time.h" 8 #include "base/time/time.h"
9 #include "services/service_manager/public/cpp/connector.h" 9 #include "services/service_manager/public/cpp/connector.h"
10 #include "services/service_manager/public/cpp/service_context.h" 10 #include "services/service_manager/public/cpp/service_context.h"
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 canvas->rotate(angle); 60 canvas->rotate(angle);
61 canvas->translate(-SkFloatToScalar(canvas_size.width() * 0.5f), 61 canvas->translate(-SkFloatToScalar(canvas_size.width() * 0.5f),
62 -SkFloatToScalar(canvas_size.height() * 0.5f)); 62 -SkFloatToScalar(canvas_size.height() * 0.5f));
63 } 63 }
64 64
65 canvas->drawRect(rect, paint); 65 canvas->drawRect(rect, paint);
66 } 66 }
67 67
68 } // namespace 68 } // namespace
69 69
70 class MusDemo::WindowTreeData {
71 public:
72 explicit WindowTreeData(
73 std::unique_ptr<aura::WindowTreeHostMus> window_tree_host);
74 ~WindowTreeData();
75
76 private:
77 // Draws one frame, incrementing the rotation angle.
78 void DrawFrame();
79
80 // The Window tree host corresponding to this data.
81 std::unique_ptr<aura::WindowTreeHostMus> window_tree_host_;
82
83 // Root window of the window tree host.
84 aura::Window* root_window_ = nullptr;
sky 2017/02/09 20:53:16 Why do you need to cache this? window_tree_host_->
85
86 // Window to which we draw the bitmap.
87 std::unique_ptr<aura::Window> bitmap_window_;
sky 2017/02/09 20:53:16 Windows are generally owned by their parent. Are y
88
89 // Destroys itself when the window gets destroyed.
90 aura_extra::ImageWindowDelegate* window_delegate_ = nullptr;
91
92 // Timer for calling DrawFrame().
93 base::RepeatingTimer timer_;
94
95 // Current rotation angle for drawing.
96 double angle_ = 0.0;
97
98 // Last time a frame was drawn.
99 base::TimeTicks last_draw_frame_time_;
100 };
sky 2017/02/09 20:53:16 DISALLOW...
101
70 MusDemo::MusDemo() {} 102 MusDemo::MusDemo() {}
71 103
72 MusDemo::~MusDemo() { 104 MusDemo::~MusDemo() {
73 display::Screen::SetScreenInstance(nullptr); 105 display::Screen::SetScreenInstance(nullptr);
74 } 106 }
75 107
76 void MusDemo::OnStart() { 108 void MusDemo::OnStart() {
77 screen_ = base::MakeUnique<display::ScreenBase>(); 109 screen_ = base::MakeUnique<display::ScreenBase>();
78 display::Screen::SetScreenInstance(screen_.get()); 110 display::Screen::SetScreenInstance(screen_.get());
79 111
(...skipping 23 matching lines...) Expand all
103 void MusDemo::OnUnembed(aura::Window* root) { 135 void MusDemo::OnUnembed(aura::Window* root) {
104 NOTREACHED(); 136 NOTREACHED();
105 } 137 }
106 138
107 void MusDemo::OnEmbedRootDestroyed(aura::WindowTreeHostMus* window_tree_host) { 139 void MusDemo::OnEmbedRootDestroyed(aura::WindowTreeHostMus* window_tree_host) {
108 // Not called for the WindowManager. 140 // Not called for the WindowManager.
109 NOTREACHED(); 141 NOTREACHED();
110 } 142 }
111 143
112 void MusDemo::OnLostConnection(aura::WindowTreeClient* client) { 144 void MusDemo::OnLostConnection(aura::WindowTreeClient* client) {
113 root_window_ = nullptr;
114 window_tree_client_.reset(); 145 window_tree_client_.reset();
115 timer_.Stop(); 146 window_tree_data_.reset();
116 } 147 }
117 148
118 void MusDemo::OnPointerEventObserved(const PointerEvent& event, 149 void MusDemo::OnPointerEventObserved(const PointerEvent& event,
119 aura::Window* target) {} 150 aura::Window* target) {}
120 151
121 aura::PropertyConverter* MusDemo::GetPropertyConverter() { 152 aura::PropertyConverter* MusDemo::GetPropertyConverter() {
122 return property_converter_.get(); 153 return property_converter_.get();
123 } 154 }
124 155
125 void MusDemo::SetWindowManagerClient(aura::WindowManagerClient* client) {} 156 void MusDemo::SetWindowManagerClient(aura::WindowManagerClient* client) {}
(...skipping 24 matching lines...) Expand all
150 } 181 }
151 182
152 void MusDemo::OnWmWillCreateDisplay(const display::Display& display) { 183 void MusDemo::OnWmWillCreateDisplay(const display::Display& display) {
153 screen_->display_list().AddDisplay(display, 184 screen_->display_list().AddDisplay(display,
154 display::DisplayList::Type::PRIMARY); 185 display::DisplayList::Type::PRIMARY);
155 } 186 }
156 187
157 void MusDemo::OnWmNewDisplay( 188 void MusDemo::OnWmNewDisplay(
158 std::unique_ptr<aura::WindowTreeHostMus> window_tree_host, 189 std::unique_ptr<aura::WindowTreeHostMus> window_tree_host,
159 const display::Display& display) { 190 const display::Display& display) {
160 DCHECK(!root_window_); // Only support one display. 191 DCHECK(!window_tree_data_); // Only support one display.
192 window_tree_data_ =
193 base::MakeUnique<WindowTreeData>(std::move(window_tree_host));
194 }
161 195
196 MusDemo::WindowTreeData::WindowTreeData(
197 std::unique_ptr<aura::WindowTreeHostMus> window_tree_host) {
162 window_tree_host->InitHost(); 198 window_tree_host->InitHost();
163 window_tree_host->Show(); 199 window_tree_host->Show();
164 root_window_ = window_tree_host->window(); 200 root_window_ = window_tree_host->window();
165 // Take ownership of the WTH. 201 // Take ownership of the WTH.
166 window_tree_host_ = std::move(window_tree_host); 202 window_tree_host_ = std::move(window_tree_host);
167 203
168 // Initialize the window for the bitmap. 204 // Initialize the window for the bitmap.
169 window_delegate_ = new aura_extra::ImageWindowDelegate(); 205 window_delegate_ = new aura_extra::ImageWindowDelegate();
170 bitmap_window_ = base::MakeUnique<aura::Window>(window_delegate_); 206 bitmap_window_ = base::MakeUnique<aura::Window>(window_delegate_);
171 bitmap_window_->Init(LAYER_TEXTURED); 207 bitmap_window_->Init(LAYER_TEXTURED);
172 bitmap_window_->SetBounds(root_window_->bounds()); 208 bitmap_window_->SetBounds(root_window_->bounds());
173 bitmap_window_->Show(); 209 bitmap_window_->Show();
174 bitmap_window_->SetName("Bitmap"); 210 bitmap_window_->SetName("Bitmap");
175 211
176 root_window_->AddChild(bitmap_window_.get()); 212 root_window_->AddChild(bitmap_window_.get());
177 213
178 // Draw initial frame and start the timer to regularly draw frames. 214 // Draw initial frame and start the timer to regularly draw frames.
179 DrawFrame(); 215 DrawFrame();
180 timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(kFrameDelay), 216 timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(kFrameDelay),
181 base::Bind(&MusDemo::DrawFrame, base::Unretained(this))); 217 base::Bind(&WindowTreeData::DrawFrame, base::Unretained(this)));
182 } 218 }
183 219
184 void MusDemo::OnWmDisplayRemoved(aura::WindowTreeHostMus* window_tree_host) { 220 void MusDemo::OnWmDisplayRemoved(aura::WindowTreeHostMus* window_tree_host) {
221 window_tree_data_.reset();
222 }
223
224 MusDemo::WindowTreeData::~WindowTreeData() {
185 timer_.Stop(); 225 timer_.Stop();
186 root_window_->RemoveChild(bitmap_window_.get()); 226 root_window_->RemoveChild(bitmap_window_.get());
187 bitmap_window_.reset(); 227 bitmap_window_.reset();
188 } 228 }
189 229
190 void MusDemo::OnWmDisplayModified(const display::Display& display) {} 230 void MusDemo::OnWmDisplayModified(const display::Display& display) {}
191 231
192 mojom::EventResult MusDemo::OnAccelerator(uint32_t id, const Event& event) { 232 mojom::EventResult MusDemo::OnAccelerator(uint32_t id, const Event& event) {
193 return mojom::EventResult::UNHANDLED; 233 return mojom::EventResult::UNHANDLED;
194 } 234 }
195 235
196 void MusDemo::OnWmPerformMoveLoop(aura::Window* window, 236 void MusDemo::OnWmPerformMoveLoop(aura::Window* window,
197 mojom::MoveLoopSource source, 237 mojom::MoveLoopSource source,
198 const gfx::Point& cursor_location, 238 const gfx::Point& cursor_location,
199 const base::Callback<void(bool)>& on_done) { 239 const base::Callback<void(bool)>& on_done) {
200 // Don't care 240 // Don't care
201 } 241 }
202 242
203 void MusDemo::OnWmCancelMoveLoop(aura::Window* window) {} 243 void MusDemo::OnWmCancelMoveLoop(aura::Window* window) {}
204 244
205 void MusDemo::OnWmSetClientArea( 245 void MusDemo::OnWmSetClientArea(
206 aura::Window* window, 246 aura::Window* window,
207 const gfx::Insets& insets, 247 const gfx::Insets& insets,
208 const std::vector<gfx::Rect>& additional_client_areas) {} 248 const std::vector<gfx::Rect>& additional_client_areas) {}
209 249
210 bool MusDemo::IsWindowActive(aura::Window* window) { return false; } 250 bool MusDemo::IsWindowActive(aura::Window* window) { return false; }
211 251
212 void MusDemo::OnWmDeactivateWindow(aura::Window* window) {} 252 void MusDemo::OnWmDeactivateWindow(aura::Window* window) {}
213 253
214 void MusDemo::DrawFrame() { 254 void MusDemo::WindowTreeData::DrawFrame() {
215 base::TimeTicks now = base::TimeTicks::Now(); 255 base::TimeTicks now = base::TimeTicks::Now();
216 256
217 VLOG(1) << (now - last_draw_frame_time_).InMilliseconds() 257 VLOG(1) << (now - last_draw_frame_time_).InMilliseconds()
218 << "ms since the last frame was drawn."; 258 << "ms since the last frame was drawn.";
219 last_draw_frame_time_ = now; 259 last_draw_frame_time_ = now;
220 260
221 angle_ += 2.0; 261 angle_ += 2.0;
222 if (angle_ >= 360.0) 262 if (angle_ >= 360.0)
223 angle_ = 0.0; 263 angle_ = 0.0;
224 264
(...skipping 15 matching lines...) Expand all
240 gfx::ImageSkiaRep image_skia_rep(bitmap, 1); 280 gfx::ImageSkiaRep image_skia_rep(bitmap, 1);
241 gfx::ImageSkia image_skia(image_skia_rep); 281 gfx::ImageSkia image_skia(image_skia_rep);
242 gfx::Image image(image_skia); 282 gfx::Image image(image_skia);
243 283
244 window_delegate_->SetImage(image); 284 window_delegate_->SetImage(image);
245 bitmap_window_->SchedulePaintInRect(bitmap_window_->bounds()); 285 bitmap_window_->SchedulePaintInRect(bitmap_window_->bounds());
246 } 286 }
247 287
248 } // namespace demo 288 } // namespace demo
249 } // namespace aura 289 } // namespace aura
OLDNEW
« no previous file with comments | « services/ui/demo/mus_demo.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698