solid_color_layer_impl.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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 quad_rect(x, 38 y, 39 std::min(width - x, tile_size_), 40 std::min(height - y, tile_size_)); 41 gfx::Rect visible_quad_rect = quad_sink->UnoccludedContentRect( 42 quad_rect, draw_properties().target_space_transform); 43 if (visible_quad_rect.IsEmpty()) 44 continue; 45 46 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create(); 47 quad->SetNew(shared_quad_state, 48 quad_rect, 49 visible_quad_rect, 50 background_color(), 51 false); 52 quad_sink->Append(quad.PassAs<DrawQuad>()); 53 } 54 } 55} 56 57const char* SolidColorLayerImpl::LayerTypeAsString() const { 58 return "cc::SolidColorLayerImpl"; 59} 60 61} // namespace cc 62