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