contents_scaling_layer.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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 bool animating_transform_to_screen, 26 float* contents_scale_x, 27 float* contents_scale_y, 28 gfx::Size* content_bounds) { 29 *contents_scale_x = ideal_contents_scale; 30 *contents_scale_y = ideal_contents_scale; 31 *content_bounds = ComputeContentBoundsForScale( 32 ideal_contents_scale, 33 ideal_contents_scale); 34} 35 36void ContentsScalingLayer::Update( 37 ResourceUpdateQueue* queue, 38 const OcclusionTracker* occlusion, 39 RenderingStats* stats) { 40 if (draw_properties().contents_scale_x == last_update_contents_scale_x_ && 41 draw_properties().contents_scale_y == last_update_contents_scale_y_) 42 return; 43 44 last_update_contents_scale_x_ = draw_properties().contents_scale_x; 45 last_update_contents_scale_y_ = draw_properties().contents_scale_y; 46 // Invalidate the whole layer if scale changed. 47 SetNeedsDisplayRect(gfx::Rect(bounds())); 48} 49 50} // namespace cc 51