OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/gfx/compositor/graph/nodes.h" | 5 #include "services/gfx/compositor/graph/nodes.h" |
6 | 6 |
7 #include <ostream> | 7 #include <ostream> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "mojo/services/gfx/composition/cpp/formatting.h" | 10 #include "mojo/services/gfx/composition/cpp/formatting.h" |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 return; | 188 return; |
189 } | 189 } |
190 | 190 |
191 default: { | 191 default: { |
192 NOTREACHED(); | 192 NOTREACHED(); |
193 return; | 193 return; |
194 } | 194 } |
195 } | 195 } |
196 } | 196 } |
197 | 197 |
198 void Node::RecordPicture(const SceneContent* content, | 198 void Node::Paint(const SceneContent* content, |
199 const Snapshot* snapshot, | 199 const Snapshot* snapshot, |
200 SkCanvas* canvas) const { | 200 SkCanvas* canvas) const { |
201 DCHECK(content); | 201 DCHECK(content); |
202 DCHECK(snapshot); | 202 DCHECK(snapshot); |
203 DCHECK(canvas); | 203 DCHECK(canvas); |
204 | 204 |
205 const bool must_save = content_transform_ || content_clip_; | 205 const bool must_save = content_transform_ || content_clip_; |
206 if (must_save) { | 206 if (must_save) { |
207 canvas->save(); | 207 canvas->save(); |
208 if (content_transform_) | 208 if (content_transform_) |
209 canvas->concat(content_transform_->forward()); | 209 canvas->concat(content_transform_->forward()); |
210 if (content_clip_) | 210 if (content_clip_) |
211 canvas->clipRect(content_clip_->To<SkRect>()); | 211 canvas->clipRect(content_clip_->To<SkRect>()); |
212 } | 212 } |
213 | 213 |
214 RecordPictureInner(content, snapshot, canvas); | 214 PaintInner(content, snapshot, canvas); |
215 | 215 |
216 if (must_save) | 216 if (must_save) |
217 canvas->restore(); | 217 canvas->restore(); |
218 } | 218 } |
219 | 219 |
220 void Node::RecordPictureInner(const SceneContent* content, | 220 void Node::PaintInner(const SceneContent* content, |
221 const Snapshot* snapshot, | 221 const Snapshot* snapshot, |
222 SkCanvas* canvas) const { | 222 SkCanvas* canvas) const { |
223 DCHECK(content); | 223 DCHECK(content); |
224 DCHECK(snapshot); | 224 DCHECK(snapshot); |
225 DCHECK(canvas); | 225 DCHECK(canvas); |
226 | 226 |
227 TraverseSnapshottedChildren( | 227 TraverseSnapshottedChildren( |
228 content, snapshot, | 228 content, snapshot, |
229 [this, content, snapshot, canvas](const Node* child_node) -> bool { | 229 [this, content, snapshot, canvas](const Node* child_node) -> bool { |
230 child_node->RecordPicture(content, snapshot, canvas); | 230 child_node->Paint(content, snapshot, canvas); |
231 return true; | 231 return true; |
232 }); | 232 }); |
233 } | 233 } |
234 | 234 |
235 bool Node::HitTest(const SceneContent* content, | 235 bool Node::HitTest(const SceneContent* content, |
236 const Snapshot* snapshot, | 236 const Snapshot* snapshot, |
237 const SkPoint& parent_point, | 237 const SkPoint& parent_point, |
238 const SkMatrix44& global_to_parent_transform, | 238 const SkMatrix44& global_to_parent_transform, |
239 mojo::Array<mojo::gfx::composition::HitPtr>* hits) const { | 239 mojo::Array<mojo::gfx::composition::HitPtr>* hits) const { |
240 DCHECK(content); | 240 DCHECK(content); |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
333 std::move(content_transform), | 333 std::move(content_transform), |
334 content_clip.Pass(), | 334 content_clip.Pass(), |
335 hit_test_behavior.Pass(), | 335 hit_test_behavior.Pass(), |
336 combinator, | 336 combinator, |
337 child_node_ids), | 337 child_node_ids), |
338 content_rect_(content_rect), | 338 content_rect_(content_rect), |
339 color_(color) {} | 339 color_(color) {} |
340 | 340 |
341 RectNode::~RectNode() {} | 341 RectNode::~RectNode() {} |
342 | 342 |
343 void RectNode::RecordPictureInner(const SceneContent* content, | 343 void RectNode::PaintInner(const SceneContent* content, |
344 const Snapshot* snapshot, | 344 const Snapshot* snapshot, |
345 SkCanvas* canvas) const { | 345 SkCanvas* canvas) const { |
346 DCHECK(content); | 346 DCHECK(content); |
347 DCHECK(snapshot); | 347 DCHECK(snapshot); |
348 DCHECK(canvas); | 348 DCHECK(canvas); |
349 | 349 |
350 SkPaint paint; | 350 SkPaint paint; |
351 paint.setColor(MakeSkColor(color_)); | 351 paint.setColor(MakeSkColor(color_)); |
352 canvas->drawRect(content_rect_.To<SkRect>(), paint); | 352 canvas->drawRect(content_rect_.To<SkRect>(), paint); |
353 | 353 |
354 Node::RecordPictureInner(content, snapshot, canvas); | 354 Node::PaintInner(content, snapshot, canvas); |
355 } | 355 } |
356 | 356 |
357 ImageNode::ImageNode( | 357 ImageNode::ImageNode( |
358 uint32_t node_id, | 358 uint32_t node_id, |
359 std::unique_ptr<TransformPair> content_transform, | 359 std::unique_ptr<TransformPair> content_transform, |
360 mojo::RectFPtr content_clip, | 360 mojo::RectFPtr content_clip, |
361 mojo::gfx::composition::HitTestBehaviorPtr hit_test_behavior, | 361 mojo::gfx::composition::HitTestBehaviorPtr hit_test_behavior, |
362 Combinator combinator, | 362 Combinator combinator, |
363 const std::vector<uint32_t>& child_node_ids, | 363 const std::vector<uint32_t>& child_node_ids, |
364 const mojo::RectF& content_rect, | 364 const mojo::RectF& content_rect, |
(...skipping 14 matching lines...) Expand all Loading... |
379 ImageNode::~ImageNode() {} | 379 ImageNode::~ImageNode() {} |
380 | 380 |
381 bool ImageNode::RecordContent(SceneContentBuilder* builder) const { | 381 bool ImageNode::RecordContent(SceneContentBuilder* builder) const { |
382 DCHECK(builder); | 382 DCHECK(builder); |
383 | 383 |
384 return Node::RecordContent(builder) && | 384 return Node::RecordContent(builder) && |
385 builder->RequireResource(image_resource_id_, Resource::Type::kImage, | 385 builder->RequireResource(image_resource_id_, Resource::Type::kImage, |
386 node_id()); | 386 node_id()); |
387 } | 387 } |
388 | 388 |
389 void ImageNode::RecordPictureInner(const SceneContent* content, | 389 void ImageNode::PaintInner(const SceneContent* content, |
390 const Snapshot* snapshot, | 390 const Snapshot* snapshot, |
391 SkCanvas* canvas) const { | 391 SkCanvas* canvas) const { |
392 DCHECK(content); | 392 DCHECK(content); |
393 DCHECK(snapshot); | 393 DCHECK(snapshot); |
394 DCHECK(canvas); | 394 DCHECK(canvas); |
395 | 395 |
396 auto image_resource = static_cast<const ImageResource*>( | 396 auto image_resource = static_cast<const ImageResource*>( |
397 content->GetResource(image_resource_id_, Resource::Type::kImage)); | 397 content->GetResource(image_resource_id_, Resource::Type::kImage)); |
398 DCHECK(image_resource); | 398 DCHECK(image_resource); |
399 | 399 |
400 SkPaint paint; | 400 SkPaint paint; |
401 SetPaintForBlend(&paint, blend_.get()); | 401 SetPaintForBlend(&paint, blend_.get()); |
402 | 402 |
403 canvas->drawImageRect(image_resource->image()->image().get(), | 403 canvas->drawImageRect(image_resource->image()->image().get(), |
404 image_rect_ | 404 image_rect_ |
405 ? image_rect_->To<SkRect>() | 405 ? image_rect_->To<SkRect>() |
406 : SkRect::MakeWH(image_resource->image()->width(), | 406 : SkRect::MakeWH(image_resource->image()->width(), |
407 image_resource->image()->height()), | 407 image_resource->image()->height()), |
408 content_rect_.To<SkRect>(), &paint); | 408 content_rect_.To<SkRect>(), &paint); |
409 | 409 |
410 Node::RecordPictureInner(content, snapshot, canvas); | 410 Node::PaintInner(content, snapshot, canvas); |
411 } | 411 } |
412 | 412 |
413 SceneNode::SceneNode( | 413 SceneNode::SceneNode( |
414 uint32_t node_id, | 414 uint32_t node_id, |
415 std::unique_ptr<TransformPair> content_transform, | 415 std::unique_ptr<TransformPair> content_transform, |
416 mojo::RectFPtr content_clip, | 416 mojo::RectFPtr content_clip, |
417 mojo::gfx::composition::HitTestBehaviorPtr hit_test_behavior, | 417 mojo::gfx::composition::HitTestBehaviorPtr hit_test_behavior, |
418 Combinator combinator, | 418 Combinator combinator, |
419 const std::vector<uint32_t>& child_node_ids, | 419 const std::vector<uint32_t>& child_node_ids, |
420 uint32_t scene_resource_id, | 420 uint32_t scene_resource_id, |
(...skipping 23 matching lines...) Expand all Loading... |
444 DCHECK(content); | 444 DCHECK(content); |
445 DCHECK(builder); | 445 DCHECK(builder); |
446 | 446 |
447 Snapshot::Disposition disposition = | 447 Snapshot::Disposition disposition = |
448 builder->SnapshotReferencedScene(this, content); | 448 builder->SnapshotReferencedScene(this, content); |
449 if (disposition != Snapshot::Disposition::kSuccess) | 449 if (disposition != Snapshot::Disposition::kSuccess) |
450 return disposition; | 450 return disposition; |
451 return Node::RecordSnapshot(content, builder); | 451 return Node::RecordSnapshot(content, builder); |
452 } | 452 } |
453 | 453 |
454 void SceneNode::RecordPictureInner(const SceneContent* content, | 454 void SceneNode::PaintInner(const SceneContent* content, |
455 const Snapshot* snapshot, | 455 const Snapshot* snapshot, |
456 SkCanvas* canvas) const { | 456 SkCanvas* canvas) const { |
457 DCHECK(content); | 457 DCHECK(content); |
458 DCHECK(snapshot); | 458 DCHECK(snapshot); |
459 DCHECK(canvas); | 459 DCHECK(canvas); |
460 | 460 |
461 const SceneContent* resolved_content = | 461 const SceneContent* resolved_content = |
462 snapshot->GetResolvedSceneContent(this); | 462 snapshot->GetResolvedSceneContent(this); |
463 DCHECK(resolved_content); | 463 DCHECK(resolved_content); |
464 resolved_content->RecordPicture(snapshot, canvas); | 464 resolved_content->Paint(snapshot, canvas); |
465 | 465 |
466 Node::RecordPictureInner(content, snapshot, canvas); | 466 Node::PaintInner(content, snapshot, canvas); |
467 } | 467 } |
468 | 468 |
469 bool SceneNode::HitTestInner( | 469 bool SceneNode::HitTestInner( |
470 const SceneContent* content, | 470 const SceneContent* content, |
471 const Snapshot* snapshot, | 471 const Snapshot* snapshot, |
472 const SkPoint& local_point, | 472 const SkPoint& local_point, |
473 const SkMatrix44& global_to_local_transform, | 473 const SkMatrix44& global_to_local_transform, |
474 mojo::Array<mojo::gfx::composition::HitPtr>* hits) const { | 474 mojo::Array<mojo::gfx::composition::HitPtr>* hits) const { |
475 DCHECK(content); | 475 DCHECK(content); |
476 DCHECK(snapshot); | 476 DCHECK(snapshot); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
508 std::move(content_transform), | 508 std::move(content_transform), |
509 content_clip.Pass(), | 509 content_clip.Pass(), |
510 hit_test_behavior.Pass(), | 510 hit_test_behavior.Pass(), |
511 combinator, | 511 combinator, |
512 child_node_ids), | 512 child_node_ids), |
513 layer_rect_(layer_rect), | 513 layer_rect_(layer_rect), |
514 blend_(blend.Pass()) {} | 514 blend_(blend.Pass()) {} |
515 | 515 |
516 LayerNode::~LayerNode() {} | 516 LayerNode::~LayerNode() {} |
517 | 517 |
518 void LayerNode::RecordPictureInner(const SceneContent* content, | 518 void LayerNode::PaintInner(const SceneContent* content, |
519 const Snapshot* snapshot, | 519 const Snapshot* snapshot, |
520 SkCanvas* canvas) const { | 520 SkCanvas* canvas) const { |
521 DCHECK(content); | 521 DCHECK(content); |
522 DCHECK(snapshot); | 522 DCHECK(snapshot); |
523 DCHECK(canvas); | 523 DCHECK(canvas); |
524 | 524 |
525 SkPaint paint; | 525 SkPaint paint; |
526 SetPaintForBlend(&paint, blend_.get()); | 526 SetPaintForBlend(&paint, blend_.get()); |
527 | 527 |
528 canvas->saveLayer(layer_rect_.To<SkRect>(), &paint); | 528 canvas->saveLayer(layer_rect_.To<SkRect>(), &paint); |
529 Node::RecordPictureInner(content, snapshot, canvas); | 529 Node::PaintInner(content, snapshot, canvas); |
530 canvas->restore(); | 530 canvas->restore(); |
531 } | 531 } |
532 | 532 |
533 } // namespace compositor | 533 } // namespace compositor |
OLD | NEW |