Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1c5eb597 authored by Minkyoung Kim's avatar Minkyoung Kim Committed by John Reck
Browse files

Fix bug on High Contrast Text : where DarkTheme is enabled &&

ForceDarkAllowed is true.

In this condition, text seems be bold so far.
From now, in this case, text would have black outline, white inline
color.

this is related to
https://partnerissuetracker.corp.google.com/u/1/issues/175363190.

Change-Id: Icf0048ef8d55c2e29676944c24c2050f531616d5
Merged-In: Icf0048ef8d55c2e29676944c24c2050f531616d5
parent be75db95
Loading
Loading
Loading
Loading
+20 −1
Original line number Diff line number Diff line
@@ -401,10 +401,11 @@ struct DrawImageLattice final : Op {
struct DrawTextBlob final : Op {
    static const auto kType = Type::DrawTextBlob;
    DrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y, const SkPaint& paint)
            : blob(sk_ref_sp(blob)), x(x), y(y), paint(paint) {}
        : blob(sk_ref_sp(blob)), x(x), y(y), paint(paint), drawTextBlobMode(gDrawTextBlobMode) {}
    sk_sp<const SkTextBlob> blob;
    SkScalar x, y;
    SkPaint paint;
    DrawTextBlobMode drawTextBlobMode;
    void draw(SkCanvas* c, const SkMatrix&) const { c->drawTextBlob(blob.get(), x, y, paint); }
};

@@ -791,6 +792,24 @@ constexpr color_transform_fn colorTransformForOp() {
    }
}

template<>
constexpr color_transform_fn colorTransformForOp<DrawTextBlob>() {
    return [](const void *opRaw, ColorTransform transform) {
        const DrawTextBlob *op = reinterpret_cast<const DrawTextBlob*>(opRaw);
        switch (op->drawTextBlobMode) {
        case DrawTextBlobMode::HctOutline:
            const_cast<SkPaint&>(op->paint).setColor(SK_ColorBLACK);
            break;
        case DrawTextBlobMode::HctInner:
            const_cast<SkPaint&>(op->paint).setColor(SK_ColorWHITE);
            break;
        default:
            transformPaint(transform, const_cast<SkPaint*>(&(op->paint)));
            break;
        }
    };
}

#define X(T) colorTransformForOp<T>(),
static const color_transform_fn color_transform_fns[] = {
#include "DisplayListOps.in"
+4 −0
Original line number Diff line number Diff line
@@ -111,6 +111,7 @@ public:
            bool darken = channelSum < (128 * 3);

            // outline
            gDrawTextBlobMode = DrawTextBlobMode::HctOutline;
            Paint outlinePaint(paint);
            simplifyPaint(darken ? SK_ColorWHITE : SK_ColorBLACK, &outlinePaint);
            outlinePaint.setStyle(SkPaint::kStrokeAndFill_Style);
@@ -118,11 +119,14 @@ public:
                               bounds.mRight, bounds.mBottom, totalAdvance);

            // inner
            gDrawTextBlobMode = DrawTextBlobMode::HctInner;
            Paint innerPaint(paint);
            simplifyPaint(darken ? SK_ColorBLACK : SK_ColorWHITE, &innerPaint);
            innerPaint.setStyle(SkPaint::kFill_Style);
            canvas->drawGlyphs(glyphFunc, glyphCount, innerPaint, x, y, bounds.mLeft, bounds.mTop,
                               bounds.mRight, bounds.mBottom, totalAdvance);

            gDrawTextBlobMode = DrawTextBlobMode::Normal;
        } else {
            // standard draw path
            canvas->drawGlyphs(glyphFunc, glyphCount, paint, x, y, bounds.mLeft, bounds.mTop,
+8 −0
Original line number Diff line number Diff line
@@ -87,6 +87,14 @@ class Bitmap;
class Paint;
struct Typeface;

enum class DrawTextBlobMode {
    Normal,
    HctOutline,
    HctInner,
};

inline DrawTextBlobMode gDrawTextBlobMode = DrawTextBlobMode::Normal;

class ANDROID_API Canvas {
public:
    virtual ~Canvas(){};