-
Notifications
You must be signed in to change notification settings - Fork 18
Introduce Override Layout Behavior API #84
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
Merged
thecoolwinter
merged 24 commits into
CodeEditApp:main
from
thecoolwinter:feat/override-layout-behavior
Apr 19, 2025
Merged
Introduce Override Layout Behavior API #84
thecoolwinter
merged 24 commits into
CodeEditApp:main
from
thecoolwinter:feat/override-layout-behavior
Apr 19, 2025
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
…ting Invalidation
tom-ludwig
requested changes
Apr 18, 2025
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.
Looks great! Also, big thanks for the well-written PR description—it really makes the review process smoother. Just a few minor suggestions in the documentation to improve readability.
Sources/CodeEditTextView/TextLayoutManager/TextLayoutManager+Layout.swift
Outdated
Show resolved
Hide resolved
Sources/CodeEditTextView/TextLayoutManager/TextLayoutManager+Layout.swift
Outdated
Show resolved
Hide resolved
Sources/CodeEditTextView/TextLayoutManager/TextLayoutManager+Layout.swift
Outdated
Show resolved
Hide resolved
Sources/CodeEditTextView/TextLayoutManager/TextLayoutManager+Layout.swift
Show resolved
Hide resolved
0xWDG
approved these changes
Apr 18, 2025
Co-authored-by: Tom Ludwig <tommludwig@icloud.com>
Co-authored-by: Tom Ludwig <tommludwig@icloud.com>
Co-authored-by: Tom Ludwig <tommludwig@icloud.com>
10 tasks
austincondiff
approved these changes
Apr 19, 2025
tom-ludwig
approved these changes
Apr 19, 2025
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Introduces an API to override how text is laid out by the layout manager. An API consumer can implement an object conforming to the
TextLayoutManagerRenderDelegate
protocol to provide custom behavior.Introduces tests for new APIs.
Specific changes:
TextLayoutManagerRenderDelegate
which contains optional methods to override layout behavior. All methods are optional, and default to the default implementation.x
position in a line fragment.LineFragmentView
by default, but the render delegate can give a custom one).LineFragmentView
is now anopen
class to allow for overriding methods.LineFragment
have been marked as depreciated (xPos
andrectFor
). These were moved to theTextLayoutManger
to ensure that the new render delegate can inject it's own behavior for both those methods if available.TextSelectionManager
draw
method is now public, for drawing selections in a custom context.layoutLines
does inTextLayoutManager
.ensureLayoutUntil
was used once, and it was not being used correctly.preparePositionForDisplay
was only used by that method. Both of these methods destroyed layout information without recourse, sometimes causing text to just disappear despite a perfectly valid layout pass.ensureLayoutUntil
could be added back, but needs to be implemented in a way that's additive, rather than removing layout information.Related Issues
Checklist
Screenshots