1// Copyright 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "cc/layers/contents_scaling_layer.h" 6#include "ui/gfx/size_conversions.h" 7 8namespace cc { 9 10gfx::Size ContentsScalingLayer::ComputeContentBoundsForScale( 11 float scale_x, 12 float scale_y) const { 13 return gfx::ToCeiledSize(gfx::ScaleSize(bounds(), scale_x, scale_y)); 14} 15 16ContentsScalingLayer::ContentsScalingLayer() 17 : last_update_contents_scale_x_(0.f), 18 last_update_contents_scale_y_(0.f) {} 19 20ContentsScalingLayer::~ContentsScalingLayer() { 21} 22 23void ContentsScalingLayer::CalculateContentsScale( 24 float ideal_contents_scale, 25 float device_scale_factor, 26 float page_scale_factor, 27 float maximum_animation_contents_scale, 28 bool animating_transform_to_screen, 29 float* contents_scale_x, 30 float* contents_scale_y, 31 gfx::Size* content_bounds) { 32 *contents_scale_x = ideal_contents_scale; 33 *contents_scale_y = ideal_contents_scale; 34 *content_bounds = ComputeContentBoundsForScale( 35 ideal_contents_scale, 36 ideal_contents_scale); 37} 38 39bool ContentsScalingLayer::Update(ResourceUpdateQueue* queue, 40 const OcclusionTracker<Layer>* occlusion) { 41 bool updated = Layer::Update(queue, occlusion); 42 43 if (draw_properties().contents_scale_x == last_update_contents_scale_x_ && 44 draw_properties().contents_scale_y == last_update_contents_scale_y_) 45 return updated; 46 47 last_update_contents_scale_x_ = draw_properties().contents_scale_x; 48 last_update_contents_scale_y_ = draw_properties().contents_scale_y; 49 // Invalidate the whole layer if scale changed. 50 SetNeedsDisplayRect(gfx::Rect(paint_properties().bounds)); 51 return updated; 52} 53 54} // namespace cc 55