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
TextureDrawQuad()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
Create()25 scoped_ptr<TextureDrawQuad> TextureDrawQuad::Create() {
26 return make_scoped_ptr(new TextureDrawQuad);
27 }
28
SetNew(const SharedQuadState * shared_quad_state,gfx::Rect rect,gfx::Rect opaque_rect,unsigned resource_id,bool premultiplied_alpha,gfx::PointF uv_top_left,gfx::PointF uv_bottom_right,SkColor background_color,const float vertex_opacity[4],bool flipped)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
SetAll(const SharedQuadState * shared_quad_state,gfx::Rect rect,gfx::Rect opaque_rect,gfx::Rect visible_rect,bool needs_blending,unsigned resource_id,bool premultiplied_alpha,gfx::PointF uv_top_left,gfx::PointF uv_bottom_right,SkColor background_color,const float vertex_opacity[4],bool flipped)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
IterateResources(const ResourceIteratorCallback & callback)77 void TextureDrawQuad::IterateResources(
78 const ResourceIteratorCallback& callback) {
79 resource_id = callback.Run(resource_id);
80 }
81
MaterialCast(const DrawQuad * quad)82 const TextureDrawQuad* TextureDrawQuad::MaterialCast(const DrawQuad* quad) {
83 DCHECK(quad->material == DrawQuad::TEXTURE_CONTENT);
84 return static_cast<const TextureDrawQuad*>(quad);
85 }
86
ExtendValue(base::DictionaryValue * value) const87 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