Skip to content

Commit

Permalink
Update text view gesture recognizer to use textkit 2
Browse files Browse the repository at this point in the history
  • Loading branch information
charliescheer committed Dec 20, 2024
1 parent 807eed1 commit f15e313
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 4 deletions.
8 changes: 8 additions & 0 deletions Simplenote.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -541,6 +541,8 @@
BAB6C04726BA4CAF007495C4 /* WidgetController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAB6C04626BA4CAF007495C4 /* WidgetController.swift */; };
BAB898D32BEC404200E238B8 /* CreateNewNoteIntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAB898D22BEC404200E238B8 /* CreateNewNoteIntentHandler.swift */; };
BABB22DF2D14DA6600FCF47D /* SPTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BABB22DE2D14DA6300FCF47D /* SPTextView.swift */; };
BABB22E12D162E6D00FCF47D /* NSTextLayoutManager+Simplenote.swift in Sources */ = {isa = PBXBuildFile; fileRef = BABB22E02D162E6200FCF47D /* NSTextLayoutManager+Simplenote.swift */; };
BABB22E32D162E8400FCF47D /* NSTextLayoutFragment.swift in Sources */ = {isa = PBXBuildFile; fileRef = BABB22E22D162E7D00FCF47D /* NSTextLayoutFragment.swift */; };
BABFFF2226CF9094003A4C25 /* WidgetDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = BABFFF2126CF9094003A4C25 /* WidgetDefaults.swift */; };
BABFFF2326CF9094003A4C25 /* WidgetDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = BABFFF2126CF9094003A4C25 /* WidgetDefaults.swift */; };
BABFFF2426CF9094003A4C25 /* WidgetDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = BABFFF2126CF9094003A4C25 /* WidgetDefaults.swift */; };
Expand Down Expand Up @@ -1244,6 +1246,8 @@
BAB6C04626BA4CAF007495C4 /* WidgetController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WidgetController.swift; sourceTree = "<group>"; };
BAB898D22BEC404200E238B8 /* CreateNewNoteIntentHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateNewNoteIntentHandler.swift; sourceTree = "<group>"; };
BABB22DE2D14DA6300FCF47D /* SPTextView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SPTextView.swift; sourceTree = "<group>"; };
BABB22E02D162E6200FCF47D /* NSTextLayoutManager+Simplenote.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSTextLayoutManager+Simplenote.swift"; sourceTree = "<group>"; };
BABB22E22D162E7D00FCF47D /* NSTextLayoutFragment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSTextLayoutFragment.swift; sourceTree = "<group>"; };
BABFFF2126CF9094003A4C25 /* WidgetDefaults.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WidgetDefaults.swift; sourceTree = "<group>"; };
BAD0F1EC2BED49C200E73E45 /* FindNoteIntentHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FindNoteIntentHandler.swift; sourceTree = "<group>"; };
BAE08625261282D1009D40CD /* Note+Publish.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Note+Publish.swift"; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1879,6 +1883,8 @@
E21F57B817C1244E001F02D3 /* SPEditorTextView.m */,
A6BBDA45255034E6005C8343 /* SPEditorTextView+Simplenote.swift */,
B52E2B142537480A0074509A /* SPEditorTapRecognizerDelegate.swift */,
BABB22E02D162E6200FCF47D /* NSTextLayoutManager+Simplenote.swift */,
BABB22E22D162E7D00FCF47D /* NSTextLayoutFragment.swift */,
);
name = Editor;
sourceTree = "<group>";
Expand Down Expand Up @@ -3471,6 +3477,7 @@
A60DF30825A44F0F00FDADF3 /* PinLockRemoveController.swift in Sources */,
A694ABAB25D1549D00CC3A2D /* FileStorage.swift in Sources */,
B513FB2422EF6A4B00B178AC /* SPUserInterface.swift in Sources */,
BABB22E32D162E8400FCF47D /* NSTextLayoutFragment.swift in Sources */,
B5DF734022A54EE800602CE7 /* SPDefaultTableViewCell.swift in Sources */,
B5796549250684EC00DFD6F7 /* EditorFactory.swift in Sources */,
A6C2721825AF0C1E00593731 /* TagListViewCell.swift in Sources */,
Expand Down Expand Up @@ -3542,6 +3549,7 @@
A6CDF900256B9CB900CF2F27 /* ViewSpinner.swift in Sources */,
375D24B721E01131007AB25A /* stack.c in Sources */,
373AD30821C4739500A4EA89 /* NSMutableAttributedString+Styling.m in Sources */,
BABB22E12D162E6D00FCF47D /* NSTextLayoutManager+Simplenote.swift in Sources */,
B524AE112352CC7900EA11D4 /* UIScreen+Simplenote.swift in Sources */,
A68A4345256FEE3000D1CA5D /* SPSettingsViewController+Extensions.swift in Sources */,
B543C7E523CF775C00003A80 /* NSSortDescriptor+Simplenote.swift in Sources */,
Expand Down
14 changes: 11 additions & 3 deletions Simplenote/Classes/UIGestureRecognizer+Simplenote.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,16 @@ extension UIGestureRecognizer {
locationInContainer.x -= textView.textContainerInset.left
locationInContainer.y -= textView.textContainerInset.top

return textView.layoutManager.characterIndex(for: locationInContainer,
in: textView.textContainer,
fractionOfDistanceBetweenInsertionPoints: nil)
guard #available(iOS 17.0, *),
let textLayoutManager = textView.textLayoutManager else {
// TextKit 1 fallback
return textView.layoutManager.characterIndex(
for: locationInContainer,
in: textView.textContainer,
fractionOfDistanceBetweenInsertionPoints: nil)
}

// TextKit 2
return textLayoutManager.characterIndex(for: locationInContainer) ?? .zero
}
}
17 changes: 17 additions & 0 deletions Simplenote/NSTextLayoutFragment.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
//
// NSTextLayoutFragment.swift
// Simplenote
//
// Created by Charlie Scheer on 12/20/24.
// Copyright © 2024 Automattic. All rights reserved.
//

extension NSTextLayoutFragment {
@available(iOS 17.0, *)
func characterIndex(for location: CGPoint) -> Int? {
guard let lineFragment = textLineFragment(forVerticalOffset: location.y, requiresExactMatch: true) else {
return nil
}
return lineFragment.characterIndex(for: location)
}
}
17 changes: 17 additions & 0 deletions Simplenote/NSTextLayoutManager+Simplenote.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
//
// NSTextLayoutManager+Simplenote.swift
// Simplenote
//
// Created by Charlie Scheer on 12/20/24.
// Copyright © 2024 Automattic. All rights reserved.
//

extension NSTextLayoutManager {
@available(iOS 17.0, *)
func characterIndex(for location: CGPoint) -> Int? {
guard let lineFragment = textLayoutFragment(for: location) else {
return nil
}
return lineFragment.characterIndex(for: location)
}
}
2 changes: 1 addition & 1 deletion Simplenote/SPTextView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ extension SPTextView {
container.heightTracksTextView = true


if #available(iOS 16.0, *) {
if #available(iOS 17.0, *) {
let textLayoutManager = NSTextLayoutManager()
let contentStorage = NSTextContentStorage()
contentStorage.delegate = self
Expand Down

0 comments on commit f15e313

Please sign in to comment.