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