diff options
| author | 2015-07-29 18:14:46 +0000 | |
|---|---|---|
| committer | 2015-07-29 18:14:46 +0000 | |
| commit | 749e67438c7e2dbe2bb362dc07522a1702810455 (patch) | |
| tree | de6d44b60f147f7cd7781dcd51a50ea1f2c7f3b0 | |
| parent | 876d56612ab8ec7032f702905d694670e6c4febd (diff) | |
Revert "Support High Contrast Text for all canvas types"
bug:22820834
This reverts commit 876d56612ab8ec7032f702905d694670e6c4febd.
Change-Id: I4e07a0894095caaaf2fd36bfa6073d033542bfc4
| -rw-r--r-- | core/java/android/view/DisplayListCanvas.java | 14 | ||||
| -rw-r--r-- | core/jni/android_graphics_Canvas.cpp | 45 | ||||
| -rw-r--r-- | graphics/java/android/graphics/Canvas.java | 5 | ||||
| -rw-r--r-- | libs/hwui/Canvas.h | 3 | ||||
| -rw-r--r-- | libs/hwui/DisplayListCanvas.cpp | 38 | ||||
| -rw-r--r-- | libs/hwui/DisplayListCanvas.h | 19 | ||||
| -rw-r--r-- | libs/hwui/SkiaCanvas.cpp | 3 |
7 files changed, 67 insertions, 60 deletions
diff --git a/core/java/android/view/DisplayListCanvas.java b/core/java/android/view/DisplayListCanvas.java index 05fa45fc3ff2..ac98fa94975c 100644 --- a/core/java/android/view/DisplayListCanvas.java +++ b/core/java/android/view/DisplayListCanvas.java @@ -147,11 +147,25 @@ public class DisplayListCanvas extends Canvas { private static native int nGetMaximumTextureWidth(); private static native int nGetMaximumTextureHeight(); + /** + * Returns the native OpenGLRenderer object. + */ + long getRenderer() { + return mNativeCanvasWrapper; + } + /////////////////////////////////////////////////////////////////////////// // Setup /////////////////////////////////////////////////////////////////////////// @Override + public void setHighContrastText(boolean highContrastText) { + nSetHighContrastText(mNativeCanvasWrapper, highContrastText); + } + + private static native void nSetHighContrastText(long renderer, boolean highContrastText); + + @Override public void insertReorderBarrier() { nInsertReorderBarrier(mNativeCanvasWrapper, true); } diff --git a/core/jni/android_graphics_Canvas.cpp b/core/jni/android_graphics_Canvas.cpp index 43825adc7a80..1f0145315fc1 100644 --- a/core/jni/android_graphics_Canvas.cpp +++ b/core/jni/android_graphics_Canvas.cpp @@ -69,11 +69,6 @@ static jint getHeight(JNIEnv*, jobject, jlong canvasHandle) { return static_cast<jint>(get_canvas(canvasHandle)->height()); } -static void setHighContrastText(JNIEnv*, jobject, jlong canvasHandle, jboolean highContrastText) { - Canvas* canvas = get_canvas(canvasHandle); - canvas->setHighContrastText(highContrastText); -} - static jint getSaveCount(JNIEnv*, jobject, jlong canvasHandle) { return static_cast<jint>(get_canvas(canvasHandle)->getSaveCount()); } @@ -435,16 +430,6 @@ static void drawBitmapMesh(JNIEnv* env, jobject, jlong canvasHandle, jobject jbi vertA.ptr(), colorA.ptr(), paint); } -static void simplifyPaint(int color, SkPaint* paint) { - paint->setColor(color); - paint->setShader(nullptr); - paint->setColorFilter(nullptr); - paint->setLooper(nullptr); - paint->setStrokeWidth(4 + 0.04 * paint->getTextSize()); - paint->setStrokeJoin(SkPaint::kRound_Join); - paint->setLooper(nullptr); -} - class DrawTextFunctor { public: DrawTextFunctor(const Layout& layout, Canvas* canvas, uint16_t* glyphs, float* pos, @@ -469,32 +454,9 @@ public: } size_t glyphCount = end - start; - - if (CC_UNLIKELY(canvas->isHighContrastText())) { - // high contrast draw path - int color = paint.getColor(); - int channelSum = SkColorGetR(color) + SkColorGetG(color) + SkColorGetB(color); - bool darken = channelSum < (128 * 3); - - // outline - SkPaint outlinePaint(paint); - simplifyPaint(darken ? SK_ColorWHITE : SK_ColorBLACK, &outlinePaint); - outlinePaint.setStyle(SkPaint::kStrokeAndFill_Style); - canvas->drawText(glyphs + start, pos + (2 * start), glyphCount, outlinePaint, x, y, - bounds.mLeft, bounds.mTop, bounds.mRight, bounds.mBottom, totalAdvance); - - // inner - SkPaint innerPaint(paint); - simplifyPaint(darken ? SK_ColorBLACK : SK_ColorWHITE, &innerPaint); - innerPaint.setStyle(SkPaint::kFill_Style); - canvas->drawText(glyphs + start, pos + (2 * start), glyphCount, innerPaint, x, y, - bounds.mLeft, bounds.mTop, bounds.mRight, bounds.mBottom, totalAdvance); - } else { - // standard draw path - canvas->drawText(glyphs + start, pos + (2 * start), glyphCount, paint, x, y, - bounds.mLeft, bounds.mTop, bounds.mRight, bounds.mBottom, - totalAdvance); - } + canvas->drawText(glyphs + start, pos + (2 * start), glyphCount, paint, x, y, + bounds.mLeft, bounds.mTop, bounds.mRight, bounds.mBottom, + totalAdvance); } private: const Layout& layout; @@ -717,7 +679,6 @@ static JNINativeMethod gMethods[] = { {"native_isOpaque","(J)Z", (void*) CanvasJNI::isOpaque}, {"native_getWidth","(J)I", (void*) CanvasJNI::getWidth}, {"native_getHeight","(J)I", (void*) CanvasJNI::getHeight}, - {"native_setHighContrastText","(JZ)V", (void*) CanvasJNI::setHighContrastText}, {"native_save","(JI)I", (void*) CanvasJNI::save}, {"native_saveLayer","(JFFFFJI)I", (void*) CanvasJNI::saveLayer}, {"native_saveLayerAlpha","(JFFFFII)I", (void*) CanvasJNI::saveLayerAlpha}, diff --git a/graphics/java/android/graphics/Canvas.java b/graphics/java/android/graphics/Canvas.java index 7bcc7f903964..73caf683ff3c 100644 --- a/graphics/java/android/graphics/Canvas.java +++ b/graphics/java/android/graphics/Canvas.java @@ -215,9 +215,7 @@ public class Canvas { } /** @hide */ - public void setHighContrastText(boolean highContrastText) { - native_setHighContrastText(mNativeCanvasWrapper, highContrastText); - } + public void setHighContrastText(boolean highContrastText) {} /** @hide */ public void insertReorderBarrier() {} @@ -1976,7 +1974,6 @@ public class Canvas { private static native void native_setBitmap(long canvasHandle, Bitmap bitmap); private static native boolean native_isOpaque(long canvasHandle); - private static native void native_setHighContrastText(long renderer, boolean highContrastText); private static native int native_getWidth(long canvasHandle); private static native int native_getHeight(long canvasHandle); diff --git a/libs/hwui/Canvas.h b/libs/hwui/Canvas.h index a0b87f9cadb6..116bc56bfe4d 100644 --- a/libs/hwui/Canvas.h +++ b/libs/hwui/Canvas.h @@ -62,9 +62,6 @@ public: virtual int width() = 0; virtual int height() = 0; - virtual void setHighContrastText(bool highContrastText) = 0; - virtual bool isHighContrastText() = 0; - // ---------------------------------------------------------------------------- // Canvas state operations // ---------------------------------------------------------------------------- diff --git a/libs/hwui/DisplayListCanvas.cpp b/libs/hwui/DisplayListCanvas.cpp index cc69d55cbfac..af18e03c60a9 100644 --- a/libs/hwui/DisplayListCanvas.cpp +++ b/libs/hwui/DisplayListCanvas.cpp @@ -437,6 +437,16 @@ void DisplayListCanvas::drawPosText(const uint16_t* text, const float* positions addDrawOp(op); } +static void simplifyPaint(int color, SkPaint* paint) { + paint->setColor(color); + paint->setShader(nullptr); + paint->setColorFilter(nullptr); + paint->setLooper(nullptr); + paint->setStrokeWidth(4 + 0.04 * paint->getTextSize()); + paint->setStrokeJoin(SkPaint::kRound_Join); + paint->setLooper(nullptr); +} + void DisplayListCanvas::drawText(const uint16_t* glyphs, const float* positions, int count, const SkPaint& paint, float x, float y, float boundsLeft, float boundsTop, float boundsRight, float boundsBottom, @@ -449,9 +459,31 @@ void DisplayListCanvas::drawText(const uint16_t* glyphs, const float* positions, positions = refBuffer<float>(positions, count * 2); Rect bounds(boundsLeft, boundsTop, boundsRight, boundsBottom); - DrawOp* op = new (alloc()) DrawTextOp(text, bytesCount, count, - x, y, positions, refPaint(&paint), totalAdvance, bounds); - addDrawOp(op); + if (CC_UNLIKELY(mHighContrastText)) { + // high contrast draw path + int color = paint.getColor(); + int channelSum = SkColorGetR(color) + SkColorGetG(color) + SkColorGetB(color); + bool darken = channelSum < (128 * 3); + + // outline + SkPaint* outlinePaint = copyPaint(&paint); + simplifyPaint(darken ? SK_ColorWHITE : SK_ColorBLACK, outlinePaint); + outlinePaint->setStyle(SkPaint::kStrokeAndFill_Style); + addDrawOp(new (alloc()) DrawTextOp(text, bytesCount, count, + x, y, positions, outlinePaint, totalAdvance, bounds)); // bounds? + + // inner + SkPaint* innerPaint = copyPaint(&paint); + simplifyPaint(darken ? SK_ColorBLACK : SK_ColorWHITE, innerPaint); + innerPaint->setStyle(SkPaint::kFill_Style); + addDrawOp(new (alloc()) DrawTextOp(text, bytesCount, count, + x, y, positions, innerPaint, totalAdvance, bounds)); + } else { + // standard draw path + DrawOp* op = new (alloc()) DrawTextOp(text, bytesCount, count, + x, y, positions, refPaint(&paint), totalAdvance, bounds); + addDrawOp(op); + } } void DisplayListCanvas::drawRegion(const SkRegion& region, const SkPaint& paint) { diff --git a/libs/hwui/DisplayListCanvas.h b/libs/hwui/DisplayListCanvas.h index efdf9ed336d9..6f2e2b50967e 100644 --- a/libs/hwui/DisplayListCanvas.h +++ b/libs/hwui/DisplayListCanvas.h @@ -101,6 +101,10 @@ public: // TODO: rename for consistency void callDrawGLFunction(Functor* functor); + void setHighContrastText(bool highContrastText) { + mHighContrastText = highContrastText; + } + // ---------------------------------------------------------------------------- // CanvasStateClient interface // ---------------------------------------------------------------------------- @@ -121,11 +125,6 @@ public: virtual int width() override { return mState.getWidth(); } virtual int height() override { return mState.getHeight(); } - virtual void setHighContrastText(bool highContrastText) override { - mHighContrastText = highContrastText; - } - virtual bool isHighContrastText() override { return mHighContrastText; } - // ---------------------------------------------------------------------------- // android/graphics/Canvas state operations // ---------------------------------------------------------------------------- @@ -305,6 +304,16 @@ private: return cachedPaint; } + inline SkPaint* copyPaint(const SkPaint* paint) { + if (!paint) return nullptr; + + SkPaint* returnPaint = new SkPaint(*paint); + std::unique_ptr<const SkPaint> copy(returnPaint); + mDisplayListData->paints.push_back(std::move(copy)); + + return returnPaint; + } + inline const SkRegion* refRegion(const SkRegion* region) { if (!region) { return region; diff --git a/libs/hwui/SkiaCanvas.cpp b/libs/hwui/SkiaCanvas.cpp index c98e2f47001e..971b53aaf198 100644 --- a/libs/hwui/SkiaCanvas.cpp +++ b/libs/hwui/SkiaCanvas.cpp @@ -55,9 +55,6 @@ public: virtual int width() override; virtual int height() override; - virtual void setHighContrastText(bool highContrastText) override {} - virtual bool isHighContrastText() override { return false; } - virtual int getSaveCount() const override; virtual int save(SkCanvas::SaveFlags flags) override; virtual void restore() override; |