diff options
| author | Romain Guy <romainguy@google.com> | 2012-02-16 19:24:51 -0800 |
|---|---|---|
| committer | Romain Guy <romainguy@google.com> | 2012-02-17 13:10:00 -0800 |
| commit | 33f6beb10f98e8ba96250e284876d607055d278d (patch) | |
| tree | 215fc7d5624b6b41a018374f5d19f7dac84cf72b /core/java/android/widget/TextView.java | |
| parent | 445c83c7755fae179cf3328e89307e2775e97a5e (diff) | |
| download | frameworks_base-33f6beb10f98e8ba96250e284876d607055d278d.zip frameworks_base-33f6beb10f98e8ba96250e284876d607055d278d.tar.gz frameworks_base-33f6beb10f98e8ba96250e284876d607055d278d.tar.bz2 | |
Record possible clip rejects when recording display lists
This optimization allows us to quickly skip operations that lie
entirely outside of the known bounds of a display list. Because
of ViewGroup.setClipChildren, we must keep the operations recorded
in the display list. setClipChildren(false) is however a very
uncommon operation and we will therefore often benefit from this
new optimization.
Change-Id: I0942c864e55298e6dccd9977d15adefbce3ba3ad
Diffstat (limited to 'core/java/android/widget/TextView.java')
| -rw-r--r-- | core/java/android/widget/TextView.java | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 7db8a1e..d29dc2e 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -5016,15 +5016,19 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener hardwareCanvas.setViewport(width, height); // The dirty rect should always be null for a display list hardwareCanvas.onPreDraw(null); + hardwareCanvas.translate(-mScrollX, -mScrollY); layout.draw(hardwareCanvas, highlight, mHighlightPaint, cursorOffsetVertical); + hardwareCanvas.translate(mScrollX, mScrollY); } finally { hardwareCanvas.onPostDraw(); mTextDisplayList.end(); mTextDisplayListIsValid = true; } } - ((HardwareCanvas) canvas).drawDisplayList(mTextDisplayList, - mScrollX + width, mScrollY + height, null); + canvas.translate(mScrollX, mScrollY); + ((HardwareCanvas) canvas).drawDisplayList(mTextDisplayList, width, height, null, + DisplayList.FLAG_CLIP_CHILDREN); + canvas.translate(-mScrollX, -mScrollY); } else { layout.draw(canvas, highlight, mHighlightPaint, cursorOffsetVertical); } |
