Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RenderScript Impl of Box Shadow #43988

Open
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

NickGerleman
Copy link
Contributor

Summary:
The supported path for blur composition effects on API 31+ is RenderNode, but that is pretty new.

This adds a RendderScript path, deprecated for newer versions of Android.

We still need API 26+ for clipOutPath (we need to clip original BG out of shadow, e.g. for transparent BG), but this should be supported in many more places.

It is not perfect. RenderScript's built-in blur implementation has a maximum physical pixel radius of 25px. On an xxhdpi device, this means shadows stop getting larger after ~8 CSS pixels. I also think this path can end up with blurry bitmaps if scale transform enlarged, unlike RenderNode path.

I think this is probably an acceptable degradation path for older devices, and probably not work home-rolling more complex RenderScript shaders. We should potentially add an OS API level check on the JS side with a dev time warning.

We don't have RenderScript path for blur filter yet, which I imagine might end up stealing some of this code later.

Changelog: [Internal]

Differential Revision: D55896447

@facebook-github-bot facebook-github-bot added CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. p: Facebook Partner: Facebook Partner labels Apr 9, 2024
@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D55896447

NickGerleman and others added 5 commits April 8, 2024 18:58
Differential Revision: D55635743
Summary:
Pull Request resolved: facebook#43722

This change adds a drawable, when when drawn on the bounds of a border-box sized view, will draw a spec compliant box-shadow outside the box. This is reliant on Android `RenderNode` and `RenderEffect` APIs provided by API 31.

Inset box shadows can also be added using a similar method, but this is not done yet.

The code which manages this is in flux, but the underlying drawable should be good. Will add some tests once it's more wired up.

Changelog: [Internal]

Differential Revision: D55561465

Reviewed By: joevilches
Summary:
Pull Request resolved: facebook#43988

The supported path for blur composition effects on API 31+ is RenderNode, but that is pretty new.

This adds a RendderScript path, deprecated for newer versions of Android.

We still need API 26+ for clipOutPath (we need to clip original BG out of shadow, e.g. for transparent BG), but this should be supported in many more places.

It is not perfect. RenderScript's built-in blur implementation has a maximum physical pixel radius of 25px. On an xxhdpi device, this means shadows stop getting larger after ~8 CSS pixels. I also think this path can end up with  blurry bitmaps if scale transform enlarged, unlike RenderNode path.

I think this is probably an acceptable degradation path for older devices, and probably not work home-rolling more complex RenderScript shaders. We should potentially add an OS API level check on the JS side with a dev time warning.

We don't have RenderScript path for blur filter yet, which I imagine might end up stealing some of this code later.

Changelog: [Internal]

Differential Revision: D55896447
@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D55896447

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. fb-exported p: Facebook Partner: Facebook Partner
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants