Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / cc / layers / solid_color_layer_impl.cc
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
12 namespace cc {
13
14 SolidColorLayerImpl::SolidColorLayerImpl(LayerTreeImpl* tree_impl, int id)
15     : LayerImpl(tree_impl, id),
16       tile_size_(256) {}
17
18 SolidColorLayerImpl::~SolidColorLayerImpl() {}
19
20 scoped_ptr<LayerImpl> SolidColorLayerImpl::CreateLayerImpl(
21     LayerTreeImpl* tree_impl) {
22   return SolidColorLayerImpl::Create(tree_impl, id()).PassAs<LayerImpl>();
23 }
24
25 void SolidColorLayerImpl::AppendQuads(QuadSink* quad_sink,
26                                       AppendQuadsData* append_quads_data) {
27   SharedQuadState* shared_quad_state = quad_sink->CreateSharedQuadState();
28   PopulateSharedQuadState(shared_quad_state);
29
30   AppendDebugBorderQuad(quad_sink, shared_quad_state, append_quads_data);
31
32   // We create a series of smaller quads instead of just one large one so that
33   // the culler can reduce the total pixels drawn.
34   int width = content_bounds().width();
35   int height = content_bounds().height();
36   for (int x = 0; x < width; x += tile_size_) {
37     for (int y = 0; y < height; y += tile_size_) {
38       gfx::Rect quad_rect(x,
39                           y,
40                           std::min(width - x, tile_size_),
41                           std::min(height - y, tile_size_));
42       gfx::Rect visible_quad_rect = quad_sink->UnoccludedContentRect(
43           quad_rect, draw_properties().target_space_transform);
44       if (visible_quad_rect.IsEmpty())
45         continue;
46
47       scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
48       quad->SetNew(shared_quad_state,
49                    quad_rect,
50                    visible_quad_rect,
51                    background_color(),
52                    false);
53       quad_sink->Append(quad.PassAs<DrawQuad>());
54     }
55   }
56 }
57
58 const char* SolidColorLayerImpl::LayerTypeAsString() const {
59   return "cc::SolidColorLayerImpl";
60 }
61
62 }  // namespace cc