contents_scaling_layer.cc revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
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(paint_properties().bounds));
48}
49
50}  // namespace cc
51