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/debug/trace_event_argument.h" 8 #include "base/logging.h" 9 #include "base/values.h" 10 #include "cc/base/math_util.h" 11 #include "ui/gfx/vector2d_f.h" 12 13 namespace cc { 14 15 TextureDrawQuad::TextureDrawQuad() 16 : resource_id(0), 17 premultiplied_alpha(false), 18 background_color(SK_ColorTRANSPARENT), 19 flipped(false) { 20 this->vertex_opacity[0] = 0.f; 21 this->vertex_opacity[1] = 0.f; 22 this->vertex_opacity[2] = 0.f; 23 this->vertex_opacity[3] = 0.f; 24 } 25 26 void TextureDrawQuad::SetNew(const SharedQuadState* shared_quad_state, 27 const gfx::Rect& rect, 28 const gfx::Rect& opaque_rect, 29 const gfx::Rect& visible_rect, 30 unsigned resource_id, 31 bool premultiplied_alpha, 32 const gfx::PointF& uv_top_left, 33 const gfx::PointF& uv_bottom_right, 34 SkColor background_color, 35 const float vertex_opacity[4], 36 bool flipped) { 37 bool needs_blending = vertex_opacity[0] != 1.0f || vertex_opacity[1] != 1.0f 38 || vertex_opacity[2] != 1.0f || vertex_opacity[3] != 1.0f; 39 DrawQuad::SetAll(shared_quad_state, DrawQuad::TEXTURE_CONTENT, rect, 40 opaque_rect, visible_rect, needs_blending); 41 this->resource_id = resource_id; 42 this->premultiplied_alpha = premultiplied_alpha; 43 this->uv_top_left = uv_top_left; 44 this->uv_bottom_right = uv_bottom_right; 45 this->background_color = background_color; 46 this->vertex_opacity[0] = vertex_opacity[0]; 47 this->vertex_opacity[1] = vertex_opacity[1]; 48 this->vertex_opacity[2] = vertex_opacity[2]; 49 this->vertex_opacity[3] = vertex_opacity[3]; 50 this->flipped = flipped; 51 } 52 53 void TextureDrawQuad::SetAll(const SharedQuadState* shared_quad_state, 54 const gfx::Rect& rect, 55 const gfx::Rect& opaque_rect, 56 const gfx::Rect& visible_rect, bool needs_blending, 57 unsigned resource_id, bool premultiplied_alpha, 58 const gfx::PointF& uv_top_left, 59 const 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::debug::TracedValue* value) const { 88 value->SetInteger("resource_id", resource_id); 89 value->SetBoolean("premultiplied_alpha", premultiplied_alpha); 90 value->BeginArray("uv_top_left"); 91 MathUtil::AddToTracedValue(uv_top_left, value); 92 value->EndArray(); 93 94 value->BeginArray("uv_bottom_right"); 95 MathUtil::AddToTracedValue(uv_bottom_right, value); 96 value->EndArray(); 97 98 value->SetInteger("background_color", background_color); 99 100 value->BeginArray("vertex_opacity"); 101 for (size_t i = 0; i < 4; ++i) 102 value->AppendDouble(vertex_opacity[i]); 103 value->EndArray(); 104 105 value->SetBoolean("flipped", flipped); 106 } 107 108 } // namespace cc 109