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/quads/texture_draw_quad.h" 6 7 #include "base/logging.h" 8 #include "base/values.h" 9 #include "cc/base/math_util.h" 10 #include "ui/gfx/vector2d_f.h" 11 12 namespace cc { 13 14 TextureDrawQuad::TextureDrawQuad() 15 : resource_id(0), 16 premultiplied_alpha(false), 17 background_color(SK_ColorTRANSPARENT), 18 flipped(false) { 19 this->vertex_opacity[0] = 0.f; 20 this->vertex_opacity[1] = 0.f; 21 this->vertex_opacity[2] = 0.f; 22 this->vertex_opacity[3] = 0.f; 23 } 24 25 scoped_ptr<TextureDrawQuad> TextureDrawQuad::Create() { 26 return make_scoped_ptr(new TextureDrawQuad); 27 } 28 29 void TextureDrawQuad::SetNew(const SharedQuadState* shared_quad_state, 30 gfx::Rect rect, gfx::Rect opaque_rect, 31 unsigned resource_id, bool premultiplied_alpha, 32 gfx::PointF uv_top_left, 33 gfx::PointF uv_bottom_right, 34 SkColor background_color, 35 const float vertex_opacity[4], 36 bool flipped) { 37 gfx::Rect visible_rect = rect; 38 bool needs_blending = vertex_opacity[0] != 1.0f || vertex_opacity[1] != 1.0f 39 || vertex_opacity[2] != 1.0f || vertex_opacity[3] != 1.0f; 40 DrawQuad::SetAll(shared_quad_state, DrawQuad::TEXTURE_CONTENT, rect, 41 opaque_rect, visible_rect, needs_blending); 42 this->resource_id = resource_id; 43 this->premultiplied_alpha = premultiplied_alpha; 44 this->uv_top_left = uv_top_left; 45 this->uv_bottom_right = uv_bottom_right; 46 this->background_color = background_color; 47 this->vertex_opacity[0] = vertex_opacity[0]; 48 this->vertex_opacity[1] = vertex_opacity[1]; 49 this->vertex_opacity[2] = vertex_opacity[2]; 50 this->vertex_opacity[3] = vertex_opacity[3]; 51 this->flipped = flipped; 52 } 53 54 void TextureDrawQuad::SetAll(const SharedQuadState* shared_quad_state, 55 gfx::Rect rect, gfx::Rect opaque_rect, 56 gfx::Rect visible_rect, bool needs_blending, 57 unsigned resource_id, bool premultiplied_alpha, 58 gfx::PointF uv_top_left, 59 gfx::PointF uv_bottom_right, 60 SkColor background_color, 61 const float vertex_opacity[4], 62 bool flipped) { 63 DrawQuad::SetAll(shared_quad_state, DrawQuad::TEXTURE_CONTENT, rect, 64 opaque_rect, visible_rect, needs_blending); 65 this->resource_id = resource_id; 66 this->premultiplied_alpha = premultiplied_alpha; 67 this->uv_top_left = uv_top_left; 68 this->uv_bottom_right = uv_bottom_right; 69 this->background_color = background_color; 70 this->vertex_opacity[0] = vertex_opacity[0]; 71 this->vertex_opacity[1] = vertex_opacity[1]; 72 this->vertex_opacity[2] = vertex_opacity[2]; 73 this->vertex_opacity[3] = vertex_opacity[3]; 74 this->flipped = flipped; 75 } 76 77 void TextureDrawQuad::IterateResources( 78 const ResourceIteratorCallback& callback) { 79 resource_id = callback.Run(resource_id); 80 } 81 82 const TextureDrawQuad* TextureDrawQuad::MaterialCast(const DrawQuad* quad) { 83 DCHECK(quad->material == DrawQuad::TEXTURE_CONTENT); 84 return static_cast<const TextureDrawQuad*>(quad); 85 } 86 87 void TextureDrawQuad::ExtendValue(base::DictionaryValue* value) const { 88 value->SetInteger("resource_id", resource_id); 89 value->SetBoolean("premultiplied_alpha", premultiplied_alpha); 90 value->Set("uv_top_left", MathUtil::AsValue(uv_top_left).release()); 91 value->Set("uv_bottom_right", MathUtil::AsValue(uv_bottom_right).release()); 92 value->SetInteger("background_color", background_color); 93 scoped_ptr<ListValue> vertex_opacity_value(new ListValue); 94 for (size_t i = 0; i < 4; ++i) 95 vertex_opacity_value->AppendDouble(vertex_opacity[i]); 96 value->Set("vertex_opacity", vertex_opacity_value.release()); 97 value->SetBoolean("flipped", flipped); 98 } 99 100 } // namespace cc 101