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

Commit 008e4cbc authored by Stan Iliev's avatar Stan Iliev Committed by android-build-merger
Browse files

Merge "kClear blend mode is drawn as kDstOut" into pi-dev

am: 654f7667

Change-Id: I6cc7dd7992400ed5f9ad9e6bf9623b5c7e7ccf63
parents 1c55ecff 654f7667
Loading
Loading
Loading
Loading
+0 −25
Original line number Diff line number Diff line
@@ -148,31 +148,6 @@ void SkiaRecordingCanvas::drawVectorDrawable(VectorDrawableRoot* tree) {
// Recording Canvas draw operations: Bitmaps
// ----------------------------------------------------------------------------

inline static const SkPaint* bitmapPaint(const SkPaint* origPaint, SkPaint* tmpPaint,
                                         sk_sp<SkColorFilter> colorSpaceFilter) {
    if ((origPaint && origPaint->isAntiAlias()) || colorSpaceFilter) {
        if (origPaint) {
            *tmpPaint = *origPaint;
        }

        if (colorSpaceFilter) {
            if (tmpPaint->getColorFilter()) {
                tmpPaint->setColorFilter(
                        SkColorFilter::MakeComposeFilter(tmpPaint->refColorFilter(), colorSpaceFilter));
            } else {
                tmpPaint->setColorFilter(colorSpaceFilter);
            }
            LOG_ALWAYS_FATAL_IF(!tmpPaint->getColorFilter());
        }


        // disabling AA on bitmap draws matches legacy HWUI behavior
        tmpPaint->setAntiAlias(false);
        return tmpPaint;
    } else {
        return origPaint;
    }
}

void SkiaRecordingCanvas::drawBitmap(Bitmap& bitmap, float left, float top, const SkPaint* paint) {
    SkPaint tmpPaint;
+39 −0
Original line number Diff line number Diff line
@@ -88,6 +88,45 @@ private:
     *  @param height used to calculate recording bounds.
     */
    void initDisplayList(uirenderer::RenderNode* renderNode, int width, int height);

    inline static const SkPaint* bitmapPaint(const SkPaint* origPaint, SkPaint* tmpPaint,
                                             sk_sp<SkColorFilter> colorSpaceFilter) {
        bool fixBlending = false;
        bool fixAA = false;
        if (origPaint) {
            // kClear blend mode is drawn as kDstOut on HW for compatibility with Android O and
            // older.
            fixBlending = sApiLevel <= 27 && origPaint->getBlendMode() == SkBlendMode::kClear;
            fixAA = origPaint->isAntiAlias();
        }

        if (fixBlending || fixAA || colorSpaceFilter) {
            if (origPaint) {
                *tmpPaint = *origPaint;
            }

            if (fixBlending) {
                tmpPaint->setBlendMode(SkBlendMode::kDstOut);
            }

            if (colorSpaceFilter) {
                if (tmpPaint->getColorFilter()) {
                    tmpPaint->setColorFilter(SkColorFilter::MakeComposeFilter(
                            tmpPaint->refColorFilter(), colorSpaceFilter));
                } else {
                    tmpPaint->setColorFilter(colorSpaceFilter);
                }
                LOG_ALWAYS_FATAL_IF(!tmpPaint->getColorFilter());
            }

            // disabling AA on bitmap draws matches legacy HWUI behavior
            tmpPaint->setAntiAlias(false);
            return tmpPaint;
        } else {
            return origPaint;
        }
    }

};

};  // namespace skiapipeline