Open
Conversation
38c6911 to
42c46bf
Compare
|
You can test this PR using the following package version. |
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
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.
What does the pull request do?
New public contract
New unstable API surface in
Avalonia.Input.TextInput:IStructuredTextInputITextPointerITextRangeTextGranularityKey design points:
Core implementation in TextBox
TextBoxTextInputMethodClientnow implementsIStructuredTextInput.Implementation behavior:
TextBox.Textas the document source and clamps all pointer/range offsets to valid bounds.DocumentStart,DocumentEnd, andDocumentRangeusing local pointer/range wrappers.Selectiondirectly toTextBox.SelectionStart/SelectionEnd._compositionRangewith normalization and equality checks.ReplaceTextperforms in-place replacement and collapses caret at inserted text end.SetCompositionTextsupports both:CommitCompositionclears composition state.GetFirstRectForRange,GetCaretRect,GetSelectionRects) useTextPresenter.TextLayouthit-testing and transform results to parent coordinates.GetClosestPosition,GetCharacterRangeAtPoint) map points to nearest text positions/ranges.GetRangeEnclosingsupports document, character, line, paragraph, word, sentence.GetBoundaryPositionsupports document, character, and boundaries derived from enclosing ranges.BeginChange) defers and coalesces notifications to avoid inconsistent intermediate states.Compatibility note:
TextInputMethodClientmembers (SurroundingText, line-relativeSelection) remain available for existing platform paths.IStructuredTextInput.Android bridge updates
AndroidInputMethodandAvaloniaInputConnectionnow branch onIStructuredTextInputavailability:SetComposingRegionSetComposingTextSetSelectionCommitTextDeleteSurroundingTextDeleteSurroundingTextInCodePointsFinishComposingTextIStructuredTextInputdocument/range APIs.iOS bridge updates
TextInputRespondernow uses structured operations whenever the client implementsIStructuredTextInput:StructuredClientand conversion helpers between UIKit ranges and structured ranges.InsertTextTextInRangeReplaceTextSetMarkedTextUnmarkTextSelectedTextRangeandMarkedTextRangemap to structured selection/composition ranges.TextChanged,CaretPositionChanged,CompositionChanged) for IME state notifications.Test coverage added
TextBoxTestsnow validates structured behavior, including:DocumentRange.TextChanged,CompositionChanged, andCaretPositionChangedevents.Overall, the tests establish that the new structured model is functionally wired through
TextBoxand observable by IME bridges.What is the current behavior?
What is the updated/expected behavior with this PR?
How was the solution implemented (if it's not obvious)?
Checklist
Breaking changes
Obsoletions / Deprecations
Fixed issues