-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
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
feat: filters support FeColorMatrix and FilterImage #2316
Conversation
1c2ca46
to
e0941b8
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Leaving some comments for now.
import {View} from 'react-native'; | ||
import {FilterImage} from 'react-native-svg/filter-image'; | ||
|
||
const testImage = require('../../assets/image.jpg'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We could change the name of this image (and others too) to be more descriptive in some follow-up PR.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok I finished the review! Great job 🚀 I left some more comments, please answer them.
src/filter-image/FilterImage.tsx
Outdated
import { | ||
Svg, | ||
FeColorMatrix, | ||
Filter, | ||
Image, | ||
FeColorMatrixProps, | ||
} from '../index'; | ||
import { FilterPrimitiveStandardAttributes } from '../elements/filters/FilterPrimitive'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Shouldn't we import those similar to as we import things from the main package in css
:
react-native-svg/src/css/css.tsx
Line 13 in 2514ac4
import { camelCase, fetchText, parse, SvgAst } from 'react-native-svg'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
When importing from react-native-svg
types seems to be not recognized
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's not good and we should fix it in both places. So if it works, let's leave it like this for now.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Some more comments. When you apply those, I think we are ready for merging!
src/filter-image/FilterImage.tsx
Outdated
import { | ||
Svg, | ||
FeColorMatrix, | ||
Filter, | ||
Image, | ||
FeColorMatrixProps, | ||
} from '../index'; | ||
import { FilterPrimitiveStandardAttributes } from '../elements/filters/FilterPrimitive'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's not good and we should fix it in both places. So if it works, let's leave it like this for now.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
# Summary Continuation of #2316 Introducing new filter `FeGaussianBlur`. ### Implementation notes On Android there is no easy way to fully implement Gaussian blur, as there is no native api for this. While a basic implementation is possible with `RenderScript`, it does not allow for blur in one axis and greater than `25` ## Test Plan Example app -> Filters -> FeGaussianBlur ## Compatibility | OS | Implemented | | ------- | :---------: | | iOS | ✅ | | Android | ✅ |
# Summary Continuation of #2316 Introducing new filter `FeOffset`. ## Test Plan Example app -> Filters -> FeOffset ## Compatibility | OS | Implemented | | ------- | :---------: | | iOS | ✅ | | Android | ✅ | ## Checklist - [x] I have tested this on a device and a simulator - [x] I added documentation in `README.md` - [x] I updated the typed files (typescript)
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [react-native-svg](https://github.com/react-native-community/react-native-svg) | [`^15.3.0` -> `^15.4.0`](https://renovatebot.com/diffs/npm/react-native-svg/15.3.0/15.4.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-native-svg/15.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-native-svg/15.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-native-svg/15.3.0/15.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-native-svg/15.3.0/15.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>react-native-community/react-native-svg (react-native-svg)</summary> ### [`v15.4.0`](https://github.com/software-mansion/react-native-svg/releases/tag/v15.4.0) [Compare Source](https://github.com/react-native-community/react-native-svg/compare/v15.3.0...v15.4.0) Introducing the long-awaited filters in react-native-svg! 🎉 This minor release includes the first filter, FeColorMatrix, along with numerous fixes and other improvements. #### What's Changed - fix: error when building paper after fabric by [@​maciekstosio](https://github.com/maciekstosio) in [https://github.com/software-mansion/react-native-svg/pull/2281](https://github.com/software-mansion/react-native-svg/pull/2281) - Handle error when pass wrong uri to SvgFromUri component by [@​bohdanprog](https://github.com/bohdanprog) in [https://github.com/software-mansion/react-native-svg/pull/2289](https://github.com/software-mansion/react-native-svg/pull/2289) - chore: TestsExample app fix reanimated and metro.config issues by [@​bohdanprog](https://github.com/bohdanprog) in [https://github.com/software-mansion/react-native-svg/pull/2291](https://github.com/software-mansion/react-native-svg/pull/2291) - chore: remove macos-build-test.yml by [@​bohdanprog](https://github.com/bohdanprog) in [https://github.com/software-mansion/react-native-svg/pull/2292](https://github.com/software-mansion/react-native-svg/pull/2292) - chore: add hire us section to readme by [@​kacperkapusciak](https://github.com/kacperkapusciak) in [https://github.com/software-mansion/react-native-svg/pull/2295](https://github.com/software-mansion/react-native-svg/pull/2295) - feat: github action close-when-stale by [@​bohdanprog](https://github.com/bohdanprog) in [https://github.com/software-mansion/react-native-svg/pull/2296](https://github.com/software-mansion/react-native-svg/pull/2296) - fixed pars on Android platform prop strokeDasharray by [@​bohdanprog](https://github.com/bohdanprog) in [https://github.com/software-mansion/react-native-svg/pull/2294](https://github.com/software-mansion/react-native-svg/pull/2294) - feat: add new bug issue template, and github actions by [@​bohdanprog](https://github.com/bohdanprog) in [https://github.com/software-mansion/react-native-svg/pull/2300](https://github.com/software-mansion/react-native-svg/pull/2300) - fix: issue template by [@​bohdanprog](https://github.com/bohdanprog) in [https://github.com/software-mansion/react-native-svg/pull/2301](https://github.com/software-mansion/react-native-svg/pull/2301) - fix: example app package.json file and yarn.lock by [@​bohdanprog](https://github.com/bohdanprog) in [https://github.com/software-mansion/react-native-svg/pull/2303](https://github.com/software-mansion/react-native-svg/pull/2303) - fix: handle onPress prop on web app by [@​bohdanprog](https://github.com/bohdanprog) in [https://github.com/software-mansion/react-native-svg/pull/2302](https://github.com/software-mansion/react-native-svg/pull/2302) - fix: android PathParser crash app if pass some wrong d prop by [@​bohdanprog](https://github.com/bohdanprog) in [https://github.com/software-mansion/react-native-svg/pull/2308](https://github.com/software-mansion/react-native-svg/pull/2308) - fix: scaling when mask is set by [@​jakex7](https://github.com/jakex7) in [https://github.com/software-mansion/react-native-svg/pull/2299](https://github.com/software-mansion/react-native-svg/pull/2299) - add onLoad prop to Image component by [@​bohdanprog](https://github.com/bohdanprog) in [https://github.com/software-mansion/react-native-svg/pull/2293](https://github.com/software-mansion/react-native-svg/pull/2293) - feat: update needs-more-info git workflow by [@​bohdanprog](https://github.com/bohdanprog) in [https://github.com/software-mansion/react-native-svg/pull/2314](https://github.com/software-mansion/react-native-svg/pull/2314) - fix: new arch invalidate on mount/unmount by [@​jakex7](https://github.com/jakex7) in [https://github.com/software-mansion/react-native-svg/pull/2318](https://github.com/software-mansion/react-native-svg/pull/2318) - Fix: image onLoad props by [@​bohdanprog](https://github.com/bohdanprog) in [https://github.com/software-mansion/react-native-svg/pull/2317](https://github.com/software-mansion/react-native-svg/pull/2317) - feat(windows): add support for 74 and bump Example by [@​marlenecota](https://github.com/marlenecota) in [https://github.com/software-mansion/react-native-svg/pull/2315](https://github.com/software-mansion/react-native-svg/pull/2315) - feat: add Example Windows build workflow by [@​marlenecota](https://github.com/marlenecota) in [https://github.com/software-mansion/react-native-svg/pull/2322](https://github.com/software-mansion/react-native-svg/pull/2322) - fix: add check in RNSVGImage for macos platform by [@​bohdanprog](https://github.com/bohdanprog) in [https://github.com/software-mansion/react-native-svg/pull/2324](https://github.com/software-mansion/react-native-svg/pull/2324) - Add correct invalidate calls to SvgView on ios with test by [@​Kicu](https://github.com/Kicu) in [https://github.com/software-mansion/react-native-svg/pull/2327](https://github.com/software-mansion/react-native-svg/pull/2327) - fix: extract opacity use percentage values by [@​jakex7](https://github.com/jakex7) in [https://github.com/software-mansion/react-native-svg/pull/2325](https://github.com/software-mansion/react-native-svg/pull/2325) - feat: change folders structure by [@​bohdanprog](https://github.com/bohdanprog) in [https://github.com/software-mansion/react-native-svg/pull/2319](https://github.com/software-mansion/react-native-svg/pull/2319) - Implement mask-type property by [@​SergeyYurkevich](https://github.com/SergeyYurkevich) in [https://github.com/software-mansion/react-native-svg/pull/2152](https://github.com/software-mansion/react-native-svg/pull/2152) - feat: extract web example by [@​bohdanprog](https://github.com/bohdanprog) in [https://github.com/software-mansion/react-native-svg/pull/2333](https://github.com/software-mansion/react-native-svg/pull/2333) - fix: macos mask by [@​jakex7](https://github.com/jakex7) in [https://github.com/software-mansion/react-native-svg/pull/2337](https://github.com/software-mansion/react-native-svg/pull/2337) - fix: fix format-js task to reflect changes made to folder structure by [@​CDFN](https://github.com/CDFN) in [https://github.com/software-mansion/react-native-svg/pull/2342](https://github.com/software-mansion/react-native-svg/pull/2342) - Add missing `#include <folly/dynamic.h>` on RN 0.75 by [@​tomekzaw](https://github.com/tomekzaw) in [https://github.com/software-mansion/react-native-svg/pull/2344](https://github.com/software-mansion/react-native-svg/pull/2344) - feat: filters support FeColorMatrix and FilterImage by [@​jakex7](https://github.com/jakex7) in [https://github.com/software-mansion/react-native-svg/pull/2316](https://github.com/software-mansion/react-native-svg/pull/2316) - fix: mask and filters rendering issues by [@​jakex7](https://github.com/jakex7) in [https://github.com/software-mansion/react-native-svg/pull/2345](https://github.com/software-mansion/react-native-svg/pull/2345) #### New Contributors - [@​maciekstosio](https://github.com/maciekstosio) made their first contribution in [https://github.com/software-mansion/react-native-svg/pull/2281](https://github.com/software-mansion/react-native-svg/pull/2281) - [@​bohdanprog](https://github.com/bohdanprog) made their first contribution in [https://github.com/software-mansion/react-native-svg/pull/2289](https://github.com/software-mansion/react-native-svg/pull/2289) - [@​Kicu](https://github.com/Kicu) made their first contribution in [https://github.com/software-mansion/react-native-svg/pull/2327](https://github.com/software-mansion/react-native-svg/pull/2327) - [@​SergeyYurkevich](https://github.com/SergeyYurkevich) made their first contribution in [https://github.com/software-mansion/react-native-svg/pull/2152](https://github.com/software-mansion/react-native-svg/pull/2152) - [@​CDFN](https://github.com/CDFN) made their first contribution in [https://github.com/software-mansion/react-native-svg/pull/2342](https://github.com/software-mansion/react-native-svg/pull/2342) **Full Changelog**: software-mansion/react-native-svg@v15.3.0...v15.4.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - "after 5pm,every weekend" in timezone America/Los_Angeles, Automerge - "after 5pm,every weekend" in timezone America/Los_Angeles. 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View the [repository job log](https://developer.mend.io/github/valora-inc/wallet). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MzguMCIsInVwZGF0ZWRJblZlciI6IjM3LjQzOC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJucG0iLCJyZW5vdmF0ZSJdfQ==--> --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: valora-bot <valorabot@valoraapp.com> Co-authored-by: Alex Bakoushin <alex@bakoush.in>
Summary
Introducing the long-awaited Filters in
react-native-svg
🎉Motivation
This PR is the beginning of bringing support of SVG Filters into
react-native-svg
.Filter
component andFeColorMatrix
as a start.react-native-svg/filter-image
with aFilterImage
component.Usage
Filter and Fe...
Filters are compatible with the web familiar standard, so most things should be compatible out-of-the-box and changes will be limited to using a capital letter as it's component.
Example
Filter Image
FilterImage
is a new component that is not strictly related to SVG. Its behavior should be the same as a regularImage
component from React Native with one exception - the additional propfilters
, which accepts an array of filters to apply to the image.Example
Test Plan
Example App: Updated the example app with various filter effects, showcasing real-world usage.
Compatibility
Checklist
README.md
andUSAGE.md