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

Side by Side Diff: ui/gfx/compositor/layer.cc

Issue 7845033: Rework View Layer Draw() to use the Layer::DrawTree() method and the LayerDelegate. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "ui/gfx/compositor/layer.h" 5 #include "ui/gfx/compositor/layer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/scoped_ptr.h" 10 #include "base/scoped_ptr.h"
11 #include "ui/gfx/canvas_skia.h" 11 #include "ui/gfx/canvas_skia.h"
12 #include "ui/gfx/point3.h" 12 #include "ui/gfx/point3.h"
13 13
14 namespace ui { 14 namespace ui {
15 15
16 Layer::Layer(Compositor* compositor) 16 Layer::Layer(Compositor* compositor)
17 : compositor_(compositor), 17 : compositor_(compositor),
18 texture_(compositor->CreateTexture()), 18 texture_(compositor->CreateTexture()),
19 parent_(NULL), 19 parent_(NULL),
20 fills_bounds_opaquely_(false), 20 fills_bounds_opaquely_(false),
21 delegate_(NULL) { 21 delegate_(NULL) {
sky 2011/09/13 17:47:06 visible_(true)
22 } 22 }
23 23
24 Layer::~Layer() { 24 Layer::~Layer() {
25 if (parent_) 25 if (parent_)
26 parent_->Remove(this); 26 parent_->Remove(this);
27 for (size_t i = 0; i < children_.size(); ++i) 27 for (size_t i = 0; i < children_.size(); ++i)
28 children_[i]->parent_ = NULL; 28 children_[i]->parent_ = NULL;
29 } 29 }
30 30
31 void Layer::Add(Layer* child) { 31 void Layer::Add(Layer* child) {
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 texture_->SetCanvas(canvas, origin, bounds_.size()); 111 texture_->SetCanvas(canvas, origin, bounds_.size());
112 invalid_rect_ = gfx::Rect(); 112 invalid_rect_ = gfx::Rect();
113 } 113 }
114 114
115 void Layer::SchedulePaint(const gfx::Rect& invalid_rect) { 115 void Layer::SchedulePaint(const gfx::Rect& invalid_rect) {
116 invalid_rect_ = invalid_rect_.Union(invalid_rect); 116 invalid_rect_ = invalid_rect_.Union(invalid_rect);
117 compositor_->SchedulePaint(); 117 compositor_->SchedulePaint();
118 } 118 }
119 119
120 void Layer::Draw() { 120 void Layer::Draw() {
121 if (!visible_)
122 return;
123
121 UpdateLayerCanvas(); 124 UpdateLayerCanvas();
122 125
123 ui::TextureDrawParams texture_draw_params; 126 ui::TextureDrawParams texture_draw_params;
124 for (Layer* layer = this; layer; layer = layer->parent_) { 127 for (Layer* layer = this; layer; layer = layer->parent_) {
125 texture_draw_params.transform.ConcatTransform(layer->transform_); 128 texture_draw_params.transform.ConcatTransform(layer->transform_);
126 texture_draw_params.transform.ConcatTranslate( 129 texture_draw_params.transform.ConcatTranslate(
127 static_cast<float>(layer->bounds_.x()), 130 static_cast<float>(layer->bounds_.x()),
128 static_cast<float>(layer->bounds_.y())); 131 static_cast<float>(layer->bounds_.y()));
129 } 132 }
130 133
(...skipping 23 matching lines...) Expand all
154 hole_rect_.height())); 157 hole_rect_.height()));
155 158
156 // bottom 159 // bottom
157 DrawRegion(texture_draw_params, gfx::Rect( 160 DrawRegion(texture_draw_params, gfx::Rect(
158 0, 161 0,
159 hole_rect_.bottom(), 162 hole_rect_.bottom(),
160 bounds_.width(), 163 bounds_.width(),
161 bounds_.height() - hole_rect_.bottom())); 164 bounds_.height() - hole_rect_.bottom()));
162 } 165 }
163 166
167 void Layer::DrawTree() {
168 Draw();
169 for (size_t i = 0; i < children_.size(); ++i)
sky 2011/09/13 17:47:06 I don't think you want to paint children if this i
170 children_.at(i)->DrawTree();
171 }
172
164 void Layer::DrawRegion(const ui::TextureDrawParams& params, 173 void Layer::DrawRegion(const ui::TextureDrawParams& params,
165 const gfx::Rect& region_to_draw) { 174 const gfx::Rect& region_to_draw) {
166 if (!region_to_draw.IsEmpty()) 175 if (!region_to_draw.IsEmpty())
167 texture_->Draw(params, region_to_draw); 176 texture_->Draw(params, region_to_draw);
168 } 177 }
169 178
170 void Layer::UpdateLayerCanvas() { 179 void Layer::UpdateLayerCanvas() {
171 // If we have no delegate, that means that whoever constructed the Layer is 180 // If we have no delegate, that means that whoever constructed the Layer is
172 // setting its canvas directly with SetCanvas(). 181 // setting its canvas directly with SetCanvas().
173 if (!delegate_) 182 if (!delegate_)
174 return; 183 return;
175 gfx::Rect local_bounds = gfx::Rect(gfx::Point(), bounds_.size()); 184 gfx::Rect local_bounds = gfx::Rect(gfx::Point(), bounds_.size());
176 gfx::Rect draw_rect = invalid_rect_.Intersect(local_bounds); 185 gfx::Rect draw_rect = invalid_rect_.Intersect(local_bounds);
177 if (draw_rect.IsEmpty()) { 186 if (draw_rect.IsEmpty()) {
178 invalid_rect_ = gfx::Rect(); 187 invalid_rect_ = gfx::Rect();
179 return; 188 return;
180 } 189 }
181 scoped_ptr<gfx::Canvas> canvas(gfx::Canvas::CreateCanvas( 190 scoped_ptr<gfx::Canvas> canvas(gfx::Canvas::CreateCanvas(
182 draw_rect.width(), draw_rect.height(), false)); 191 draw_rect.width(), draw_rect.height(), false));
183 canvas->TranslateInt(draw_rect.x(), draw_rect.y()); 192 canvas->TranslateInt(draw_rect.x(), draw_rect.y());
184 delegate_->OnPaint(canvas.get()); 193 delegate_->OnPaintLayer(canvas.get());
185 SetCanvas(*canvas->AsCanvasSkia(), bounds().origin()); 194 SetCanvas(*canvas->AsCanvasSkia(), bounds().origin());
186 } 195 }
187 196
188 void Layer::RecomputeHole() { 197 void Layer::RecomputeHole() {
189 for (size_t i = 0; i < children_.size(); ++i) { 198 for (size_t i = 0; i < children_.size(); ++i) {
190 if (children_[i]->fills_bounds_opaquely() && 199 if (children_[i]->fills_bounds_opaquely() &&
191 !children_[i]->transform().HasChange()) { 200 !children_[i]->transform().HasChange()) {
192 hole_rect_ = children_[i]->bounds(); 201 hole_rect_ = children_[i]->bounds();
193 return; 202 return;
194 } 203 }
(...skipping 28 matching lines...) Expand all
223 for (; p && p != ancestor; p = p->parent()) { 232 for (; p && p != ancestor; p = p->parent()) {
224 if (p->transform().HasChange()) 233 if (p->transform().HasChange())
225 transform->ConcatTransform(p->transform()); 234 transform->ConcatTransform(p->transform());
226 transform->ConcatTranslate(static_cast<float>(p->bounds().x()), 235 transform->ConcatTranslate(static_cast<float>(p->bounds().x()),
227 static_cast<float>(p->bounds().y())); 236 static_cast<float>(p->bounds().y()));
228 } 237 }
229 return p == ancestor; 238 return p == ancestor;
230 } 239 }
231 240
232 } // namespace ui 241 } // namespace ui
OLDNEW
« no previous file with comments | « ui/gfx/compositor/layer.h ('k') | ui/gfx/compositor/layer_delegate.h » ('j') | views/view.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698