| // Copyright 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "cc/contents_scaling_layer.h" |
| #include "ui/gfx/size_conversions.h" |
| |
| namespace cc { |
| |
| gfx::Size ContentsScalingLayer::computeContentBoundsForScale(float scaleX, float scaleY) const { |
| return gfx::ToCeiledSize(gfx::ScaleSize(bounds(), scaleX, scaleY)); |
| } |
| |
| ContentsScalingLayer::ContentsScalingLayer() |
| : last_update_contents_scale_x_(0.f) |
| , last_update_contents_scale_y_(0.f) |
| { |
| } |
| |
| ContentsScalingLayer::~ContentsScalingLayer() { |
| } |
| |
| void ContentsScalingLayer::calculateContentsScale( |
| float ideal_contents_scale, |
| bool animating_transform_to_screen, |
| float* contents_scale_x, |
| float* contents_scale_y, |
| gfx::Size* content_bounds) { |
| *contents_scale_x = ideal_contents_scale; |
| *contents_scale_y = ideal_contents_scale; |
| *content_bounds = computeContentBoundsForScale( |
| ideal_contents_scale, |
| ideal_contents_scale); |
| } |
| |
| void ContentsScalingLayer::didUpdateBounds() { |
| drawProperties().content_bounds = computeContentBoundsForScale( |
| contentsScaleX(), |
| contentsScaleY()); |
| } |
| |
| void ContentsScalingLayer::update( |
| ResourceUpdateQueue& queue, |
| const OcclusionTracker* occlusion, |
| RenderingStats* stats) { |
| if (drawProperties().contents_scale_x == last_update_contents_scale_x_ && |
| drawProperties().contents_scale_y == last_update_contents_scale_y_) |
| return; |
| |
| last_update_contents_scale_x_ = drawProperties().contents_scale_x; |
| last_update_contents_scale_y_ = drawProperties().contents_scale_y; |
| // Invalidate the whole layer if scale changed. |
| setNeedsDisplayRect(gfx::Rect(bounds())); |
| } |
| |
| } // namespace cc |