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

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

Merge "Apply shadow to roundedRects in RenderEngine." into sc-dev

parents 06784f2b b0e764c6
Loading
Loading
Loading
Loading
+3 −9
Original line number Original line Diff line number Diff line
@@ -919,12 +919,9 @@ status_t SkiaGLRenderEngine::drawLayers(const DisplaySettings& display,
        // TODO(b/175915334): consider relaxing this restriction to enable more flexible
        // TODO(b/175915334): consider relaxing this restriction to enable more flexible
        // composition - using a well-defined invalid color is long-term less error-prone.
        // composition - using a well-defined invalid color is long-term less error-prone.
        if (layer->shadow.length > 0) {
        if (layer->shadow.length > 0) {
            const auto rect = layer->geometry.roundedCornersRadius > 0
                    ? getSkRect(layer->geometry.roundedCornersCrop)
                    : bounds.rect();
            // This would require a new parameter/flag to SkShadowUtils::DrawShadow
            // This would require a new parameter/flag to SkShadowUtils::DrawShadow
            LOG_ALWAYS_FATAL_IF(layer->disableBlending, "Cannot disableBlending with a shadow");
            LOG_ALWAYS_FATAL_IF(layer->disableBlending, "Cannot disableBlending with a shadow");
            drawShadow(canvas, rect, layer->geometry.roundedCornersRadius, layer->shadow);
            drawShadow(canvas, bounds, layer->shadow);
            continue;
            continue;
        }
        }


@@ -1213,17 +1210,14 @@ size_t SkiaGLRenderEngine::getMaxViewportDims() const {
    return mGrContext->maxRenderTargetSize();
    return mGrContext->maxRenderTargetSize();
}
}


void SkiaGLRenderEngine::drawShadow(SkCanvas* canvas, const SkRect& casterRect, float cornerRadius,
void SkiaGLRenderEngine::drawShadow(SkCanvas* canvas, const SkRRect& casterRRect,
                                    const ShadowSettings& settings) {
                                    const ShadowSettings& settings) {
    ATRACE_CALL();
    ATRACE_CALL();
    const float casterZ = settings.length / 2.0f;
    const float casterZ = settings.length / 2.0f;
    const auto shadowShape = cornerRadius > 0
            ? SkPath::RRect(SkRRect::MakeRectXY(casterRect, cornerRadius, cornerRadius))
            : SkPath::Rect(casterRect);
    const auto flags =
    const auto flags =
            settings.casterIsTranslucent ? kTransparentOccluder_ShadowFlag : kNone_ShadowFlag;
            settings.casterIsTranslucent ? kTransparentOccluder_ShadowFlag : kNone_ShadowFlag;


    SkShadowUtils::DrawShadow(canvas, shadowShape, SkPoint3::Make(0, 0, casterZ),
    SkShadowUtils::DrawShadow(canvas, SkPath::RRect(casterRRect), SkPoint3::Make(0, 0, casterZ),
                              getSkPoint3(settings.lightPos), settings.lightRadius,
                              getSkPoint3(settings.lightPos), settings.lightRadius,
                              getSkColor(settings.ambientColor), getSkColor(settings.spotColor),
                              getSkColor(settings.ambientColor), getSkColor(settings.spotColor),
                              flags);
                              flags);
+1 −1
Original line number Original line Diff line number Diff line
@@ -98,7 +98,7 @@ private:
    base::unique_fd flush();
    base::unique_fd flush();
    bool waitFence(base::unique_fd fenceFd);
    bool waitFence(base::unique_fd fenceFd);
    void initCanvas(SkCanvas* canvas, const DisplaySettings& display);
    void initCanvas(SkCanvas* canvas, const DisplaySettings& display);
    void drawShadow(SkCanvas* canvas, const SkRect& casterRect, float casterCornerRadius,
    void drawShadow(SkCanvas* canvas, const SkRRect& casterRRect,
                    const ShadowSettings& shadowSettings);
                    const ShadowSettings& shadowSettings);
    // If requiresLinearEffect is true or the layer has a stretchEffect a new shader is returned.
    // If requiresLinearEffect is true or the layer has a stretchEffect a new shader is returned.
    // Otherwise it returns the input shader.
    // Otherwise it returns the input shader.