OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "services/gfx/compositor/render/render_layer.h" | |
6 | |
7 #include "base/logging.h" | |
8 #include "third_party/skia/include/core/SkCanvas.h" | |
9 #include "third_party/skia/include/core/SkPicture.h" | |
10 #include "third_party/skia/include/core/SkPictureRecorder.h" | |
11 | |
12 namespace compositor { | |
13 | |
14 RenderLayer::RenderLayer(const skia::RefPtr<SkPicture>& picture) | |
15 : picture_(picture) {} | |
16 | |
17 RenderLayer::~RenderLayer() {} | |
18 | |
19 RenderLayerBuilder::RenderLayerBuilder() : RenderLayerBuilder(nullptr) {} | |
20 | |
21 RenderLayerBuilder::RenderLayerBuilder(const SkRect* cull_rect) { | |
22 recorder_.beginRecording(cull_rect ? *cull_rect : SkRect::MakeLargest()); | |
23 canvas_ = recorder_.getRecordingCanvas(); | |
24 } | |
25 | |
26 RenderLayerBuilder::~RenderLayerBuilder() {} | |
27 | |
28 void RenderLayerBuilder::PushScene(uint32_t scene_token, uint32_t version) { | |
29 DCHECK(canvas_); | |
30 // TODO: remember scene information for hit testing | |
31 } | |
32 | |
33 void RenderLayerBuilder::PopScene() { | |
34 DCHECK(canvas_); | |
35 } | |
36 | |
37 void RenderLayerBuilder::PushNode(uint32_t node_id, uint32_t hit_id) { | |
38 DCHECK(canvas_); | |
39 // TODO: remember scene information for hit testing | |
40 // TODO: optimize save() / restore() commands | |
41 canvas_->save(); | |
42 } | |
43 | |
44 void RenderLayerBuilder::PopNode() { | |
45 DCHECK(canvas_); | |
46 // TODO: optimize save() / restore() commands | |
47 canvas_->restore(); | |
48 } | |
49 | |
50 void RenderLayerBuilder::ApplyTransform(const SkMatrix& content_transform) { | |
51 DCHECK(canvas_); | |
52 canvas_->concat(content_transform); | |
53 } | |
54 | |
55 void RenderLayerBuilder::ApplyClip(const SkRect& content_clip) { | |
56 DCHECK(canvas_); | |
57 canvas_->clipRect(content_clip); | |
58 } | |
59 | |
60 void RenderLayerBuilder::DrawRect(const SkRect& content_rect, | |
61 const SkPaint& paint) { | |
62 DCHECK(canvas_); | |
63 canvas_->drawRect(content_rect, paint); | |
64 } | |
65 | |
66 void RenderLayerBuilder::DrawImage(const std::shared_ptr<RenderImage>& image, | |
67 const SkRect& content_rect, | |
68 const SkRect& image_rect, | |
69 const SkPaint& paint) { | |
70 DCHECK(image); | |
71 DCHECK(canvas_); | |
72 canvas_->drawImageRect(image->image().get(), image_rect, content_rect, | |
73 &paint); | |
74 } | |
75 | |
76 void RenderLayerBuilder::DrawLayer(const std::shared_ptr<RenderLayer>& layer) { | |
77 DCHECK(canvas_); | |
78 canvas_->drawPicture(layer->picture().get()); | |
79 } | |
80 | |
81 void RenderLayerBuilder::DrawSavedLayer( | |
82 const std::shared_ptr<RenderLayer>& layer, | |
83 const SkRect& content_rect, | |
84 const SkPaint& paint) { | |
85 DCHECK(layer); | |
86 DCHECK(canvas_); | |
87 canvas_->saveLayer(content_rect, &paint); | |
88 canvas_->drawPicture(layer->picture().get()); | |
89 canvas_->restore(); | |
90 } | |
91 | |
92 std::shared_ptr<RenderLayer> RenderLayerBuilder::Build() { | |
93 DCHECK(canvas_); | |
94 canvas_ = nullptr; | |
95 return std::make_shared<RenderLayer>( | |
96 skia::AdoptRef(recorder_.endRecordingAsPicture())); | |
97 } | |
98 | |
99 } // namespace compositor | |
OLD | NEW |