| OLD | NEW |
| 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 "ui/gfx/compositor/layer_observer.h" |
| 10 #include "ui/gfx/point3.h" | 11 #include "ui/gfx/point3.h" |
| 11 | 12 |
| 12 namespace ui { | 13 namespace ui { |
| 13 | 14 |
| 14 Layer::Layer(Compositor* compositor) | 15 Layer::Layer(Compositor* compositor) |
| 15 : compositor_(compositor), | 16 : compositor_(compositor), |
| 16 texture_(compositor->CreateTexture()), | 17 texture_(compositor->CreateTexture()), |
| 17 parent_(NULL), | 18 parent_(NULL), |
| 18 fills_bounds_opaquely_(false) { | 19 fills_bounds_opaquely_(false) { |
| 19 } | 20 } |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 if (texture == NULL) | 102 if (texture == NULL) |
| 102 texture_ = compositor_->CreateTexture(); | 103 texture_ = compositor_->CreateTexture(); |
| 103 else | 104 else |
| 104 texture_ = texture; | 105 texture_ = texture; |
| 105 } | 106 } |
| 106 | 107 |
| 107 void Layer::SetCanvas(const SkCanvas& canvas, const gfx::Point& origin) { | 108 void Layer::SetCanvas(const SkCanvas& canvas, const gfx::Point& origin) { |
| 108 texture_->SetCanvas(canvas, origin, bounds_.size()); | 109 texture_->SetCanvas(canvas, origin, bounds_.size()); |
| 109 } | 110 } |
| 110 | 111 |
| 112 void Layer::AddObserver(LayerObserver* observer) { |
| 113 observer_list_.AddObserver(observer); |
| 114 } |
| 115 |
| 116 void Layer::RemoveObserver(LayerObserver* observer) { |
| 117 observer_list_.RemoveObserver(observer); |
| 118 } |
| 119 |
| 111 void Layer::Draw() { | 120 void Layer::Draw() { |
| 112 ui::TextureDrawParams texture_draw_params; | 121 ui::TextureDrawParams texture_draw_params; |
| 113 for (Layer* layer = this; layer; layer = layer->parent_) { | 122 for (Layer* layer = this; layer; layer = layer->parent_) { |
| 114 texture_draw_params.transform.ConcatTransform(layer->transform_); | 123 texture_draw_params.transform.ConcatTransform(layer->transform_); |
| 115 texture_draw_params.transform.ConcatTranslate( | 124 texture_draw_params.transform.ConcatTranslate( |
| 116 static_cast<float>(layer->bounds_.x()), | 125 static_cast<float>(layer->bounds_.x()), |
| 117 static_cast<float>(layer->bounds_.y())); | 126 static_cast<float>(layer->bounds_.y())); |
| 118 } | 127 } |
| 119 | 128 |
| 120 // Only blend for transparent child layers. | 129 // Only blend for transparent child layers. |
| (...skipping 24 matching lines...) Expand all Loading... |
| 145 bounds_.width() - hole_rect_.right(), | 154 bounds_.width() - hole_rect_.right(), |
| 146 hole_rect_.height())); | 155 hole_rect_.height())); |
| 147 | 156 |
| 148 // bottom | 157 // bottom |
| 149 DrawRegion(texture_draw_params, gfx::Rect( | 158 DrawRegion(texture_draw_params, gfx::Rect( |
| 150 0, | 159 0, |
| 151 hole_rect_.bottom(), | 160 hole_rect_.bottom(), |
| 152 bounds_.width(), | 161 bounds_.width(), |
| 153 bounds_.height() - hole_rect_.bottom())); | 162 bounds_.height() - hole_rect_.bottom())); |
| 154 #endif | 163 #endif |
| 164 FOR_EACH_OBSERVER(LayerObserver, observer_list_, OnDraw(this)); |
| 155 } | 165 } |
| 156 | 166 |
| 157 void Layer::DrawRegion(const ui::TextureDrawParams& params, | 167 void Layer::DrawRegion(const ui::TextureDrawParams& params, |
| 158 const gfx::Rect& region_to_draw) { | 168 const gfx::Rect& region_to_draw) { |
| 159 if (!region_to_draw.IsEmpty()) | 169 if (!region_to_draw.IsEmpty()) |
| 160 texture_->Draw(params, region_to_draw); | 170 texture_->Draw(params, region_to_draw); |
| 161 } | 171 } |
| 162 | 172 |
| 163 void Layer::RecomputeHole() { | 173 void Layer::RecomputeHole() { |
| 164 for (size_t i = 0; i < children_.size(); ++i) { | 174 for (size_t i = 0; i < children_.size(); ++i) { |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 198 for (; p && p != ancestor; p = p->parent()) { | 208 for (; p && p != ancestor; p = p->parent()) { |
| 199 if (p->transform().HasChange()) | 209 if (p->transform().HasChange()) |
| 200 transform->ConcatTransform(p->transform()); | 210 transform->ConcatTransform(p->transform()); |
| 201 transform->ConcatTranslate(static_cast<float>(p->bounds().x()), | 211 transform->ConcatTranslate(static_cast<float>(p->bounds().x()), |
| 202 static_cast<float>(p->bounds().y())); | 212 static_cast<float>(p->bounds().y())); |
| 203 } | 213 } |
| 204 return p == ancestor; | 214 return p == ancestor; |
| 205 } | 215 } |
| 206 | 216 |
| 207 } // namespace ui | 217 } // namespace ui |
| OLD | NEW |