-
Notifications
You must be signed in to change notification settings - Fork 24.6k
Extract TextLayoutManager::baseline() #50888
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
Conversation
This pull request was exported from Phabricator. Differential Revision: D73555465 |
Summary: We construct this from JNI, which doesn't care about visibility, and then only want to expose `StateWrapper` as the public interface. Changelog: [Android][Removed] - Make StateWrapperImpl Internal Differential Revision: D73161592
Differential Revision: D73159146
Summary: This forms the basis for a replacement of `TextView`. This started off with Litho's [`RCTextView`](https://github.com/facebook/litho/blob/master/litho-rendercore-text/src/main/java/com/facebook/rendercore/text/RCTextView.java), which is a simple view, for rendering a text layout, and providing some built-in keyboard navigation and a11y support. Many changes were made to it, including: 1. Removing many parts not relevant to RN, or which will be replaced by other RN infra. E.g. we will reuse existing a11y delegates, have existing ways of creating Spannables and text layouts, inline views, etc 2. Converting to Kotlin 3. Adding back in some changes required for RN's drawing, and expected view manager APIs (e.g. overflow/clipping customization) 4. Making it target a ViewGroup instead of a View, for correct inline view support down the line Because we rely on drawing text layout, with the same Spannable as before, most things "just work", because they are part of the layout we are drawing, generated by TextLayoutManager on the Fabric side. We don't offer much customization to what can be drawn, forcing it to have happened in the layout we are showing already. There are quite a few bits not implemented yet. Some of these are cases, like `textAlignVertical`, were previously incorrectly implemented just at the ReactTextView layer, so Fabric layout was unaware of them. Another similar class to this is any non-default fonts which we must load. `adjustsFontSizeToFit` (stubbed out in later diff) will also need some tweaking with the new assumption we don’t want to mutate Spans/layouts set in State. Fine grained selection support is the largest tbd. Changelog: [Internal] Differential Revision: D73282649 Reviewed By: Abbondanzo
Summary: This implements the view manager for `PreparedLayoutTextView`, originating by taking the view managers composing `ReactTextView`, converting to Kotlin, and removing everything no longer needed. In Facsimile, anything influencing text appearance is applied earlier, when creating the Fabric layout, so there are many less setters here. Most visual attributes are instead present in the state we are presenting. We have tasks for some of these, that need to be reimplemented, as they do not currently influence the Spannable being measured. That includes e.g. `ReactTextViewManagerCallback`, used for injection, and `dataDetectorType` for linkifying Spannable. Changelog: [Internal] Differential Revision: D73287706 Reviewed By: rshest
This pull request was exported from Phabricator. Differential Revision: D73555465 |
d7ee4cc
to
165cafe
Compare
Summary: Pull Request resolved: facebook#50888 This is shared between platforms using a very strange pattern. Let's just extract this into its own function. Not considering breaking, since TextLayoutManager is internal interface. Changelog: [internal] Reviewed By: rshest Differential Revision: D73555465
This pull request was exported from Phabricator. Differential Revision: D73555465 |
Summary: Pull Request resolved: facebook#50888 This is shared between platforms using a very strange pattern. Let's just extract this into its own function. Not considering breaking, since TextLayoutManager is internal interface. Changelog: [internal] Reviewed By: rshest Differential Revision: D73555465
165cafe
to
78ef3e6
Compare
This pull request was exported from Phabricator. Differential Revision: D73555465 |
78ef3e6
to
1cc7186
Compare
Summary: Pull Request resolved: facebook#50888 This is shared between platforms using a very strange pattern. Let's just extract this into its own function. Not considering breaking, since TextLayoutManager is internal interface. Changelog: [internal] Reviewed By: rshest Differential Revision: D73555465
Summary: With Facsimile, we are introducing some new concept of `PreparedText`, where platform TextLayoutManager which implement, can lead to additional optimizations. `#ifdef ANDROID` is not a workable pattern for this. Apart from react-native-cxx getting hooked into it, and all of the existing bugs there, it is bad for editor environment, and hard to reason about. This splits up `ParagraphState`, so that we can control platform specific bits more easily. We do not split `ParagraphShadowNode`, which will use concepts (e.g. `TextLayoutManagerWithPreparedText`) to control which paths it takes, based on platform capaibilities. Changelog: [internal] Differential Revision: D73555441
Summary: Pull Request resolved: facebook#50888 This is shared between platforms using a very strange pattern. Let's just extract this into its own function. Not considering breaking, since TextLayoutManager is internal interface. Changelog: [internal] Reviewed By: rshest Differential Revision: D73555465
This pull request was exported from Phabricator. Differential Revision: D73555465 |
1cc7186
to
8004a4b
Compare
This pull request has been merged in 01cc16b. |
Summary:
This is shared between platforms using a very strange pattern. Let's just extract this into its own function. Not considering breaking, since TextLayoutManager is internal interface.
Changelog: [internal]
Differential Revision: D73555465