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    bool animating_transform_to_screen,
35    float* contents_scale_x,
36    float* contents_scale_y,
37    gfx::Size* content_bounds) {
38  // CalculateRasterContentsScale always returns 1.f, so make that the ideal
39  // scale.
40  ideal_contents_scale = 1.f;
41  PictureLayerImpl::CalculateContentsScale(ideal_contents_scale,
42                                           device_scale_factor,
43                                           page_scale_factor,
44                                           animating_transform_to_screen,
45                                           contents_scale_x,
46                                           contents_scale_y,
47                                           content_bounds);
48}
49
50void PictureImageLayerImpl::GetDebugBorderProperties(
51    SkColor* color, float* width) const {
52  *color = DebugColors::ImageLayerBorderColor();
53  *width = DebugColors::ImageLayerBorderWidth(layer_tree_impl());
54}
55
56bool PictureImageLayerImpl::ShouldAdjustRasterScale(
57    bool animating_transform_to_screen) const {
58  return false;
59}
60
61void PictureImageLayerImpl::RecalculateRasterScales(
62    bool animating_transform_to_screen) {
63  // Defaults from PictureLayerImpl.
64  PictureLayerImpl::RecalculateRasterScales(animating_transform_to_screen);
65
66  // Don't scale images during rastering to ensure image quality, save memory
67  // and avoid frequent re-rastering on change of scale.
68  raster_contents_scale_ = std::max(1.f, MinimumContentsScale());
69  // We don't need low res tiles.
70  low_res_raster_contents_scale_ = raster_contents_scale_;
71}
72
73}  // namespace cc
74