Skip to content

Commit

Permalink
More relying on layout manager content manager
Browse files Browse the repository at this point in the history
  • Loading branch information
krzyzanowskim committed Feb 13, 2024
1 parent 22412c8 commit 62f82d1
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 9 deletions.
18 changes: 10 additions & 8 deletions Sources/STTextView/STTextFinderClient.swift
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,15 @@ final class STTextFinderClient: NSObject, NSTextFinderClient {
}

func shouldReplaceCharacters(inRanges ranges: [NSValue], with strings: [String]) -> Bool {
guard let textView = textView else {
guard let textView = textView,
let textContentManager = textView.textLayoutManager.textContentManager
else {
return false
}

var result = true
for (range, string) in zip(ranges.map(\.rangeValue), strings) {
if let textRange = NSTextRange(range, in: textView.textContentManager) {
if let textRange = NSTextRange(range, in: textContentManager) {
result = result && textView.shouldChangeText(in: textRange, replacementString: string)
}
}
Expand All @@ -44,7 +46,7 @@ final class STTextFinderClient: NSObject, NSTextFinderClient {
}

func replaceCharacters(in range: NSRange, with string: String) {
guard let textContentManager = textView?.textContentManager,
guard let textContentManager = textView?.textLayoutManager.textContentManager,
let textRange = NSTextRange(range, in: textContentManager),
let textView = textView
else {
Expand Down Expand Up @@ -89,8 +91,8 @@ final class STTextFinderClient: NSObject, NSTextFinderClient {

get {
guard let textLayoutManager = textView?.textLayoutManager,
let textContentManager = textLayoutManager.textContentManager,
!textLayoutManager.textSelections.isEmpty
!textLayoutManager.textSelections.isEmpty,
let textContentManager = textLayoutManager.textContentManager
else {
return []
}
Expand All @@ -108,7 +110,8 @@ final class STTextFinderClient: NSObject, NSTextFinderClient {

func scrollRangeToVisible(_ range: NSRange) {
guard let textView = textView,
let textRange = NSTextRange(range, in: textView.textContentManager)
let textContentManager = textView.textLayoutManager.textContentManager,
let textRange = NSTextRange(range, in: textContentManager)
else {
return
}
Expand All @@ -128,8 +131,7 @@ final class STTextFinderClient: NSObject, NSTextFinderClient {
}

func rects(forCharacterRange range: NSRange) -> [NSValue]? {
guard let textLayoutManager = textView?.textLayoutManager,
let textContentManager = textLayoutManager.textContentManager,
guard let textContentManager = textView?.textLayoutManager.textContentManager,
let textRange = NSTextRange(range, in: textContentManager)
else {
return nil
Expand Down
6 changes: 5 additions & 1 deletion Sources/STTextView/STTextViewDelegateProxy.swift
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,15 @@ class STTextViewDelegateProxy: STTextViewDelegate {
}

func textView(_ textView: STTextView, menu: NSMenu, for event: NSEvent, at location: NSTextLocation) -> NSMenu? {
guard let textContentManager = textView.textLayoutManager.textContentManager else {
return nil
}

let effectiveMenu = source?.textView(textView, menu: menu, for: event, at: location)

// Append plugins menus
let pluginMenus = textView.plugins.events.compactMap { events in
events.onContextMenuHandler?(location, textView.textContentManager)
events.onContextMenuHandler?(location, textContentManager)
}

if let effectiveMenu, !pluginMenus.isEmpty {
Expand Down

0 comments on commit 62f82d1

Please sign in to comment.