diff options
| author | 2013-03-04 21:49:15 +0000 | |
|---|---|---|
| committer | 2013-03-04 21:49:16 +0000 | |
| commit | e7d32b19b46c65ff37001e456bedf68222599119 (patch) | |
| tree | d68f421e555d80614837b1fd83d55fef93dbceaa | |
| parent | 4c333e177220387cf6746d47e1948bbfcc374512 (diff) | |
| parent | 19d4dd8599cb870923ab349d2ab96cacffd9c6f5 (diff) | |
Merge "Take text scale/skew into account only when rendering into a layer" into jb-mr2-dev
| -rw-r--r-- | libs/hwui/OpenGLRenderer.cpp | 23 | ||||
| -rw-r--r-- | tests/HwAccelerationTest/src/com/android/test/hwui/Rotate3dTextActivity.java | 30 |
2 files changed, 44 insertions, 9 deletions
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index ff6f332e6791..c81bf7a8918d 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -2673,7 +2673,26 @@ status_t OpenGLRenderer::drawText(const char* text, int bytesCount, int count, alpha, mode, oldX, oldY); } - fontRenderer.setFont(paint, pureTranslate ? mat4::identity() : *mSnapshot->transform); + const bool hasActiveLayer = hasLayer(); + + const mat4* fontTransform; + if (CC_LIKELY(pureTranslate)) { + fontTransform = &mat4::identity(); + } else { + if (CC_UNLIKELY(isPerspective)) { + // When the below condition is true, we are rendering text with a + // perspective transform inside a layer (either an inline layer + // created by Canvas.saveLayer() or a hardware layer.) + if (hasActiveLayer || getTargetFbo() != 0) { + fontTransform = mSnapshot->transform; + } else { + fontTransform = &mat4::identity(); + } + } else { + fontTransform = mSnapshot->transform; + } + } + fontRenderer.setFont(paint, *fontTransform); // Pick the appropriate texture filtering bool linearFilter = !pureTranslate || fabs(y - (int) y) > 0.0f || fabs(x - (int) x) > 0.0f; @@ -2701,8 +2720,6 @@ status_t OpenGLRenderer::drawText(const char* text, int bytesCount, int count, const Rect* clip = isPerspective ? NULL : mSnapshot->clipRect; Rect bounds(FLT_MAX / 2.0f, FLT_MAX / 2.0f, FLT_MIN / 2.0f, FLT_MIN / 2.0f); - const bool hasActiveLayer = hasLayer(); - bool status; if (CC_UNLIKELY(paint->getTextAlign() != SkPaint::kLeft_Align)) { SkPaint paintCopy(*paint); diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/Rotate3dTextActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/Rotate3dTextActivity.java index 93b8705baa14..0368b2fffc06 100644 --- a/tests/HwAccelerationTest/src/com/android/test/hwui/Rotate3dTextActivity.java +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/Rotate3dTextActivity.java @@ -22,6 +22,8 @@ import android.graphics.Canvas; import android.graphics.Paint; import android.os.Bundle; import android.view.View; +import android.widget.FrameLayout; +import android.widget.LinearLayout; @SuppressWarnings({"UnusedDeclaration"}) public class Rotate3dTextActivity extends Activity { @@ -30,8 +32,28 @@ public class Rotate3dTextActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - final Rotate3dTextView view = new Rotate3dTextView(this); - setContentView(view); + final LinearLayout layout = new LinearLayout(this); + layout.setOrientation(LinearLayout.VERTICAL); + + Rotate3dTextView view = new Rotate3dTextView(this); + layout.addView(view, makeLayoutParams()); + + view = new Rotate3dTextView(this); + + FrameLayout container = new FrameLayout(this); + container.setLayerType(View.LAYER_TYPE_HARDWARE, null); + container.addView(view); + + layout.addView(container, makeLayoutParams()); + + setContentView(layout); + } + + private static LinearLayout.LayoutParams makeLayoutParams() { + LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, 0); + lp.weight = 1.0f; + return lp; } public static class Rotate3dTextView extends View { @@ -54,11 +76,7 @@ public class Rotate3dTextActivity extends Activity { @Override protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - canvas.drawText(TEXT, getWidth() / 2.0f, getHeight() / 2.0f, mPaint); - - invalidate(); } } } |