@@ -18,6 +18,7 @@ protocol VisibleRangeProviderDelegate: AnyObject {
1818@MainActor
1919class VisibleRangeProvider {
2020 private weak var textView : TextView ?
21+ private weak var minimapView : MinimapView ?
2122 weak var delegate : VisibleRangeProviderDelegate ?
2223
2324 var documentRange : NSRange {
@@ -29,56 +30,44 @@ class VisibleRangeProvider {
2930 return IndexSet ( integersIn: textView? . visibleTextRange ?? NSRange ( ) )
3031 } ( )
3132
32- init ( textView: TextView ) {
33+ init ( textView: TextView , minimapView : MinimapView ? ) {
3334 self . textView = textView
35+ self . minimapView = minimapView
3436
3537 if let scrollView = textView. enclosingScrollView {
3638 NotificationCenter . default. addObserver (
3739 self ,
38- selector: #selector( visibleTextChanged ( _ : ) ) ,
40+ selector: #selector( visibleTextChanged) ,
3941 name: NSView . frameDidChangeNotification,
4042 object: scrollView
4143 )
4244
4345 NotificationCenter . default. addObserver (
4446 self ,
45- selector: #selector( visibleTextChanged ( _ : ) ) ,
47+ selector: #selector( visibleTextChanged) ,
4648 name: NSView . boundsDidChangeNotification,
4749 object: scrollView. contentView
4850 )
49- } else {
50- NotificationCenter . default. addObserver (
51- self ,
52- selector: #selector( visibleTextChanged ( _: ) ) ,
53- name: NSView . frameDidChangeNotification,
54- object: textView
55- )
5651 }
57- }
5852
59- func updateVisibleSet( textView: TextView ) {
60- if let newVisibleRange = textView. visibleTextRange {
61- visibleSet = IndexSet ( integersIn: newVisibleRange)
62- }
53+ NotificationCenter . default. addObserver (
54+ self ,
55+ selector: #selector( visibleTextChanged) ,
56+ name: NSView . frameDidChangeNotification,
57+ object: textView
58+ )
6359 }
6460
6561 /// Updates the view to highlight newly visible text when the textview is scrolled or bounds change.
66- @objc func visibleTextChanged( _ notification: Notification ) {
67- let textView : TextView
68- if let clipView = notification. object as? NSClipView ,
69- let documentView = clipView. enclosingScrollView? . documentView as? TextView {
70- textView = documentView
71- } else if let scrollView = notification. object as? NSScrollView ,
72- let documentView = scrollView. documentView as? TextView {
73- textView = documentView
74- } else if let documentView = notification. object as? TextView {
75- textView = documentView
76- } else {
62+ @objc func visibleTextChanged( ) {
63+ guard let textViewVisibleRange = textView? . visibleTextRange else {
7764 return
7865 }
79-
80- updateVisibleSet ( textView: textView)
81-
66+ var visibleSet = IndexSet ( integersIn: textViewVisibleRange)
67+ if !( minimapView? . isHidden ?? true ) , let minimapVisibleRange = minimapView? . visibleTextRange {
68+ visibleSet. formUnion ( IndexSet ( integersIn: minimapVisibleRange) )
69+ }
70+ self . visibleSet = visibleSet
8271 delegate? . visibleSetDidUpdate ( visibleSet)
8372 }
8473
0 commit comments