contents_scaling_layer.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/contents_scaling_layer.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/size_conversions.h" 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)gfx::Size ContentsScalingLayer::ComputeContentBoundsForScale( 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float scale_x, 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float scale_y) const { 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return gfx::ToCeiledSize(gfx::ScaleSize(bounds(), scale_x, scale_y)); 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ContentsScalingLayer::ContentsScalingLayer() 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : last_update_contents_scale_x_(0.f), 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) last_update_contents_scale_y_(0.f) {} 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ContentsScalingLayer::~ContentsScalingLayer() { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentsScalingLayer::CalculateContentsScale( 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float ideal_contents_scale, 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool animating_transform_to_screen, 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float* contents_scale_x, 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float* contents_scale_y, 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size* content_bounds) { 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *contents_scale_x = ideal_contents_scale; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *contents_scale_y = ideal_contents_scale; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *content_bounds = ComputeContentBoundsForScale( 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ideal_contents_scale, 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ideal_contents_scale); 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentsScalingLayer::Update( 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResourceUpdateQueue* queue, 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const OcclusionTracker* occlusion, 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderingStats* stats) { 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (draw_properties().contents_scale_x == last_update_contents_scale_x_ && 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) draw_properties().contents_scale_y == last_update_contents_scale_y_) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) last_update_contents_scale_x_ = draw_properties().contents_scale_x; 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) last_update_contents_scale_y_ = draw_properties().contents_scale_y; 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Invalidate the whole layer if scale changed. 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetNeedsDisplayRect(gfx::Rect(bounds())); 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 51