OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/compositor/layer.h" | 5 #include "ui/compositor/layer.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 compositor_(NULL), | 49 compositor_(NULL), |
50 parent_(NULL), | 50 parent_(NULL), |
51 visible_(true), | 51 visible_(true), |
52 force_render_surface_(false), | 52 force_render_surface_(false), |
53 fills_bounds_opaquely_(true), | 53 fills_bounds_opaquely_(true), |
54 layer_updated_externally_(false), | 54 layer_updated_externally_(false), |
55 opacity_(1.0f), | 55 opacity_(1.0f), |
56 background_blur_radius_(0), | 56 background_blur_radius_(0), |
57 layer_saturation_(0.0f), | 57 layer_saturation_(0.0f), |
58 layer_brightness_(0.0f), | 58 layer_brightness_(0.0f), |
| 59 layer_grayscale_(0.0f), |
59 layer_inverted_(false), | 60 layer_inverted_(false), |
60 layer_mask_(NULL), | 61 layer_mask_(NULL), |
61 layer_mask_back_link_(NULL), | 62 layer_mask_back_link_(NULL), |
62 delegate_(NULL), | 63 delegate_(NULL), |
63 scale_content_(true), | 64 scale_content_(true), |
64 device_scale_factor_(1.0f) { | 65 device_scale_factor_(1.0f) { |
65 CreateWebLayer(); | 66 CreateWebLayer(); |
66 } | 67 } |
67 | 68 |
68 Layer::Layer(LayerType type) | 69 Layer::Layer(LayerType type) |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 SetAnimator(LayerAnimator::CreateDefaultAnimator()); | 178 SetAnimator(LayerAnimator::CreateDefaultAnimator()); |
178 return animator_.get(); | 179 return animator_.get(); |
179 } | 180 } |
180 | 181 |
181 void Layer::SetTransform(const ui::Transform& transform) { | 182 void Layer::SetTransform(const ui::Transform& transform) { |
182 GetAnimator()->SetTransform(transform); | 183 GetAnimator()->SetTransform(transform); |
183 } | 184 } |
184 | 185 |
185 Transform Layer::GetTargetTransform() const { | 186 Transform Layer::GetTargetTransform() const { |
186 if (animator_.get() && animator_->IsAnimatingProperty( | 187 if (animator_.get() && animator_->IsAnimatingProperty( |
187 LayerAnimationElement::TRANSFORM)) | 188 LayerAnimationElement::TRANSFORM)) { |
188 return animator_->GetTargetTransform(); | 189 return animator_->GetTargetTransform(); |
| 190 } |
189 return transform_; | 191 return transform_; |
190 } | 192 } |
191 | 193 |
192 void Layer::SetBounds(const gfx::Rect& bounds) { | 194 void Layer::SetBounds(const gfx::Rect& bounds) { |
193 GetAnimator()->SetBounds(bounds); | 195 GetAnimator()->SetBounds(bounds); |
194 } | 196 } |
195 | 197 |
196 gfx::Rect Layer::GetTargetBounds() const { | 198 gfx::Rect Layer::GetTargetBounds() const { |
197 if (animator_.get() && animator_->IsAnimatingProperty( | 199 if (animator_.get() && animator_->IsAnimatingProperty( |
198 LayerAnimationElement::BOUNDS)) | 200 LayerAnimationElement::BOUNDS)) { |
199 return animator_->GetTargetBounds(); | 201 return animator_->GetTargetBounds(); |
| 202 } |
200 return bounds_; | 203 return bounds_; |
201 } | 204 } |
202 | 205 |
203 void Layer::SetMasksToBounds(bool masks_to_bounds) { | 206 void Layer::SetMasksToBounds(bool masks_to_bounds) { |
204 web_layer_.setMasksToBounds(masks_to_bounds); | 207 web_layer_.setMasksToBounds(masks_to_bounds); |
205 } | 208 } |
206 | 209 |
207 bool Layer::GetMasksToBounds() const { | 210 bool Layer::GetMasksToBounds() const { |
208 return web_layer_.masksToBounds(); | 211 return web_layer_.masksToBounds(); |
209 } | 212 } |
(...skipping 12 matching lines...) Expand all Loading... |
222 } | 225 } |
223 web_layer_.setBackgroundFilters(filters); | 226 web_layer_.setBackgroundFilters(filters); |
224 } | 227 } |
225 | 228 |
226 void Layer::SetLayerSaturation(float saturation) { | 229 void Layer::SetLayerSaturation(float saturation) { |
227 layer_saturation_ = saturation; | 230 layer_saturation_ = saturation; |
228 SetLayerFilters(); | 231 SetLayerFilters(); |
229 } | 232 } |
230 | 233 |
231 void Layer::SetLayerBrightness(float brightness) { | 234 void Layer::SetLayerBrightness(float brightness) { |
232 layer_brightness_ = brightness; | 235 GetAnimator()->SetBrightness(brightness); |
233 SetLayerFilters(); | 236 } |
| 237 |
| 238 float Layer::GetTargetBrightness() const { |
| 239 if (animator_.get() && animator_->IsAnimatingProperty( |
| 240 LayerAnimationElement::BRIGHTNESS)) { |
| 241 return animator_->GetTargetBrightness(); |
| 242 } |
| 243 return layer_brightness(); |
| 244 } |
| 245 |
| 246 void Layer::SetLayerGrayscale(float grayscale) { |
| 247 GetAnimator()->SetGrayscale(grayscale); |
| 248 } |
| 249 |
| 250 float Layer::GetTargetGrayscale() const { |
| 251 if (animator_.get() && animator_->IsAnimatingProperty( |
| 252 LayerAnimationElement::GRAYSCALE)) { |
| 253 return animator_->GetTargetGrayscale(); |
| 254 } |
| 255 return layer_grayscale(); |
234 } | 256 } |
235 | 257 |
236 void Layer::SetLayerInverted(bool inverted) { | 258 void Layer::SetLayerInverted(bool inverted) { |
237 layer_inverted_ = inverted; | 259 layer_inverted_ = inverted; |
238 SetLayerFilters(); | 260 SetLayerFilters(); |
239 } | 261 } |
240 | 262 |
241 void Layer::SetMaskLayer(Layer* layer_mask) { | 263 void Layer::SetMaskLayer(Layer* layer_mask) { |
242 // The provided mask should not have a layer mask itself. | 264 // The provided mask should not have a layer mask itself. |
243 DCHECK(!layer_mask || | 265 DCHECK(!layer_mask || |
(...skipping 19 matching lines...) Expand all Loading... |
263 void Layer::SetLayerFilters() { | 285 void Layer::SetLayerFilters() { |
264 WebKit::WebFilterOperations filters; | 286 WebKit::WebFilterOperations filters; |
265 if (layer_saturation_) { | 287 if (layer_saturation_) { |
266 filters.append(WebKit::WebFilterOperation::createSaturateFilter( | 288 filters.append(WebKit::WebFilterOperation::createSaturateFilter( |
267 layer_saturation_)); | 289 layer_saturation_)); |
268 } | 290 } |
269 if (layer_brightness_) { | 291 if (layer_brightness_) { |
270 filters.append(WebKit::WebFilterOperation::createBrightnessFilter( | 292 filters.append(WebKit::WebFilterOperation::createBrightnessFilter( |
271 layer_brightness_)); | 293 layer_brightness_)); |
272 } | 294 } |
| 295 if (layer_grayscale_) { |
| 296 filters.append(WebKit::WebFilterOperation::createGrayscaleFilter( |
| 297 layer_grayscale_)); |
| 298 } |
273 if (layer_inverted_) | 299 if (layer_inverted_) |
274 filters.append(WebKit::WebFilterOperation::createInvertFilter(1.0)); | 300 filters.append(WebKit::WebFilterOperation::createInvertFilter(1.0)); |
275 | 301 |
276 web_layer_.setFilters(filters); | 302 web_layer_.setFilters(filters); |
277 } | 303 } |
278 | 304 |
279 float Layer::GetTargetOpacity() const { | 305 float Layer::GetTargetOpacity() const { |
280 if (animator_.get() && animator_->IsAnimatingProperty( | 306 if (animator_.get() && animator_->IsAnimatingProperty( |
281 LayerAnimationElement::OPACITY)) | 307 LayerAnimationElement::OPACITY)) |
282 return animator_->GetTargetOpacity(); | 308 return animator_->GetTargetOpacity(); |
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
597 | 623 |
598 void Layer::SetVisibilityImmediately(bool visible) { | 624 void Layer::SetVisibilityImmediately(bool visible) { |
599 if (visible_ == visible) | 625 if (visible_ == visible) |
600 return; | 626 return; |
601 | 627 |
602 visible_ = visible; | 628 visible_ = visible; |
603 // TODO(piman): Expose a visibility flag on WebLayer. | 629 // TODO(piman): Expose a visibility flag on WebLayer. |
604 web_layer_.setOpacity(visible_ ? opacity_ : 0.f); | 630 web_layer_.setOpacity(visible_ ? opacity_ : 0.f); |
605 } | 631 } |
606 | 632 |
| 633 void Layer::SetBrightnessImmediately(float brightness) { |
| 634 layer_brightness_ = brightness; |
| 635 SetLayerFilters(); |
| 636 } |
| 637 |
| 638 void Layer::SetGrayscaleImmediately(float grayscale) { |
| 639 layer_grayscale_ = grayscale; |
| 640 SetLayerFilters(); |
| 641 } |
| 642 |
607 void Layer::SetBoundsFromAnimation(const gfx::Rect& bounds) { | 643 void Layer::SetBoundsFromAnimation(const gfx::Rect& bounds) { |
608 SetBoundsImmediately(bounds); | 644 SetBoundsImmediately(bounds); |
609 } | 645 } |
610 | 646 |
611 void Layer::SetTransformFromAnimation(const Transform& transform) { | 647 void Layer::SetTransformFromAnimation(const Transform& transform) { |
612 SetTransformImmediately(transform); | 648 SetTransformImmediately(transform); |
613 } | 649 } |
614 | 650 |
615 void Layer::SetOpacityFromAnimation(float opacity) { | 651 void Layer::SetOpacityFromAnimation(float opacity) { |
616 SetOpacityImmediately(opacity); | 652 SetOpacityImmediately(opacity); |
617 } | 653 } |
618 | 654 |
619 void Layer::SetVisibilityFromAnimation(bool visibility) { | 655 void Layer::SetVisibilityFromAnimation(bool visibility) { |
620 SetVisibilityImmediately(visibility); | 656 SetVisibilityImmediately(visibility); |
621 } | 657 } |
622 | 658 |
| 659 void Layer::SetBrightnessFromAnimation(float brightness) { |
| 660 SetBrightnessImmediately(brightness); |
| 661 } |
| 662 void Layer::SetGrayscaleFromAnimation(float grayscale) { |
| 663 SetGrayscaleImmediately(grayscale); |
| 664 } |
| 665 |
623 void Layer::ScheduleDrawForAnimation() { | 666 void Layer::ScheduleDrawForAnimation() { |
624 ScheduleDraw(); | 667 ScheduleDraw(); |
625 } | 668 } |
626 | 669 |
627 const gfx::Rect& Layer::GetBoundsForAnimation() const { | 670 const gfx::Rect& Layer::GetBoundsForAnimation() const { |
628 return bounds(); | 671 return bounds(); |
629 } | 672 } |
630 | 673 |
631 const Transform& Layer::GetTransformForAnimation() const { | 674 const Transform& Layer::GetTransformForAnimation() const { |
632 return transform(); | 675 return transform(); |
633 } | 676 } |
634 | 677 |
635 float Layer::GetOpacityForAnimation() const { | 678 float Layer::GetOpacityForAnimation() const { |
636 return opacity(); | 679 return opacity(); |
637 } | 680 } |
638 | 681 |
639 bool Layer::GetVisibilityForAnimation() const { | 682 bool Layer::GetVisibilityForAnimation() const { |
640 return visible(); | 683 return visible(); |
641 } | 684 } |
642 | 685 |
| 686 float Layer::GetBrightnessForAnimation() const { |
| 687 return layer_brightness(); |
| 688 } |
| 689 |
| 690 float Layer::GetGrayscaleForAnimation() const { |
| 691 return layer_grayscale(); |
| 692 } |
| 693 |
643 void Layer::CreateWebLayer() { | 694 void Layer::CreateWebLayer() { |
644 if (type_ == LAYER_SOLID_COLOR) | 695 if (type_ == LAYER_SOLID_COLOR) |
645 web_layer_ = WebKit::WebSolidColorLayer::create(); | 696 web_layer_ = WebKit::WebSolidColorLayer::create(); |
646 else | 697 else |
647 web_layer_ = WebKit::WebContentLayer::create(this); | 698 web_layer_ = WebKit::WebContentLayer::create(this); |
648 web_layer_.setAnchorPoint(WebKit::WebFloatPoint(0.f, 0.f)); | 699 web_layer_.setAnchorPoint(WebKit::WebFloatPoint(0.f, 0.f)); |
649 web_layer_.setOpaque(true); | 700 web_layer_.setOpaque(true); |
650 web_layer_is_accelerated_ = false; | 701 web_layer_is_accelerated_ = false; |
651 show_debug_borders_ = CommandLine::ForCurrentProcess()->HasSwitch( | 702 show_debug_borders_ = CommandLine::ForCurrentProcess()->HasSwitch( |
652 switches::kUIShowLayerBorders); | 703 switches::kUIShowLayerBorders); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
706 return; | 757 return; |
707 unsigned int color = 0xFF000000; | 758 unsigned int color = 0xFF000000; |
708 color |= web_layer_is_accelerated_ ? 0x0000FF00 : 0x00FF0000; | 759 color |= web_layer_is_accelerated_ ? 0x0000FF00 : 0x00FF0000; |
709 bool opaque = fills_bounds_opaquely_ && (GetCombinedOpacity() == 1.f); | 760 bool opaque = fills_bounds_opaquely_ && (GetCombinedOpacity() == 1.f); |
710 if (!opaque) | 761 if (!opaque) |
711 color |= 0xFF; | 762 color |= 0xFF; |
712 web_layer_.setDebugBorderColor(color); | 763 web_layer_.setDebugBorderColor(color); |
713 } | 764 } |
714 | 765 |
715 } // namespace ui | 766 } // namespace ui |
OLD | NEW |