TextEditorEX // Remove (buggy) tooltip binding support.

- This binding causes responsiveness issues towards the editor.
This commit is contained in:
ShikiSuen 2022-12-10 14:41:56 +08:00
parent 495270c4da
commit ac6b53b3ec
2 changed files with 6 additions and 12 deletions

View File

@ -248,7 +248,7 @@ public struct VwrPhraseEditorUI: View {
} }
} }
TextEditorEX(text: $txtContent, tooltip: $textEditorTooltip) TextEditorEX(text: $txtContent)
.disabled(selInputMode == .imeModeNULL || isLoading) .disabled(selInputMode == .imeModeNULL || isLoading)
.frame(minWidth: 320, minHeight: 240) .frame(minWidth: 320, minHeight: 240)
.backport.onChange(of: fileChangeIndicator.id) { _ in .backport.onChange(of: fileChangeIndicator.id) { _ in

View File

@ -89,11 +89,9 @@ public struct VisualEffectView: NSViewRepresentable {
/// A much faster alternative than Apple official TextEditor. /// A much faster alternative than Apple official TextEditor.
public struct TextEditorEX: NSViewRepresentable { public struct TextEditorEX: NSViewRepresentable {
@Binding var text: String @Binding var text: String
@Binding var tooltip: String
public init(text: Binding<String>, tooltip: Binding<String>) { public init(text: Binding<String>) {
_text = text _text = text
_tooltip = tooltip
} }
public func makeNSView(context: Context) -> NSScrollView { public func makeNSView(context: Context) -> NSScrollView {
@ -101,23 +99,20 @@ public struct TextEditorEX: NSViewRepresentable {
} }
public func updateNSView(_ nsView: NSScrollView, context _: Context) { public func updateNSView(_ nsView: NSScrollView, context _: Context) {
if let textArea = nsView.documentView as? NSTextView { if let textArea = nsView.documentView as? NSTextView, textArea.string != self.text {
if textArea.string != text { textArea.string = text } textArea.string = text
if textArea.toolTip != tooltip { textArea.toolTip = tooltip }
} }
} }
public func makeCoordinator() -> Coordinator { public func makeCoordinator() -> Coordinator {
Coordinator(text: $text, tooltip: $tooltip) Coordinator(text: $text)
} }
public class Coordinator: NSObject, NSTextViewDelegate { public class Coordinator: NSObject, NSTextViewDelegate {
public var text: Binding<String> public var text: Binding<String>
public var tooltip: Binding<String>
public init(text: Binding<String>, tooltip: Binding<String>) { public init(text: Binding<String>) {
self.text = text self.text = text
self.tooltip = tooltip
} }
public func textView(_ textView: NSTextView, shouldChangeTextIn range: NSRange, replacementString text: String?) public func textView(_ textView: NSTextView, shouldChangeTextIn range: NSRange, replacementString text: String?)
@ -125,7 +120,6 @@ public struct TextEditorEX: NSViewRepresentable {
{ {
defer { defer {
self.text.wrappedValue = (textView.string as NSString).replacingCharacters(in: range, with: text!) self.text.wrappedValue = (textView.string as NSString).replacingCharacters(in: range, with: text!)
self.tooltip.wrappedValue = (textView.toolTip as? NSString ?? "").replacingCharacters(in: range, with: text!)
} }
return true return true
} }