am c2b91a61: Merge "Modify the GL renderer\'s functor to pass the clip to WebView" into honeycomb-mr1

* commit 'c2b91a6113c30d3b994ef081fbd5b941200d55a4':
  Modify the GL renderer's functor to pass the clip to WebView
This commit is contained in:
Romain Guy
2011-03-16 17:26:41 -07:00
committed by Android Git Automerger
2 changed files with 26 additions and 7 deletions

View File

@@ -25,8 +25,7 @@ class Functor {
public:
Functor() {}
virtual ~Functor() {}
virtual status_t operator ()() { return true; }
virtual status_t operator ()(float* data, uint32_t len) { return true; }
virtual status_t operator ()(int what, void* data) { return NO_ERROR; }
};
}; // namespace android

View File

@@ -216,21 +216,41 @@ bool OpenGLRenderer::callDrawGLFunction(Functor *functor, Rect& dirty) {
setScissorFromClip();
}
Rect clip(*mSnapshot->clipRect);
clip.snapToPixelBoundaries();
#if RENDER_LAYERS_AS_REGIONS
// Since we don't know what the functor will draw, let's dirty
// tne entire clip region
if (hasLayer()) {
Rect clip(*mSnapshot->clipRect);
clip.snapToPixelBoundaries();
dirtyLayerUnchecked(clip, getRegion());
}
#endif
float bounds[4];
status_t result = (*functor)(&bounds[0], 4);
struct {
// Input: current clip rect
int clipLeft;
int clipTop;
int clipRight;
int clipBottom;
// Output: dirty region to redraw
float dirtyLeft;
float dirtyTop;
float dirtyRight;
float dirtyBottom;
} constraints;
constraints.clipLeft = clip.left;
constraints.clipTop = clip.top;
constraints.clipRight = clip.right;
constraints.clipBottom = clip.bottom;
status_t result = (*functor)(0, &constraints);
if (result != 0) {
Rect localDirty(bounds[0], bounds[1], bounds[2], bounds[3]);
Rect localDirty(constraints.dirtyLeft, constraints.dirtyTop,
constraints.dirtyRight, constraints.dirtyBottom);
dirty.unionWith(localDirty);
}