OLD | NEW |
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 22 matching lines...) Expand all Loading... |
33 | 33 |
34 // Milliseconds between frames. | 34 // Milliseconds between frames. |
35 const int64_t kFrameDelay = 33; | 35 const int64_t kFrameDelay = 33; |
36 | 36 |
37 // Size of square in pixels to draw. | 37 // Size of square in pixels to draw. |
38 const int kSquareSize = 300; | 38 const int kSquareSize = 300; |
39 | 39 |
40 const SkColor kBgColor = SK_ColorRED; | 40 const SkColor kBgColor = SK_ColorRED; |
41 const SkColor kFgColor = SK_ColorYELLOW; | 41 const SkColor kFgColor = SK_ColorYELLOW; |
42 | 42 |
43 void DrawSquare(const gfx::Rect& bounds, double angle, SkCanvas* canvas) { | 43 void DrawSquare(const gfx::Rect& bounds, |
| 44 double angle, |
| 45 SkCanvas* canvas, |
| 46 int size) { |
44 // Create SkRect to draw centered inside the bounds. | 47 // Create SkRect to draw centered inside the bounds. |
45 gfx::Point top_left = bounds.CenterPoint(); | 48 gfx::Point top_left = bounds.CenterPoint(); |
46 top_left.Offset(-kSquareSize / 2, -kSquareSize / 2); | 49 top_left.Offset(-size / 2, -size / 2); |
47 SkRect rect = | 50 SkRect rect = SkRect::MakeXYWH(top_left.x(), top_left.y(), size, size); |
48 SkRect::MakeXYWH(top_left.x(), top_left.y(), kSquareSize, kSquareSize); | |
49 | 51 |
50 // Set SkPaint to fill solid color. | 52 // Set SkPaint to fill solid color. |
51 SkPaint paint; | 53 SkPaint paint; |
52 paint.setStyle(SkPaint::kFill_Style); | 54 paint.setStyle(SkPaint::kFill_Style); |
53 paint.setColor(kFgColor); | 55 paint.setColor(kFgColor); |
54 | 56 |
55 // Rotate the canvas. | 57 // Rotate the canvas. |
56 const gfx::Size canvas_size = bounds.size(); | 58 const gfx::Size canvas_size = bounds.size(); |
57 if (angle != 0.0) { | 59 if (angle != 0.0) { |
58 canvas->translate(SkFloatToScalar(canvas_size.width() * 0.5f), | 60 canvas->translate(SkFloatToScalar(canvas_size.width() * 0.5f), |
59 SkFloatToScalar(canvas_size.height() * 0.5f)); | 61 SkFloatToScalar(canvas_size.height() * 0.5f)); |
60 canvas->rotate(angle); | 62 canvas->rotate(angle); |
61 canvas->translate(-SkFloatToScalar(canvas_size.width() * 0.5f), | 63 canvas->translate(-SkFloatToScalar(canvas_size.width() * 0.5f), |
62 -SkFloatToScalar(canvas_size.height() * 0.5f)); | 64 -SkFloatToScalar(canvas_size.height() * 0.5f)); |
63 } | 65 } |
64 | 66 |
65 canvas->drawRect(rect, paint); | 67 canvas->drawRect(rect, paint); |
66 } | 68 } |
67 | 69 |
68 } // namespace | 70 } // namespace |
69 | 71 |
70 class MusDemo::WindowTreeData { | 72 class MusDemo::WindowTreeData { |
71 public: | 73 public: |
72 explicit WindowTreeData( | 74 explicit WindowTreeData( |
73 std::unique_ptr<aura::WindowTreeHostMus> window_tree_host) { | 75 std::unique_ptr<aura::WindowTreeHostMus> window_tree_host, |
| 76 int square_size) |
| 77 : square_size_(square_size) { |
74 Init(std::move(window_tree_host)); | 78 Init(std::move(window_tree_host)); |
75 } | 79 } |
76 | 80 |
77 private: | 81 private: |
78 // Initializes the window tree host and start drawing frames. | 82 // Initializes the window tree host and start drawing frames. |
79 void Init(std::unique_ptr<aura::WindowTreeHostMus> window_tree_host); | 83 void Init(std::unique_ptr<aura::WindowTreeHostMus> window_tree_host); |
80 | 84 |
81 // Draws one frame, incrementing the rotation angle. | 85 // Draws one frame, incrementing the rotation angle. |
82 void DrawFrame(); | 86 void DrawFrame(); |
83 | 87 |
84 // Helper function to retrieve the window to which we draw the bitmap. | 88 // Helper function to retrieve the window to which we draw the bitmap. |
85 aura::Window* bitmap_window() { | 89 aura::Window* bitmap_window() { |
86 DCHECK(!window_tree_host_->window()->children().empty()); | 90 DCHECK(!window_tree_host_->window()->children().empty()); |
87 return window_tree_host_->window()->children()[0]; | 91 return window_tree_host_->window()->children()[0]; |
88 } | 92 } |
89 | 93 |
90 // The Window tree host corresponding to this data. | 94 // The Window tree host corresponding to this data. |
91 std::unique_ptr<aura::WindowTreeHostMus> window_tree_host_; | 95 std::unique_ptr<aura::WindowTreeHostMus> window_tree_host_; |
92 | 96 |
93 // Destroys itself when the window gets destroyed. | 97 // Destroys itself when the window gets destroyed. |
94 aura_extra::ImageWindowDelegate* window_delegate_ = nullptr; | 98 aura_extra::ImageWindowDelegate* window_delegate_ = nullptr; |
95 | 99 |
96 // Timer for calling DrawFrame(). | 100 // Timer for calling DrawFrame(). |
97 base::RepeatingTimer timer_; | 101 base::RepeatingTimer timer_; |
98 | 102 |
99 // Current rotation angle for drawing. | 103 // Current rotation angle for drawing. |
100 double angle_ = 0.0; | 104 double angle_ = 0.0; |
101 | 105 |
| 106 // Size in pixels of the square to draw. |
| 107 const int square_size_; |
| 108 |
102 DISALLOW_COPY_AND_ASSIGN(WindowTreeData); | 109 DISALLOW_COPY_AND_ASSIGN(WindowTreeData); |
103 }; | 110 }; |
104 | 111 |
105 void MusDemo::WindowTreeData::Init( | 112 void MusDemo::WindowTreeData::Init( |
106 std::unique_ptr<aura::WindowTreeHostMus> window_tree_host) { | 113 std::unique_ptr<aura::WindowTreeHostMus> window_tree_host) { |
107 window_tree_host->InitHost(); | 114 window_tree_host->InitHost(); |
108 window_tree_host->Show(); | 115 window_tree_host->Show(); |
109 // Take ownership of the WTH. | 116 // Take ownership of the WTH. |
110 window_tree_host_ = std::move(window_tree_host); | 117 window_tree_host_ = std::move(window_tree_host); |
111 | 118 |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
208 | 215 |
209 void MusDemo::OnWmWillCreateDisplay(const display::Display& display) { | 216 void MusDemo::OnWmWillCreateDisplay(const display::Display& display) { |
210 screen_->display_list().AddDisplay(display, | 217 screen_->display_list().AddDisplay(display, |
211 display::DisplayList::Type::PRIMARY); | 218 display::DisplayList::Type::PRIMARY); |
212 } | 219 } |
213 | 220 |
214 void MusDemo::OnWmNewDisplay( | 221 void MusDemo::OnWmNewDisplay( |
215 std::unique_ptr<aura::WindowTreeHostMus> window_tree_host, | 222 std::unique_ptr<aura::WindowTreeHostMus> window_tree_host, |
216 const display::Display& display) { | 223 const display::Display& display) { |
217 DCHECK(!window_tree_data_); // Only support one display. | 224 DCHECK(!window_tree_data_); // Only support one display. |
218 window_tree_data_ = | 225 window_tree_data_ = base::MakeUnique<WindowTreeData>( |
219 base::MakeUnique<WindowTreeData>(std::move(window_tree_host)); | 226 std::move(window_tree_host), kSquareSize); |
220 } | 227 } |
221 | 228 |
222 void MusDemo::OnWmDisplayRemoved(aura::WindowTreeHostMus* window_tree_host) { | 229 void MusDemo::OnWmDisplayRemoved(aura::WindowTreeHostMus* window_tree_host) { |
223 window_tree_data_.reset(); | 230 window_tree_data_.reset(); |
224 } | 231 } |
225 | 232 |
226 void MusDemo::OnWmDisplayModified(const display::Display& display) {} | 233 void MusDemo::OnWmDisplayModified(const display::Display& display) {} |
227 | 234 |
228 mojom::EventResult MusDemo::OnAccelerator(uint32_t id, const Event& event) { | 235 mojom::EventResult MusDemo::OnAccelerator(uint32_t id, const Event& event) { |
229 return mojom::EventResult::UNHANDLED; | 236 return mojom::EventResult::UNHANDLED; |
(...skipping 27 matching lines...) Expand all Loading... |
257 // Allocate a bitmap of correct size. | 264 // Allocate a bitmap of correct size. |
258 SkBitmap bitmap; | 265 SkBitmap bitmap; |
259 SkImageInfo image_info = SkImageInfo::MakeN32(bounds.width(), bounds.height(), | 266 SkImageInfo image_info = SkImageInfo::MakeN32(bounds.width(), bounds.height(), |
260 kPremul_SkAlphaType); | 267 kPremul_SkAlphaType); |
261 bitmap.allocPixels(image_info); | 268 bitmap.allocPixels(image_info); |
262 | 269 |
263 // Draw the rotated square on background in bitmap. | 270 // Draw the rotated square on background in bitmap. |
264 SkCanvas canvas(bitmap); | 271 SkCanvas canvas(bitmap); |
265 canvas.clear(kBgColor); | 272 canvas.clear(kBgColor); |
266 // TODO(kylechar): Add GL drawing instead of software rasterization in future. | 273 // TODO(kylechar): Add GL drawing instead of software rasterization in future. |
267 DrawSquare(bounds, angle_, &canvas); | 274 DrawSquare(bounds, angle_, &canvas, square_size_); |
268 canvas.flush(); | 275 canvas.flush(); |
269 | 276 |
270 gfx::ImageSkiaRep image_skia_rep(bitmap, 1); | 277 gfx::ImageSkiaRep image_skia_rep(bitmap, 1); |
271 gfx::ImageSkia image_skia(image_skia_rep); | 278 gfx::ImageSkia image_skia(image_skia_rep); |
272 gfx::Image image(image_skia); | 279 gfx::Image image(image_skia); |
273 | 280 |
274 window_delegate_->SetImage(image); | 281 window_delegate_->SetImage(image); |
275 bitmap_window()->SchedulePaintInRect(gfx::Rect(bounds.size())); | 282 bitmap_window()->SchedulePaintInRect(gfx::Rect(bounds.size())); |
276 } | 283 } |
277 | 284 |
278 } // namespace demo | 285 } // namespace demo |
279 } // namespace aura | 286 } // namespace aura |
OLD | NEW |