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, 25b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) float device_scale_factor, 26b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) float page_scale_factor, 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool animating_transform_to_screen, 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float* contents_scale_x, 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float* contents_scale_y, 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size* content_bounds) { 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *contents_scale_x = ideal_contents_scale; 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *contents_scale_y = ideal_contents_scale; 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *content_bounds = ComputeContentBoundsForScale( 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ideal_contents_scale, 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ideal_contents_scale); 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbool ContentsScalingLayer::Update( 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResourceUpdateQueue* queue, 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const OcclusionTracker* occlusion) { 41a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) bool updated = Layer::Update(queue, occlusion); 42a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (draw_properties().contents_scale_x == last_update_contents_scale_x_ && 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) draw_properties().contents_scale_y == last_update_contents_scale_y_) 45a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return updated; 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) last_update_contents_scale_x_ = draw_properties().contents_scale_x; 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) last_update_contents_scale_y_ = draw_properties().contents_scale_y; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Invalidate the whole layer if scale changed. 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetNeedsDisplayRect(gfx::Rect(paint_properties().bounds)); 51a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return updated; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 55