From a046dd9772cd8da4ead9edc7a89d9992ff0d38cf Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Mon, 24 Sep 2012 22:01:01 -0700 Subject: fix Layer croping in SurfaceFlinger Bug: 7224628 Change-Id: I9421f0a06b9a27fe00eefaa1dfab8c4309c380c9 --- services/surfaceflinger/LayerBase.cpp | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) (limited to 'services') diff --git a/services/surfaceflinger/LayerBase.cpp b/services/surfaceflinger/LayerBase.cpp index 5ae0ee0..d75dddd 100644 --- a/services/surfaceflinger/LayerBase.cpp +++ b/services/surfaceflinger/LayerBase.cpp @@ -232,10 +232,9 @@ void LayerBase::computeGeometry(const sp& hw, LayerMesh* me const Layer::State& s(drawingState()); const Transform tr(hw->getTransform() * s.transform); const uint32_t hw_h = hw->getHeight(); - const Rect& crop(s.active.crop); Rect win(s.active.w, s.active.h); - if (!crop.isEmpty()) { - win.intersect(crop, &win); + if (!s.active.crop.isEmpty()) { + win.intersect(s.active.crop, &win); } if (mesh) { tr.transform(mesh->mVertices[0], win.left, win.top); @@ -250,10 +249,9 @@ void LayerBase::computeGeometry(const sp& hw, LayerMesh* me Rect LayerBase::computeBounds() const { const Layer::State& s(drawingState()); - const Rect& crop(s.active.crop); Rect win(s.active.w, s.active.h); - if (!crop.isEmpty()) { - win.intersect(crop, &win); + if (!s.active.crop.isEmpty()) { + win.intersect(s.active.crop, &win); } return s.transform.transform(win); } @@ -400,14 +398,15 @@ void LayerBase::drawWithOpenGL(const sp& hw, const Region& GLfloat v; }; - Rect crop(s.active.w, s.active.h); + Rect win(s.active.w, s.active.h); if (!s.active.crop.isEmpty()) { - crop = s.active.crop; + win.intersect(s.active.crop, &win); } - GLfloat left = GLfloat(crop.left) / GLfloat(s.active.w); - GLfloat top = GLfloat(crop.top) / GLfloat(s.active.h); - GLfloat right = GLfloat(crop.right) / GLfloat(s.active.w); - GLfloat bottom = GLfloat(crop.bottom) / GLfloat(s.active.h); + + GLfloat left = GLfloat(win.left) / GLfloat(s.active.w); + GLfloat top = GLfloat(win.top) / GLfloat(s.active.h); + GLfloat right = GLfloat(win.right) / GLfloat(s.active.w); + GLfloat bottom = GLfloat(win.bottom) / GLfloat(s.active.h); TexCoords texCoords[4]; texCoords[0].u = left; -- cgit v1.1