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