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

Commit 654f7667 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

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

parents ddf05741 cebb6478
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