picture_image_layer_impl.cc revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
1// Copyright 2013 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/picture_image_layer_impl.h"
6
7#include <algorithm>
8
9#include "cc/debug/debug_colors.h"
10#include "cc/trees/layer_tree_impl.h"
11
12namespace cc {
13
14PictureImageLayerImpl::PictureImageLayerImpl(LayerTreeImpl* tree_impl, int id)
15    : PictureLayerImpl(tree_impl, id) {
16}
17
18PictureImageLayerImpl::~PictureImageLayerImpl() {
19}
20
21const char* PictureImageLayerImpl::LayerTypeAsString() const {
22  return "cc::PictureImageLayerImpl";
23}
24
25scoped_ptr<LayerImpl> PictureImageLayerImpl::CreateLayerImpl(
26    LayerTreeImpl* tree_impl) {
27  return PictureImageLayerImpl::Create(tree_impl, id()).PassAs<LayerImpl>();
28}
29
30void PictureImageLayerImpl::CalculateContentsScale(
31    float ideal_contents_scale,
32    float device_scale_factor,
33    float page_scale_factor,
34    float maximum_animation_contents_scale,
35    bool animating_transform_to_screen,
36    float* contents_scale_x,
37    float* contents_scale_y,
38    gfx::Size* content_bounds) {
39  // CalculateRasterContentsScale always returns 1.f, so make that the ideal
40  // scale.
41  ideal_contents_scale = 1.f;
42  PictureLayerImpl::CalculateContentsScale(ideal_contents_scale,
43                                           device_scale_factor,
44                                           page_scale_factor,
45                                           maximum_animation_contents_scale,
46                                           animating_transform_to_screen,
47                                           contents_scale_x,
48                                           contents_scale_y,
49                                           content_bounds);
50}
51
52void PictureImageLayerImpl::GetDebugBorderProperties(
53    SkColor* color, float* width) const {
54  *color = DebugColors::ImageLayerBorderColor();
55  *width = DebugColors::ImageLayerBorderWidth(layer_tree_impl());
56}
57
58bool PictureImageLayerImpl::ShouldAdjustRasterScale(
59    bool animating_transform_to_screen) const {
60  return false;
61}
62
63void PictureImageLayerImpl::RecalculateRasterScales(
64    bool animating_transform_to_screen,
65    float maximum_animation_contents_scale) {
66  // Defaults from PictureLayerImpl.
67  PictureLayerImpl::RecalculateRasterScales(animating_transform_to_screen,
68                                            maximum_animation_contents_scale);
69
70  // Don't scale images during rastering to ensure image quality, save memory
71  // and avoid frequent re-rastering on change of scale.
72  raster_contents_scale_ = std::max(1.f, MinimumContentsScale());
73  // We don't need low res tiles.
74  low_res_raster_contents_scale_ = raster_contents_scale_;
75}
76
77}  // namespace cc
78