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/debug/trace_event.h" | 9 #include "base/debug/trace_event.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 } | 278 } |
279 web_layer_ = new_layer; | 279 web_layer_ = new_layer; |
280 web_layer_is_accelerated_ = true; | 280 web_layer_is_accelerated_ = true; |
281 for (size_t i = 0; i < children_.size(); ++i) { | 281 for (size_t i = 0; i < children_.size(); ++i) { |
282 DCHECK(!children_[i]->web_layer_.isNull()); | 282 DCHECK(!children_[i]->web_layer_.isNull()); |
283 web_layer_.addChild(children_[i]->web_layer_); | 283 web_layer_.addChild(children_[i]->web_layer_); |
284 } | 284 } |
285 web_layer_.setAnchorPoint(WebKit::WebFloatPoint(0.f, 0.f)); | 285 web_layer_.setAnchorPoint(WebKit::WebFloatPoint(0.f, 0.f)); |
286 web_layer_.setOpaque(fills_bounds_opaquely_); | 286 web_layer_.setOpaque(fills_bounds_opaquely_); |
287 web_layer_.setOpacity(visible_ ? opacity_ : 0.f); | 287 web_layer_.setOpacity(visible_ ? opacity_ : 0.f); |
288 web_layer_.setBounds(bounds_.size()); | |
289 RecomputeTransform(); | 288 RecomputeTransform(); |
290 } | 289 } |
291 TextureCC* texture_cc = static_cast<TextureCC*>(texture); | 290 TextureCC* texture_cc = static_cast<TextureCC*>(texture); |
292 texture_cc->Update(); | 291 texture_cc->Update(); |
293 WebKit::WebExternalTextureLayer texture_layer = | 292 WebKit::WebExternalTextureLayer texture_layer = |
294 web_layer_.to<WebKit::WebExternalTextureLayer>(); | 293 web_layer_.to<WebKit::WebExternalTextureLayer>(); |
295 texture_layer.setFlipped(texture_cc->flipped()); | 294 texture_layer.setFlipped(texture_cc->flipped()); |
296 RecomputeDrawsContentAndUVRect(); | 295 RecomputeDrawsContentAndUVRect(); |
297 #endif | 296 #endif |
298 } | 297 } |
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
631 bounds_ = bounds; | 630 bounds_ = bounds; |
632 if (IsDrawn()) { | 631 if (IsDrawn()) { |
633 if (was_move) | 632 if (was_move) |
634 ScheduleDraw(); | 633 ScheduleDraw(); |
635 else | 634 else |
636 SchedulePaint(gfx::Rect(bounds.size())); | 635 SchedulePaint(gfx::Rect(bounds.size())); |
637 } | 636 } |
638 | 637 |
639 SetNeedsToRecomputeHole(); | 638 SetNeedsToRecomputeHole(); |
640 #if defined(USE_WEBKIT_COMPOSITOR) | 639 #if defined(USE_WEBKIT_COMPOSITOR) |
641 web_layer_.setBounds(bounds.size()); | |
642 RecomputeTransform(); | 640 RecomputeTransform(); |
643 RecomputeDrawsContentAndUVRect(); | 641 RecomputeDrawsContentAndUVRect(); |
644 #endif | 642 #endif |
645 } | 643 } |
646 | 644 |
647 void Layer::SetTransformImmediately(const ui::Transform& transform) { | 645 void Layer::SetTransformImmediately(const ui::Transform& transform) { |
648 transform_ = transform; | 646 transform_ = transform; |
649 | 647 |
650 SetNeedsToRecomputeHole(); | 648 SetNeedsToRecomputeHole(); |
651 #if defined(USE_WEBKIT_COMPOSITOR) | 649 #if defined(USE_WEBKIT_COMPOSITOR) |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
713 transform.ConcatTranslate(bounds_.x(), bounds_.y()); | 711 transform.ConcatTranslate(bounds_.x(), bounds_.y()); |
714 web_layer_.setTransform(transform.matrix()); | 712 web_layer_.setTransform(transform.matrix()); |
715 } | 713 } |
716 | 714 |
717 void Layer::RecomputeDrawsContentAndUVRect() { | 715 void Layer::RecomputeDrawsContentAndUVRect() { |
718 DCHECK(!web_layer_.isNull()); | 716 DCHECK(!web_layer_.isNull()); |
719 bool should_draw = type_ == LAYER_HAS_TEXTURE && | 717 bool should_draw = type_ == LAYER_HAS_TEXTURE && |
720 !hole_rect_.Contains(gfx::Rect(gfx::Point(0, 0), bounds_.size())); | 718 !hole_rect_.Contains(gfx::Rect(gfx::Point(0, 0), bounds_.size())); |
721 if (!web_layer_is_accelerated_) { | 719 if (!web_layer_is_accelerated_) { |
722 web_layer_.to<WebKit::WebContentLayer>().setDrawsContent(should_draw); | 720 web_layer_.to<WebKit::WebContentLayer>().setDrawsContent(should_draw); |
| 721 web_layer_.setBounds(bounds_.size()); |
723 } else { | 722 } else { |
724 DCHECK(texture_); | 723 DCHECK(texture_); |
725 TextureCC* texture_cc = static_cast<TextureCC*>(texture_.get()); | 724 TextureCC* texture_cc = static_cast<TextureCC*>(texture_.get()); |
726 unsigned int texture_id = texture_cc->texture_id(); | 725 unsigned int texture_id = texture_cc->texture_id(); |
727 WebKit::WebExternalTextureLayer texture_layer = | 726 WebKit::WebExternalTextureLayer texture_layer = |
728 web_layer_.to<WebKit::WebExternalTextureLayer>(); | 727 web_layer_.to<WebKit::WebExternalTextureLayer>(); |
729 texture_layer.setTextureId(should_draw ? texture_id : 0); | 728 texture_layer.setTextureId(should_draw ? texture_id : 0); |
| 729 gfx::Size size(std::min(bounds_.width(), texture_cc->size().width()), |
| 730 std::min(bounds_.height(), texture_cc->size().height())); |
730 WebKit::WebFloatRect rect( | 731 WebKit::WebFloatRect rect( |
731 0, | 732 0, |
732 0, | 733 0, |
733 static_cast<float>(bounds_.width())/texture_cc->size().width(), | 734 static_cast<float>(size.width())/texture_cc->size().width(), |
734 static_cast<float>(bounds_.height())/texture_cc->size().height()); | 735 static_cast<float>(size.height())/texture_cc->size().height()); |
735 texture_layer.setUVRect(rect); | 736 texture_layer.setUVRect(rect); |
| 737 web_layer_.setBounds(size); |
736 } | 738 } |
737 } | 739 } |
738 #endif | 740 #endif |
739 | 741 |
740 } // namespace ui | 742 } // namespace ui |
OLD | NEW |