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

Commit 591be6c7 authored by Chris Craik's avatar Chris Craik
Browse files

Update HWUI paint filter to understand new location of skia bitmap filter preference

bug:17455286
Change-Id: I3b0e04833f0c2699a1322fdd7e98c155841c0d93
parent fc81bfe3
Loading
Loading
Loading
Loading
+17 −7
Original line number Diff line number Diff line
@@ -54,10 +54,6 @@
namespace android {
namespace uirenderer {

///////////////////////////////////////////////////////////////////////////////
// Defines
///////////////////////////////////////////////////////////////////////////////

static GLenum getFilter(const SkPaint* paint) {
    if (!paint || paint->getFilterLevel() != SkPaint::kNone_FilterLevel) {
        return GL_LINEAR;
@@ -3044,21 +3040,35 @@ void OpenGLRenderer::resetPaintFilter() {
}

void OpenGLRenderer::setupPaintFilter(int clearBits, int setBits) {
    // TODO: don't bother with boolean, it's redundant with clear/set bits
    mDrawModifiers.mHasDrawFilter = true;
    mDrawModifiers.mPaintFilterClearBits = clearBits & SkPaint::kAllFlags;
    mDrawModifiers.mPaintFilterSetBits = setBits & SkPaint::kAllFlags;
}

const SkPaint* OpenGLRenderer::filterPaint(const SkPaint* paint) {
    // TODO: use CompatFlagsDrawFilter here, and combine logic with android/graphics/DrawFilter.cpp
    // to avoid clobbering 0x02 paint flag

    // Equivalent to the Java Paint's FILTER_BITMAP_FLAG.
    static const uint32_t sFilterBitmapFlag = 0x02;

    if (CC_LIKELY(!mDrawModifiers.mHasDrawFilter || !paint)) {
        return paint;
    }

    uint32_t flags = paint->getFlags();
    const uint32_t clearBits = mDrawModifiers.mPaintFilterClearBits;
    const uint32_t setBits = mDrawModifiers.mPaintFilterSetBits;

    const uint32_t flags = (paint->getFlags() & ~clearBits) | setBits;
    mFilteredPaint = *paint;
    mFilteredPaint.setFlags((flags & ~mDrawModifiers.mPaintFilterClearBits) |
            mDrawModifiers.mPaintFilterSetBits);
    mFilteredPaint.setFlags(flags);

    // check if paint filter trying to override bitmap filter
    if ((clearBits | setBits) & sFilterBitmapFlag) {
        mFilteredPaint.setFilterLevel(flags & sFilterBitmapFlag
                ? SkPaint::kLow_FilterLevel : SkPaint::kNone_FilterLevel);
    }

    return &mFilteredPaint;
}