solid_color_layer_impl.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/solid_color_layer_impl.h"
6
7#include <algorithm>
8
9#include "cc/layers/quad_sink.h"
10#include "cc/quads/solid_color_draw_quad.h"
11
12namespace cc {
13
14SolidColorLayerImpl::SolidColorLayerImpl(LayerTreeImpl* tree_impl, int id)
15    : LayerImpl(tree_impl, id),
16      tile_size_(256) {}
17
18SolidColorLayerImpl::~SolidColorLayerImpl() {}
19
20scoped_ptr<LayerImpl> SolidColorLayerImpl::CreateLayerImpl(
21    LayerTreeImpl* tree_impl) {
22  return SolidColorLayerImpl::Create(tree_impl, id()).PassAs<LayerImpl>();
23}
24
25void SolidColorLayerImpl::AppendQuads(QuadSink* quad_sink,
26                                      AppendQuadsData* append_quads_data) {
27  SharedQuadState* shared_quad_state =
28      quad_sink->UseSharedQuadState(CreateSharedQuadState());
29  AppendDebugBorderQuad(quad_sink, shared_quad_state, append_quads_data);
30
31  // We create a series of smaller quads instead of just one large one so that
32  // the culler can reduce the total pixels drawn.
33  int width = content_bounds().width();
34  int height = content_bounds().height();
35  for (int x = 0; x < width; x += tile_size_) {
36    for (int y = 0; y < height; y += tile_size_) {
37      gfx::Rect solid_tile_rect(x,
38                              y,
39                              std::min(width - x, tile_size_),
40                              std::min(height - y, tile_size_));
41      scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
42      quad->SetNew(
43          shared_quad_state, solid_tile_rect, background_color(), false);
44      quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data);
45    }
46  }
47}
48
49const char* SolidColorLayerImpl::LayerTypeAsString() const {
50  return "SolidColorLayer";
51}
52
53}  // namespace cc
54