summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cc/draw_quad_unittest.cc81
-rw-r--r--cc/gl_renderer.cc10
-rw-r--r--cc/heads_up_display_layer_impl.cc7
-rw-r--r--cc/nine_patch_layer_impl.cc16
-rw-r--r--cc/nine_patch_layer_impl_unittest.cc4
-rw-r--r--cc/scrollbar_layer_impl.cc10
-rw-r--r--cc/software_renderer.cc4
-rw-r--r--cc/test/render_pass_test_common.cc3
-rw-r--r--cc/texture_draw_quad.cc35
-rw-r--r--cc/texture_draw_quad.h9
-rw-r--r--cc/texture_layer.cc11
-rw-r--r--cc/texture_layer.h7
-rw-r--r--cc/texture_layer_impl.cc5
-rw-r--r--cc/texture_layer_impl.h6
-rw-r--r--cc/video_layer_impl.cc10
-rw-r--r--content/common/cc_messages.h3
-rw-r--r--content/common/cc_messages_unittest.cc3
-rw-r--r--content/renderer/browser_plugin/browser_plugin_compositing_helper.cc2
-rw-r--r--ui/compositor/layer.cc7
-rw-r--r--ui/gfx/size_base_impl.h7
-rw-r--r--webkit/compositor_bindings/web_external_texture_layer_impl.cc2
21 files changed, 73 insertions, 169 deletions
diff --git a/cc/draw_quad_unittest.cc b/cc/draw_quad_unittest.cc
index bd02ccf..41e1d2e 100644
--- a/cc/draw_quad_unittest.cc
+++ b/cc/draw_quad_unittest.cc
@@ -362,100 +362,29 @@ TEST(DrawQuadTest, copyTextureDrawQuad)
gfx::Rect opaqueRect(3, 7, 10, 12);
unsigned resourceId = 82;
bool premultipliedAlpha = true;
- gfx::PointF uvTopLeft(0.5f, 224.f);
- gfx::PointF uvBottomRight(51.5f, 260.f);
+ gfx::RectF uvRect(0.5f, 224.f, 51.f, 36.f);
const float vertex_opacity[] = {1.0f, 1.0f, 1.0f, 1.0f};
bool flipped = true;
CREATE_SHARED_STATE();
- CREATE_QUAD_7_NEW(TextureDrawQuad, opaqueRect, resourceId, premultipliedAlpha, uvTopLeft, uvBottomRight, vertex_opacity, flipped);
+ CREATE_QUAD_6_NEW(TextureDrawQuad, opaqueRect, resourceId, premultipliedAlpha, uvRect, vertex_opacity, flipped);
EXPECT_EQ(DrawQuad::TEXTURE_CONTENT, copyQuad->material);
EXPECT_RECT_EQ(opaqueRect, copyQuad->opaque_rect);
EXPECT_EQ(resourceId, copyQuad->resource_id);
EXPECT_EQ(premultipliedAlpha, copyQuad->premultiplied_alpha);
- EXPECT_EQ(uvTopLeft, copyQuad->uv_top_left);
- EXPECT_EQ(uvBottomRight, copyQuad->uv_bottom_right);
+ EXPECT_FLOAT_RECT_EQ(uvRect, copyQuad->uv_rect);
EXPECT_FLOAT_ARRAY_EQ(vertex_opacity, copyQuad->vertex_opacity, 4);
EXPECT_EQ(flipped, copyQuad->flipped);
- CREATE_QUAD_6_ALL(TextureDrawQuad, resourceId, premultipliedAlpha, uvTopLeft, uvBottomRight, vertex_opacity, flipped);
+ CREATE_QUAD_5_ALL(TextureDrawQuad, resourceId, premultipliedAlpha, uvRect, vertex_opacity, flipped);
EXPECT_EQ(DrawQuad::TEXTURE_CONTENT, copyQuad->material);
EXPECT_EQ(resourceId, copyQuad->resource_id);
EXPECT_EQ(premultipliedAlpha, copyQuad->premultiplied_alpha);
- EXPECT_EQ(uvTopLeft, copyQuad->uv_top_left);
- EXPECT_EQ(uvBottomRight, copyQuad->uv_bottom_right);
+ EXPECT_FLOAT_RECT_EQ(uvRect, copyQuad->uv_rect);
EXPECT_FLOAT_ARRAY_EQ(vertex_opacity, copyQuad->vertex_opacity, 4);
EXPECT_EQ(flipped, copyQuad->flipped);
}
-TEST(DrawQuadTest, clipTextureDrawQuad)
-{
- gfx::Rect opaqueRect(3, 7, 10, 12);
- unsigned resourceId = 82;
- bool premultipliedAlpha = true;
- bool flipped = true;
- CREATE_SHARED_STATE();
- // The original quad position is (30, 40) its size is 50*60.
- sharedState->content_to_target_transform = gfx::Transform(1.f, 0.f, 0.f, 1.f, 10.f, 20.f);
- // After transformation, the quad position is (40, 60) its size is 50*60.
- sharedState->clip_rect = gfx::Rect(50, 70, 30, 20);
-
- // The original quad is 'ABCD', the clipped quad is 'abcd':
- //40 50 90
- // B--:-------C 60
- // | b----c -|-70
- // | | | |
- // | a----d -|-90
- // | |
- // A----------D 120
- // UV and vertex opacity are stored per vertex on the parent rectangle 'ABCD'.
-
- // This is the UV value for vertex 'B'.
- gfx::PointF uvTopLeft(0.1f, 0.2f);
- // This is the UV value for vertex 'D'.
- gfx::PointF uvBottomRight(0.9f, 0.8f);
- // This the vertex opacity for the vertices 'ABCD'.
- const float vertexOpacity[] = {0.3f, 0.4f, 0.7f, 0.8f};
-
- {
- CREATE_QUAD_7_NEW(TextureDrawQuad, opaqueRect, resourceId, premultipliedAlpha, uvTopLeft, uvBottomRight, vertexOpacity, flipped);
- CREATE_QUAD_6_ALL(TextureDrawQuad, resourceId, premultipliedAlpha, uvTopLeft, uvBottomRight, vertexOpacity, flipped);
- EXPECT_TRUE(quadAll->PerformClipping());
-
- // This is the expected UV value for vertex 'b'.
- // uv(b) = uv(B) + (Bb / BD) * (uv(D) - uv(B))
- // 0.3 = 0.2 + (10 / 60) * (0.8 - 0.2)
- gfx::PointF uvTopLeftClipped(0.26f, 0.3f);
- // This is the expected UV value for vertex 'd'.
- // uv(d) = uv(B) + (Bd / BD) * (uv(D) - uv(B))
- gfx::PointF uvBottomRightClipped(0.74f, 0.5f);
- // This the expected vertex opacity for the vertices 'abcd'.
- // They are computed with a bilinear interpolation of the corner values.
- const float vertexOpacityClipped[] = {0.43f, 0.45f, 0.65f, 0.67f};
-
- EXPECT_EQ(uvTopLeftClipped, quadAll->uv_top_left);
- EXPECT_EQ(uvBottomRightClipped, quadAll->uv_bottom_right);
- EXPECT_FLOAT_ARRAY_EQ(vertexOpacityClipped, quadAll->vertex_opacity, 4);
- }
-
- uvTopLeft = gfx::PointF(0.8f, 0.7f);
- uvBottomRight = gfx::PointF(0.2f, 0.1f);
-
- {
- CREATE_QUAD_7_NEW(TextureDrawQuad, opaqueRect, resourceId, premultipliedAlpha, uvTopLeft, uvBottomRight, vertexOpacity, flipped);
- CREATE_QUAD_6_ALL(TextureDrawQuad, resourceId, premultipliedAlpha, uvTopLeft, uvBottomRight, vertexOpacity, flipped);
- EXPECT_TRUE(quadAll->PerformClipping());
-
- // This is the expected UV value for vertex 'b'.
- gfx::PointF uvTopLeftClipped(0.68f, 0.6f);
- // This is the expected UV value for vertex 'd'.
- gfx::PointF uvBottomRightClipped(0.32f, 0.4f);
-
- EXPECT_EQ(uvTopLeftClipped, quadAll->uv_top_left);
- EXPECT_EQ(uvBottomRightClipped, quadAll->uv_bottom_right);
- }
-}
-
TEST(DrawQuadTest, copyTileDrawQuad)
{
gfx::Rect opaqueRect(33, 44, 22, 33);
diff --git a/cc/gl_renderer.cc b/cc/gl_renderer.cc
index 219d60f..9bb2fde 100644
--- a/cc/gl_renderer.cc
+++ b/cc/gl_renderer.cc
@@ -1087,9 +1087,8 @@ void GLRenderer::enqueueTextureQuad(const DrawingFrame& frame, const TextureDraw
}
// Generate the uv-transform
- const gfx::PointF& uv0 = quad->uv_top_left;
- const gfx::PointF& uv1 = quad->uv_bottom_right;
- Float4 uv = {uv0.x(), uv0.y(), uv1.x() - uv0.x(), uv1.y() - uv0.y()};
+ const gfx::RectF& uvRect = quad->uv_rect;
+ Float4 uv = {uvRect.x(), uvRect.y(), uvRect.width(), uvRect.height()};
m_drawCache.uv_xform_data.push_back(uv);
// Generate the vertex opacity
@@ -1118,9 +1117,8 @@ void GLRenderer::drawTextureQuad(const DrawingFrame& frame, const TextureDrawQua
binding.set(textureProgram(), context());
setUseProgram(binding.programId);
GLC(context(), context()->uniform1i(binding.samplerLocation, 0));
- const gfx::PointF& uv0 = quad->uv_top_left;
- const gfx::PointF& uv1 = quad->uv_bottom_right;
- GLC(context(), context()->uniform4f(binding.texTransformLocation, uv0.x(), uv0.y(), uv1.x() - uv0.x(), uv1.y() - uv0.y()));
+ const gfx::RectF& uvRect = quad->uv_rect;
+ GLC(context(), context()->uniform4f(binding.texTransformLocation, uvRect.x(), uvRect.y(), uvRect.width(), uvRect.height()));
GLC(context(), context()->uniform1fv(binding.vertexOpacityLocation, 4, quad->vertex_opacity));
diff --git a/cc/heads_up_display_layer_impl.cc b/cc/heads_up_display_layer_impl.cc
index 5dbe328..1902296 100644
--- a/cc/heads_up_display_layer_impl.cc
+++ b/cc/heads_up_display_layer_impl.cc
@@ -98,12 +98,11 @@ void HeadsUpDisplayLayerImpl::appendQuads(QuadSink& quadSink, AppendQuadsData& a
gfx::Rect quadRect(gfx::Point(), bounds());
gfx::Rect opaqueRect(contentsOpaque() ? quadRect : gfx::Rect());
bool premultipliedAlpha = true;
- gfx::PointF uv_top_left(0.f, 0.f);
- gfx::PointF uv_bottom_right(1.f, 1.f);
- const float vertex_opacity[] = {1.f, 1.f, 1.f, 1.f};
+ gfx::RectF uvRect(0, 0, 1, 1);
+ const float vertex_opacity[] = {1.0f, 1.0f, 1.0f, 1.0f};
bool flipped = false;
scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::Create();
- quad->SetNew(sharedQuadState, quadRect, opaqueRect, m_hudTexture->id(), premultipliedAlpha, uv_top_left, uv_bottom_right, vertex_opacity, flipped);
+ quad->SetNew(sharedQuadState, quadRect, opaqueRect, m_hudTexture->id(), premultipliedAlpha, uvRect, vertex_opacity, flipped);
quadSink.append(quad.PassAs<DrawQuad>(), appendQuadsData);
}
diff --git a/cc/nine_patch_layer_impl.cc b/cc/nine_patch_layer_impl.cc
index 85ae221..8b5415b 100644
--- a/cc/nine_patch_layer_impl.cc
+++ b/cc/nine_patch_layer_impl.cc
@@ -112,35 +112,35 @@ void NinePatchLayerImpl::appendQuads(QuadSink& quadSink, AppendQuadsData& append
scoped_ptr<TextureDrawQuad> quad;
quad = TextureDrawQuad::Create();
- quad->SetNew(sharedQuadState, topLeft, opaqueRect, m_resourceId, premultipliedAlpha, uvTopLeft.origin(), uvTopLeft.bottom_right(), vertex_opacity, flipped);
+ quad->SetNew(sharedQuadState, topLeft, opaqueRect, m_resourceId, premultipliedAlpha, uvTopLeft, vertex_opacity, flipped);
quadSink.append(quad.PassAs<DrawQuad>(), appendQuadsData);
quad = TextureDrawQuad::Create();
- quad->SetNew(sharedQuadState, topRight, opaqueRect, m_resourceId, premultipliedAlpha, uvTopRight.origin(), uvTopRight.bottom_right(), vertex_opacity, flipped);
+ quad->SetNew(sharedQuadState, topRight, opaqueRect, m_resourceId, premultipliedAlpha, uvTopRight, vertex_opacity, flipped);
quadSink.append(quad.PassAs<DrawQuad>(), appendQuadsData);
quad = TextureDrawQuad::Create();
- quad->SetNew(sharedQuadState, bottomLeft, opaqueRect, m_resourceId, premultipliedAlpha, uvBottomLeft.origin(), uvBottomLeft.bottom_right(), vertex_opacity, flipped);
+ quad->SetNew(sharedQuadState, bottomLeft, opaqueRect, m_resourceId, premultipliedAlpha, uvBottomLeft, vertex_opacity, flipped);
quadSink.append(quad.PassAs<DrawQuad>(), appendQuadsData);
quad = TextureDrawQuad::Create();
- quad->SetNew(sharedQuadState, bottomRight, opaqueRect, m_resourceId, premultipliedAlpha, uvBottomRight.origin(), uvBottomRight.bottom_right(), vertex_opacity, flipped);
+ quad->SetNew(sharedQuadState, bottomRight, opaqueRect, m_resourceId, premultipliedAlpha, uvBottomRight, vertex_opacity, flipped);
quadSink.append(quad.PassAs<DrawQuad>(), appendQuadsData);
quad = TextureDrawQuad::Create();
- quad->SetNew(sharedQuadState, top, opaqueRect, m_resourceId, premultipliedAlpha, uvTop.origin(), uvTop.bottom_right(), vertex_opacity, flipped);
+ quad->SetNew(sharedQuadState, top, opaqueRect, m_resourceId, premultipliedAlpha, uvTop, vertex_opacity, flipped);
quadSink.append(quad.PassAs<DrawQuad>(), appendQuadsData);
quad = TextureDrawQuad::Create();
- quad->SetNew(sharedQuadState, left, opaqueRect, m_resourceId, premultipliedAlpha, uvLeft.origin(), uvLeft.bottom_right(), vertex_opacity, flipped);
+ quad->SetNew(sharedQuadState, left, opaqueRect, m_resourceId, premultipliedAlpha, uvLeft, vertex_opacity, flipped);
quadSink.append(quad.PassAs<DrawQuad>(), appendQuadsData);
quad = TextureDrawQuad::Create();
- quad->SetNew(sharedQuadState, right, opaqueRect, m_resourceId, premultipliedAlpha, uvRight.origin(), uvRight.bottom_right(), vertex_opacity, flipped);
+ quad->SetNew(sharedQuadState, right, opaqueRect, m_resourceId, premultipliedAlpha, uvRight, vertex_opacity, flipped);
quadSink.append(quad.PassAs<DrawQuad>(), appendQuadsData);
quad = TextureDrawQuad::Create();
- quad->SetNew(sharedQuadState, bottom, opaqueRect, m_resourceId, premultipliedAlpha, uvBottom.origin(), uvBottom.bottom_right(), vertex_opacity, flipped);
+ quad->SetNew(sharedQuadState, bottom, opaqueRect, m_resourceId, premultipliedAlpha, uvBottom, vertex_opacity, flipped);
quadSink.append(quad.PassAs<DrawQuad>(), appendQuadsData);
}
diff --git a/cc/nine_patch_layer_impl_unittest.cc b/cc/nine_patch_layer_impl_unittest.cc
index fbf765b..aa9bc01 100644
--- a/cc/nine_patch_layer_impl_unittest.cc
+++ b/cc/nine_patch_layer_impl_unittest.cc
@@ -82,7 +82,7 @@ TEST(NinePatchLayerImplTest, verifyDrawQuads)
for (size_t i = 0; i < quads.size(); ++i) {
DrawQuad* quad = quads[i];
const TextureDrawQuad* texQuad = TextureDrawQuad::MaterialCast(quad);
- gfx::RectF texRect = gfx::BoundingRect(texQuad->uv_top_left, texQuad->uv_bottom_right);
+ gfx::RectF texRect = texQuad->uv_rect;
texRect.Scale(bitmapSize.width(), bitmapSize.height());
texRemaining.Subtract(Region(ToRoundedIntRect(texRect)));
}
@@ -135,7 +135,7 @@ TEST(NinePatchLayerImplTest, verifyDrawQuadsForSqueezedLayer)
for (size_t i = 0; i < quads.size(); ++i) {
DrawQuad* quad = quads[i];
const TextureDrawQuad* texQuad = TextureDrawQuad::MaterialCast(quad);
- gfx::RectF texRect = gfx::BoundingRect(texQuad->uv_top_left, texQuad->uv_bottom_right);
+ gfx::RectF texRect = texQuad->uv_rect;
texRect.Scale(bitmapSize.width(), bitmapSize.height());
texRemaining.Subtract(Region(ToRoundedIntRect(texRect)));
}
diff --git a/cc/scrollbar_layer_impl.cc b/cc/scrollbar_layer_impl.cc
index 67344ce..a42ff17 100644
--- a/cc/scrollbar_layer_impl.cc
+++ b/cc/scrollbar_layer_impl.cc
@@ -117,8 +117,7 @@ void ScrollbarLayerImpl::appendQuads(QuadSink& quadSink, AppendQuadsData& append
{
bool premultipledAlpha = false;
bool flipped = false;
- gfx::PointF uvTopLeft(0.f, 0.f);
- gfx::PointF uvBottomRight(1.f, 1.f);
+ gfx::RectF uvRect(0, 0, 1, 1);
gfx::Rect boundsRect(gfx::Point(), bounds());
gfx::Rect contentBoundsRect(gfx::Point(), contentBounds());
@@ -135,7 +134,7 @@ void ScrollbarLayerImpl::appendQuads(QuadSink& quadSink, AppendQuadsData& append
gfx::Rect opaqueRect;
const float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f};
scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::Create();
- quad->SetNew(sharedQuadState, quadRect, opaqueRect, m_thumbResourceId, premultipledAlpha, uvTopLeft, uvBottomRight, opacity, flipped);
+ quad->SetNew(sharedQuadState, quadRect, opaqueRect, m_thumbResourceId, premultipledAlpha, uvRect, opacity, flipped);
quadSink.append(quad.PassAs<DrawQuad>(), appendQuadsData);
}
@@ -146,10 +145,9 @@ void ScrollbarLayerImpl::appendQuads(QuadSink& quadSink, AppendQuadsData& append
if (m_foreTrackResourceId && !foreTrackRect.isEmpty()) {
gfx::Rect quadRect(scrollbarLayerRectToContentRect(foreTrackRect));
gfx::Rect opaqueRect(contentsOpaque() ? quadRect : gfx::Rect());
- gfx::RectF uvRect(toUVRect(foreTrackRect, boundsRect));
const float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f};
scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::Create();
- quad->SetNew(sharedQuadState, quadRect, opaqueRect, m_foreTrackResourceId, premultipledAlpha, uvRect.origin(), uvRect.bottom_right(), opacity, flipped);
+ quad->SetNew(sharedQuadState, quadRect, opaqueRect, m_foreTrackResourceId, premultipledAlpha, toUVRect(foreTrackRect, boundsRect), opacity, flipped);
quadSink.append(quad.PassAs<DrawQuad>(), appendQuadsData);
}
@@ -160,7 +158,7 @@ void ScrollbarLayerImpl::appendQuads(QuadSink& quadSink, AppendQuadsData& append
gfx::Rect opaqueRect(contentsOpaque() ? quadRect : gfx::Rect());
const float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f};
scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::Create();
- quad->SetNew(sharedQuadState, quadRect, opaqueRect, m_backTrackResourceId, premultipledAlpha, uvTopLeft, uvBottomRight, opacity, flipped);
+ quad->SetNew(sharedQuadState, quadRect, opaqueRect, m_backTrackResourceId, premultipledAlpha, uvRect, opacity, flipped);
quadSink.append(quad.PassAs<DrawQuad>(), appendQuadsData);
}
}
diff --git a/cc/software_renderer.cc b/cc/software_renderer.cc
index 11466da..785ed6b 100644
--- a/cc/software_renderer.cc
+++ b/cc/software_renderer.cc
@@ -259,9 +259,7 @@ void SoftwareRenderer::drawTextureQuad(const DrawingFrame& frame, const TextureD
// FIXME: Add support for non-premultiplied alpha.
ResourceProvider::ScopedReadLockSoftware lock(m_resourceProvider, quad->resource_id);
const SkBitmap* bitmap = lock.skBitmap();
- gfx::RectF uvRect = gfx::ScaleRect(gfx::BoundingRect(quad->uv_top_left, quad->uv_bottom_right),
- bitmap->width(),
- bitmap->height());
+ gfx::RectF uvRect = gfx::ScaleRect(quad->uv_rect, bitmap->width(), bitmap->height());
SkRect skUvRect = gfx::RectFToSkRect(uvRect);
if (quad->flipped)
m_skCurrentCanvas->scale(1, -1);
diff --git a/cc/test/render_pass_test_common.cc b/cc/test/render_pass_test_common.cc
index eca8684..fafb84b 100644
--- a/cc/test/render_pass_test_common.cc
+++ b/cc/test/render_pass_test_common.cc
@@ -158,8 +158,7 @@ void TestRenderPass::AppendOneOfEveryQuadType(
opaque_rect,
resource1,
false,
- gfx::PointF(0.f, 0.f),
- gfx::PointF(1.f, 1.f),
+ rect,
vertex_opacity,
false);
AppendQuad(texture_quad.PassAs<DrawQuad>());
diff --git a/cc/texture_draw_quad.cc b/cc/texture_draw_quad.cc
index 9a657a7..6ce491a 100644
--- a/cc/texture_draw_quad.cc
+++ b/cc/texture_draw_quad.cc
@@ -5,7 +5,6 @@
#include "cc/texture_draw_quad.h"
#include "base/logging.h"
-#include "ui/gfx/vector2d_f.h"
namespace cc {
@@ -22,8 +21,7 @@ scoped_ptr<TextureDrawQuad> TextureDrawQuad::Create() {
void TextureDrawQuad::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,
+ const gfx::RectF& uv_rect,
const float vertex_opacity[4], bool flipped) {
gfx::Rect visible_rect = rect;
bool needs_blending = vertex_opacity[0] != 1.0f || vertex_opacity[1] != 1.0f
@@ -32,8 +30,7 @@ void TextureDrawQuad::SetNew(const SharedQuadState* shared_quad_state,
opaque_rect, visible_rect, needs_blending);
this->resource_id = resource_id;
this->premultiplied_alpha = premultiplied_alpha;
- this->uv_top_left = uv_top_left;
- this->uv_bottom_right = uv_bottom_right;
+ this->uv_rect = uv_rect;
this->vertex_opacity[0] = vertex_opacity[0];
this->vertex_opacity[1] = vertex_opacity[1];
this->vertex_opacity[2] = vertex_opacity[2];
@@ -45,15 +42,13 @@ void TextureDrawQuad::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,
+ const gfx::RectF& uv_rect,
const float vertex_opacity[4], bool flipped) {
DrawQuad::SetAll(shared_quad_state, DrawQuad::TEXTURE_CONTENT, rect,
opaque_rect, visible_rect, needs_blending);
this->resource_id = resource_id;
this->premultiplied_alpha = premultiplied_alpha;
- this->uv_top_left = uv_top_left;
- this->uv_bottom_right = uv_bottom_right;
+ this->uv_rect = uv_rect;
this->vertex_opacity[0] = vertex_opacity[0];
this->vertex_opacity[1] = vertex_opacity[1];
this->vertex_opacity[2] = vertex_opacity[2];
@@ -95,24 +90,18 @@ bool TextureDrawQuad::PerformClipping() {
gfx::RectF clippedRect = IntersectRects(rectF, clipRect());
if (clippedRect.IsEmpty()) {
rect = gfx::Rect();
- uv_top_left = gfx::PointF();
- uv_bottom_right = gfx::PointF();
+ uv_rect = gfx::RectF();
return true;
}
// Create a new uv-rect by clipping the old one to the new bounds.
- gfx::Vector2dF uv_scale(uv_bottom_right - uv_top_left);
- uv_scale.Scale(1.f / rectF.width(), 1.f / rectF.height());
- uv_bottom_right = uv_top_left +
- gfx::ScaleVector2d(
- clippedRect.bottom_right() - rectF.origin(),
- uv_scale.x(),
- uv_scale.y());
- uv_top_left = uv_top_left +
- gfx::ScaleVector2d(
- clippedRect.origin() - rectF.origin(),
- uv_scale.x(),
- uv_scale.y());
+ uv_rect = gfx::RectF(
+ uv_rect.x()
+ + uv_rect.width() / rectF.width() * (clippedRect.x() - rectF.x()),
+ uv_rect.y()
+ + uv_rect.height() / rectF.height() * (clippedRect.y() - rectF.y()),
+ uv_rect.width() / rectF.width() * clippedRect.width(),
+ uv_rect.height() / rectF.height() * clippedRect.height());
// Indexing according to the quad vertex generation:
// 1--2
diff --git a/cc/texture_draw_quad.h b/cc/texture_draw_quad.h
index df50558..6ec2934 100644
--- a/cc/texture_draw_quad.h
+++ b/cc/texture_draw_quad.h
@@ -21,8 +21,7 @@ class CC_EXPORT TextureDrawQuad : public DrawQuad {
gfx::Rect opaque_rect,
unsigned resource_id,
bool premultiplied_alpha,
- gfx::PointF uv_top_left,
- gfx::PointF uv_bottom_right,
+ const gfx::RectF& uv_rect,
const float vertex_opacity[4],
bool flipped);
@@ -33,15 +32,13 @@ class CC_EXPORT TextureDrawQuad : public DrawQuad {
bool needs_blending,
unsigned resource_id,
bool premultiplied_alpha,
- gfx::PointF uv_top_left,
- gfx::PointF uv_bottom_right,
+ const gfx::RectF& uv_rect,
const float vertex_opacity[4],
bool flipped);
unsigned resource_id;
bool premultiplied_alpha;
- gfx::PointF uv_top_left;
- gfx::PointF uv_bottom_right;
+ gfx::RectF uv_rect;
float vertex_opacity[4];
bool flipped;
diff --git a/cc/texture_layer.cc b/cc/texture_layer.cc
index dd12abd..575fd5f 100644
--- a/cc/texture_layer.cc
+++ b/cc/texture_layer.cc
@@ -37,8 +37,7 @@ TextureLayer::TextureLayer(TextureLayerClient* client, bool usesMailbox)
, m_client(client)
, m_usesMailbox(usesMailbox)
, m_flipped(true)
- , m_uvTopLeft(0.f, 0.f)
- , m_uvBottomRight(1.f, 1.f)
+ , m_uvRect(0, 0, 1, 1)
, m_premultipliedAlpha(true)
, m_rateLimitContext(false)
, m_contextLost(false)
@@ -74,10 +73,9 @@ void TextureLayer::setFlipped(bool flipped)
setNeedsCommit();
}
-void TextureLayer::setUV(gfx::PointF topLeft, gfx::PointF bottomRight)
+void TextureLayer::setUVRect(const gfx::RectF& rect)
{
- m_uvTopLeft = topLeft;
- m_uvBottomRight = bottomRight;
+ m_uvRect = rect;
setNeedsCommit();
}
@@ -180,8 +178,7 @@ void TextureLayer::pushPropertiesTo(LayerImpl* layer)
TextureLayerImpl* textureLayer = static_cast<TextureLayerImpl*>(layer);
textureLayer->setFlipped(m_flipped);
- textureLayer->setUVTopLeft(m_uvTopLeft);
- textureLayer->setUVBottomRight(m_uvBottomRight);
+ textureLayer->setUVRect(m_uvRect);
textureLayer->setVertexOpacity(m_vertexOpacity);
textureLayer->setPremultipliedAlpha(m_premultipliedAlpha);
if (m_usesMailbox) {
diff --git a/cc/texture_layer.h b/cc/texture_layer.h
index bf6ac46..36aa866 100644
--- a/cc/texture_layer.h
+++ b/cc/texture_layer.h
@@ -39,8 +39,8 @@ public:
// Sets whether this texture should be Y-flipped at draw time. Defaults to true.
void setFlipped(bool);
- // Sets a UV transform to be used at draw time. Defaults to (0, 0) and (1, 1).
- void setUV(gfx::PointF topLeft, gfx::PointF bottomRight);
+ // Sets a UV transform to be used at draw time. Defaults to (0, 0, 1, 1).
+ void setUVRect(const gfx::RectF&);
// Sets an opacity value per vertex. It will be multiplied by the layer opacity value.
void setVertexOpacity(float bottomLeft, float topLeft, float topRight, float bottomRight);
@@ -81,8 +81,7 @@ private:
MailboxCallback m_mailboxReleaseCallback;
bool m_flipped;
- gfx::PointF m_uvTopLeft;
- gfx::PointF m_uvBottomRight;
+ gfx::RectF m_uvRect;
// [bottom left, top left, top right, bottom right]
float m_vertexOpacity[4];
bool m_premultipliedAlpha;
diff --git a/cc/texture_layer_impl.cc b/cc/texture_layer_impl.cc
index d1a48da..b94fe13 100644
--- a/cc/texture_layer_impl.cc
+++ b/cc/texture_layer_impl.cc
@@ -18,8 +18,7 @@ TextureLayerImpl::TextureLayerImpl(LayerTreeImpl* treeImpl, int id, bool usesMai
, m_externalTextureResource(0)
, m_premultipliedAlpha(true)
, m_flipped(true)
- , m_uvTopLeft(0.f, 0.f)
- , m_uvBottomRight(1.f, 1.f)
+ , m_uvRect(0, 0, 1, 1)
, m_hasPendingMailbox(false)
, m_usesMailbox(usesMailbox)
{
@@ -88,7 +87,7 @@ void TextureLayerImpl::appendQuads(QuadSink& quadSink, AppendQuadsData& appendQu
gfx::Rect quadRect(gfx::Point(), contentBounds());
gfx::Rect opaqueRect(contentsOpaque() ? quadRect : gfx::Rect());
scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::Create();
- quad->SetNew(sharedQuadState, quadRect, opaqueRect, m_externalTextureResource, m_premultipliedAlpha, m_uvTopLeft, m_uvBottomRight, m_vertexOpacity, m_flipped);
+ quad->SetNew(sharedQuadState, quadRect, opaqueRect, m_externalTextureResource, m_premultipliedAlpha, m_uvRect, m_vertexOpacity, m_flipped);
// Perform explicit clipping on a quad to avoid setting a scissor later.
if (sharedQuadState->is_clipped && quad->PerformClipping())
diff --git a/cc/texture_layer_impl.h b/cc/texture_layer_impl.h
index b7e5998..0f0ac3e 100644
--- a/cc/texture_layer_impl.h
+++ b/cc/texture_layer_impl.h
@@ -33,8 +33,7 @@ public:
void setTextureId(unsigned id) { m_textureId = id; }
void setPremultipliedAlpha(bool premultipliedAlpha) { m_premultipliedAlpha = premultipliedAlpha; }
void setFlipped(bool flipped) { m_flipped = flipped; }
- void setUVTopLeft(gfx::PointF topLeft) { m_uvTopLeft = topLeft; }
- void setUVBottomRight(gfx::PointF bottomRight) { m_uvBottomRight = bottomRight; }
+ void setUVRect(const gfx::RectF& rect) { m_uvRect = rect; }
// 1--2
// | |
@@ -53,8 +52,7 @@ private:
ResourceProvider::ResourceId m_externalTextureResource;
bool m_premultipliedAlpha;
bool m_flipped;
- gfx::PointF m_uvTopLeft;
- gfx::PointF m_uvBottomRight;
+ gfx::RectF m_uvRect;
float m_vertexOpacity[4];
bool m_hasPendingMailbox;
diff --git a/cc/video_layer_impl.cc b/cc/video_layer_impl.cc
index b536bbe..908472c 100644
--- a/cc/video_layer_impl.cc
+++ b/cc/video_layer_impl.cc
@@ -225,24 +225,22 @@ void VideoLayerImpl::appendQuads(QuadSink& quadSink, AppendQuadsData& appendQuad
// RGBA software decoder.
const FramePlane& plane = m_framePlanes[media::VideoFrame::kRGBPlane];
bool premultipliedAlpha = true;
- gfx::PointF uvTopLeft(0.f, 0.f);
- gfx::PointF uvBottomRight(texWidthScale, texHeightScale);
+ gfx::RectF uvRect(0, 0, texWidthScale, texHeightScale);
const float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f};
bool flipped = false;
scoped_ptr<TextureDrawQuad> textureQuad = TextureDrawQuad::Create();
- textureQuad->SetNew(sharedQuadState, quadRect, opaqueRect, plane.resourceId, premultipliedAlpha, uvTopLeft, uvBottomRight, opacity, flipped);
+ textureQuad->SetNew(sharedQuadState, quadRect, opaqueRect, plane.resourceId, premultipliedAlpha, uvRect, opacity, flipped);
quadSink.append(textureQuad.PassAs<DrawQuad>(), appendQuadsData);
break;
}
case GL_TEXTURE_2D: {
// NativeTexture hardware decoder.
bool premultipliedAlpha = true;
- gfx::PointF uvTopLeft(0.f, 0.f);
- gfx::PointF uvBottomRight(texWidthScale, texHeightScale);
+ gfx::RectF uvRect(0, 0, texWidthScale, texHeightScale);
const float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f};
bool flipped = false;
scoped_ptr<TextureDrawQuad> textureQuad = TextureDrawQuad::Create();
- textureQuad->SetNew(sharedQuadState, quadRect, opaqueRect, m_externalTextureResource, premultipliedAlpha, uvTopLeft, uvBottomRight, opacity, flipped);
+ textureQuad->SetNew(sharedQuadState, quadRect, opaqueRect, m_externalTextureResource, premultipliedAlpha, uvRect, opacity, flipped);
quadSink.append(textureQuad.PassAs<DrawQuad>(), appendQuadsData);
break;
}
diff --git a/content/common/cc_messages.h b/content/common/cc_messages.h
index d0d1da6..1a7bcc0 100644
--- a/content/common/cc_messages.h
+++ b/content/common/cc_messages.h
@@ -176,8 +176,7 @@ IPC_STRUCT_TRAITS_BEGIN(cc::TextureDrawQuad)
IPC_STRUCT_TRAITS_PARENT(cc::DrawQuad)
IPC_STRUCT_TRAITS_MEMBER(resource_id)
IPC_STRUCT_TRAITS_MEMBER(premultiplied_alpha)
- IPC_STRUCT_TRAITS_MEMBER(uv_top_left)
- IPC_STRUCT_TRAITS_MEMBER(uv_bottom_right)
+ IPC_STRUCT_TRAITS_MEMBER(uv_rect)
IPC_STRUCT_TRAITS_MEMBER(flipped)
IPC_STRUCT_TRAITS_END()
diff --git a/content/common/cc_messages_unittest.cc b/content/common/cc_messages_unittest.cc
index efa840d..7261439 100644
--- a/content/common/cc_messages_unittest.cc
+++ b/content/common/cc_messages_unittest.cc
@@ -144,8 +144,7 @@ class CCMessagesTest : public testing::Test {
void Compare(const TextureDrawQuad* a, const TextureDrawQuad* b) {
EXPECT_EQ(a->resource_id, b->resource_id);
EXPECT_EQ(a->premultiplied_alpha, b->premultiplied_alpha);
- EXPECT_EQ(a->uv_top_left, b->uv_top_left);
- EXPECT_EQ(a->uv_bottom_right, b->uv_bottom_right);
+ EXPECT_EQ(a->uv_rect, b->uv_rect);
EXPECT_EQ(a->flipped, b->flipped);
}
diff --git a/content/renderer/browser_plugin/browser_plugin_compositing_helper.cc b/content/renderer/browser_plugin/browser_plugin_compositing_helper.cc
index df54f1a..dd7d84f 100644
--- a/content/renderer/browser_plugin/browser_plugin_compositing_helper.cc
+++ b/content/renderer/browser_plugin/browser_plugin_compositing_helper.cc
@@ -94,7 +94,7 @@ void BrowserPluginCompositingHelper::UpdateUVRect() {
uv_rect.set_height(static_cast<float>(container_size_.height()) /
static_cast<float>(buffer_size_.height()));
}
- texture_layer_->setUV(uv_rect.origin(), uv_rect.bottom_right());
+ texture_layer_->setUVRect(uv_rect);
}
} // namespace content
diff --git a/ui/compositor/layer.cc b/ui/compositor/layer.cc
index 119a1cf..053ddac 100644
--- a/ui/compositor/layer.cc
+++ b/ui/compositor/layer.cc
@@ -786,11 +786,12 @@ void Layer::RecomputeDrawsContentAndUVRect() {
gfx::Size size(std::min(bounds().width(), texture_size.width()),
std::min(bounds().height(), texture_size.height()));
- gfx::PointF uv_top_left(0.f, 0.f);
- gfx::PointF uv_bottom_right(
+ gfx::RectF rect(
+ 0,
+ 0,
static_cast<float>(size.width())/texture_size.width(),
static_cast<float>(size.height())/texture_size.height());
- texture_layer_->setUV(uv_top_left, uv_bottom_right);
+ texture_layer_->setUVRect(rect);
cc_layer_->setBounds(ConvertSizeToPixel(this, size));
}
diff --git a/ui/gfx/size_base_impl.h b/ui/gfx/size_base_impl.h
index 9e87468..99b1145 100644
--- a/ui/gfx/size_base_impl.h
+++ b/ui/gfx/size_base_impl.h
@@ -16,13 +16,18 @@ namespace gfx {
template<typename Class, typename Type>
void SizeBase<Class, Type>::set_width(Type width) {
+#if !defined(OS_ANDROID)
+ // TODO(aelias): Remove these ifdefs for Android. See http://crbug.com/168927
DCHECK(!(width < 0));
+#endif
width_ = width < 0 ? 0 : width;
}
template<typename Class, typename Type>
void SizeBase<Class, Type>::set_height(Type height) {
+#if !defined(OS_ANDROID)
DCHECK(!(height < 0));
+#endif
height_ = height < 0 ? 0 : height;
}
@@ -30,8 +35,10 @@ template<typename Class, typename Type>
SizeBase<Class, Type>::SizeBase(Type width, Type height)
: width_(width < 0 ? 0 : width),
height_(height < 0 ? 0 : height) {
+#if !defined(OS_ANDROID)
DCHECK(!(width < 0));
DCHECK(!(height < 0));
+#endif
}
} // namespace gfx
diff --git a/webkit/compositor_bindings/web_external_texture_layer_impl.cc b/webkit/compositor_bindings/web_external_texture_layer_impl.cc
index e3479f2..08d8f11 100644
--- a/webkit/compositor_bindings/web_external_texture_layer_impl.cc
+++ b/webkit/compositor_bindings/web_external_texture_layer_impl.cc
@@ -49,7 +49,7 @@ void WebExternalTextureLayerImpl::setFlipped(bool flipped)
void WebExternalTextureLayerImpl::setUVRect(const WebFloatRect& rect)
{
- static_cast<TextureLayer*>(m_layer->layer())->setUV(gfx::PointF(rect.x, rect.y), gfx::PointF(rect.x + rect.width, rect.y + rect.height));
+ static_cast<TextureLayer*>(m_layer->layer())->setUVRect(rect);
}
void WebExternalTextureLayerImpl::setOpaque(bool opaque)