OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/quads/texture_draw_quad.h" | 5 #include "cc/quads/texture_draw_quad.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "ui/gfx/vector2d_f.h" | 8 #include "ui/gfx/vector2d_f.h" |
9 | 9 |
10 namespace cc { | 10 namespace cc { |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 // Grab our scale and make sure it's positive. | 84 // Grab our scale and make sure it's positive. |
85 float x_scale = static_cast<float>(quadTransform().matrix().getDouble(0, 0)); | 85 float x_scale = static_cast<float>(quadTransform().matrix().getDouble(0, 0)); |
86 float y_scale = static_cast<float>(quadTransform().matrix().getDouble(1, 1)); | 86 float y_scale = static_cast<float>(quadTransform().matrix().getDouble(1, 1)); |
87 | 87 |
88 // Grab our offset. | 88 // Grab our offset. |
89 gfx::Vector2dF offset( | 89 gfx::Vector2dF offset( |
90 static_cast<float>(quadTransform().matrix().getDouble(0, 3)), | 90 static_cast<float>(quadTransform().matrix().getDouble(0, 3)), |
91 static_cast<float>(quadTransform().matrix().getDouble(1, 3))); | 91 static_cast<float>(quadTransform().matrix().getDouble(1, 3))); |
92 | 92 |
93 // Transform the rect by the scale and offset. | 93 // Transform the rect by the scale and offset. |
94 gfx::RectF rectF = rect; | 94 gfx::RectF rect_f = rect; |
95 rectF.Scale(x_scale, y_scale); | 95 rect_f.Scale(x_scale, y_scale); |
96 rectF += offset; | 96 rect_f += offset; |
97 | 97 |
98 // Perform clipping and check to see if the result is empty. | 98 // Perform clipping and check to see if the result is empty. |
99 gfx::RectF clippedRect = IntersectRects(rectF, clipRect()); | 99 gfx::RectF clipped_rect = IntersectRects(rect_f, clipRect()); |
100 if (clippedRect.IsEmpty()) { | 100 if (clipped_rect.IsEmpty()) { |
101 rect = gfx::Rect(); | 101 rect = gfx::Rect(); |
102 uv_top_left = gfx::PointF(); | 102 uv_top_left = gfx::PointF(); |
103 uv_bottom_right = gfx::PointF(); | 103 uv_bottom_right = gfx::PointF(); |
104 return true; | 104 return true; |
105 } | 105 } |
106 | 106 |
107 // Create a new uv-rect by clipping the old one to the new bounds. | 107 // Create a new uv-rect by clipping the old one to the new bounds. |
108 gfx::Vector2dF uv_scale(uv_bottom_right - uv_top_left); | 108 gfx::Vector2dF uv_scale(uv_bottom_right - uv_top_left); |
109 uv_scale.Scale(1.f / rectF.width(), 1.f / rectF.height()); | 109 uv_scale.Scale(1.f / rect_f.width(), 1.f / rect_f.height()); |
110 uv_bottom_right = uv_top_left + | 110 uv_bottom_right = uv_top_left + |
111 gfx::ScaleVector2d( | 111 gfx::ScaleVector2d( |
112 clippedRect.bottom_right() - rectF.origin(), | 112 clipped_rect.bottom_right() - rect_f.origin(), |
113 uv_scale.x(), | 113 uv_scale.x(), |
114 uv_scale.y()); | 114 uv_scale.y()); |
115 uv_top_left = uv_top_left + | 115 uv_top_left = uv_top_left + |
116 gfx::ScaleVector2d( | 116 gfx::ScaleVector2d( |
117 clippedRect.origin() - rectF.origin(), | 117 clipped_rect.origin() - rect_f.origin(), |
118 uv_scale.x(), | 118 uv_scale.x(), |
119 uv_scale.y()); | 119 uv_scale.y()); |
120 | 120 |
121 // Indexing according to the quad vertex generation: | 121 // Indexing according to the quad vertex generation: |
122 // 1--2 | 122 // 1--2 |
123 // | | | 123 // | | |
124 // 0--3 | 124 // 0--3 |
125 if (vertex_opacity[0] != vertex_opacity[1] | 125 if (vertex_opacity[0] != vertex_opacity[1] |
126 || vertex_opacity[0] != vertex_opacity[2] | 126 || vertex_opacity[0] != vertex_opacity[2] |
127 || vertex_opacity[0] != vertex_opacity[3]) { | 127 || vertex_opacity[0] != vertex_opacity[3]) { |
128 const float x1 = (clippedRect.x() - rectF.x()) / rectF.width(); | 128 const float x1 = (clipped_rect.x() - rect_f.x()) / rect_f.width(); |
129 const float y1 = (clippedRect.y() - rectF.y()) / rectF.height(); | 129 const float y1 = (clipped_rect.y() - rect_f.y()) / rect_f.height(); |
130 const float x3 = (clippedRect.right() - rectF.x()) / rectF.width(); | 130 const float x3 = (clipped_rect.right() - rect_f.x()) / rect_f.width(); |
131 const float y3 = (clippedRect.bottom() - rectF.y()) / rectF.height(); | 131 const float y3 = (clipped_rect.bottom() - rect_f.y()) / rect_f.height(); |
132 const float x1y1 = x1 * vertex_opacity[2] + (1.0f - x1) * vertex_opacity[1]; | 132 const float x1y1 = x1 * vertex_opacity[2] + (1.0f - x1) * vertex_opacity[1]; |
133 const float x1y3 = x1 * vertex_opacity[3] + (1.0f - x1) * vertex_opacity[0]; | 133 const float x1y3 = x1 * vertex_opacity[3] + (1.0f - x1) * vertex_opacity[0]; |
134 const float x3y1 = x3 * vertex_opacity[2] + (1.0f - x3) * vertex_opacity[1]; | 134 const float x3y1 = x3 * vertex_opacity[2] + (1.0f - x3) * vertex_opacity[1]; |
135 const float x3y3 = x3 * vertex_opacity[3] + (1.0f - x3) * vertex_opacity[0]; | 135 const float x3y3 = x3 * vertex_opacity[3] + (1.0f - x3) * vertex_opacity[0]; |
136 vertex_opacity[0] = y3 * x1y3 + (1.0f - y3) * x1y1; | 136 vertex_opacity[0] = y3 * x1y3 + (1.0f - y3) * x1y1; |
137 vertex_opacity[1] = y1 * x1y3 + (1.0f - y1) * x1y1; | 137 vertex_opacity[1] = y1 * x1y3 + (1.0f - y1) * x1y1; |
138 vertex_opacity[2] = y1 * x3y3 + (1.0f - y1) * x3y1; | 138 vertex_opacity[2] = y1 * x3y3 + (1.0f - y1) * x3y1; |
139 vertex_opacity[3] = y3 * x3y3 + (1.0f - y3) * x3y1; | 139 vertex_opacity[3] = y3 * x3y3 + (1.0f - y3) * x3y1; |
140 } | 140 } |
141 | 141 |
142 // Move the clipped rectangle back into its space. | 142 // Move the clipped rectangle back into its space. |
143 clippedRect -= offset; | 143 clipped_rect -= offset; |
144 clippedRect.Scale(1.0f / x_scale, 1.0f / y_scale); | 144 clipped_rect.Scale(1.0f / x_scale, 1.0f / y_scale); |
145 rect = gfx::Rect(static_cast<int>(clippedRect.x() + 0.5f), | 145 rect = gfx::Rect(static_cast<int>(clipped_rect.x() + 0.5f), |
146 static_cast<int>(clippedRect.y() + 0.5f), | 146 static_cast<int>(clipped_rect.y() + 0.5f), |
147 static_cast<int>(clippedRect.width() + 0.5f), | 147 static_cast<int>(clipped_rect.width() + 0.5f), |
148 static_cast<int>(clippedRect.height() + 0.5f)); | 148 static_cast<int>(clipped_rect.height() + 0.5f)); |
149 return true; | 149 return true; |
150 } | 150 } |
151 | 151 |
152 } // namespace cc | 152 } // namespace cc |
OLD | NEW |