contents_scaling_layer.cc revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2012 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "cc/layers/contents_scaling_layer.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/gfx/size_conversions.h" 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace cc { 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccigfx::Size ContentsScalingLayer::ComputeContentBoundsForScale( 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float scale_x, 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float scale_y) const { 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return gfx::ToCeiledSize(gfx::ScaleSize(bounds(), scale_x, scale_y)); 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciContentsScalingLayer::ContentsScalingLayer() 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : last_update_contents_scale_x_(0.f), 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci last_update_contents_scale_y_(0.f) {} 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciContentsScalingLayer::~ContentsScalingLayer() { 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ContentsScalingLayer::CalculateContentsScale( 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float ideal_contents_scale, 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float device_scale_factor, 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float page_scale_factor, 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float maximum_animation_contents_scale, 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool animating_transform_to_screen, 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float* contents_scale_x, 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float* contents_scale_y, 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::Size* content_bounds) { 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *contents_scale_x = ideal_contents_scale; 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *contents_scale_y = ideal_contents_scale; 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *content_bounds = ComputeContentBoundsForScale( 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ideal_contents_scale, 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ideal_contents_scale); 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool ContentsScalingLayer::Update(ResourceUpdateQueue* queue, 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const OcclusionTracker<Layer>* occlusion) { 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool updated = Layer::Update(queue, occlusion); 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (draw_properties().contents_scale_x == last_update_contents_scale_x_ && 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci draw_properties().contents_scale_y == last_update_contents_scale_y_) 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return updated; 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci last_update_contents_scale_x_ = draw_properties().contents_scale_x; 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci last_update_contents_scale_y_ = draw_properties().contents_scale_y; 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Invalidate the whole layer if scale changed. 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetNeedsDisplayRect(gfx::Rect(paint_properties().bounds)); 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return updated; 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace cc 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci