contents_scaling_layer.cc revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
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  if (draw_properties().contents_scale_x == last_update_contents_scale_x_ &&
42      draw_properties().contents_scale_y == last_update_contents_scale_y_)
43    return false;
44
45  last_update_contents_scale_x_ = draw_properties().contents_scale_x;
46  last_update_contents_scale_y_ = draw_properties().contents_scale_y;
47  // Invalidate the whole layer if scale changed.
48  SetNeedsDisplayRect(gfx::Rect(paint_properties().bounds));
49  return false;
50}
51
52}  // namespace cc
53