From 005c2048af141e3658a170c283dd41bd4fb5cdcb Mon Sep 17 00:00:00 2001 From: Ruben Beltran del Rio Date: Wed, 9 Jul 2025 08:54:22 +0200 Subject: Make soft-wrap configurable. --- Map/Presentation/Base Components/MapTextEditor.swift | 16 ++++++++++++---- Map/Presentation/MapEditor.swift | 4 +++- Map/Presentation/Preferences/EditorPreferencesView.swift | 9 +++++++++ 3 files changed, 24 insertions(+), 5 deletions(-) (limited to 'Map/Presentation') diff --git a/Map/Presentation/Base Components/MapTextEditor.swift b/Map/Presentation/Base Components/MapTextEditor.swift index c4ac561..4295918 100644 --- a/Map/Presentation/Base Components/MapTextEditor.swift +++ b/Map/Presentation/Base Components/MapTextEditor.swift @@ -82,12 +82,20 @@ class MapTextEditorController: NSViewController { textView.font = NSFont.Theme.Editor.regular textView.textContainerInset = NSSize(width: 0, height: Dimensions.Spacing.coziest) - // Disable word wrapping to prevent flashing on soft-wrapped lines - textView.textContainer?.widthTracksTextView = false - textView.textContainer?.containerSize = NSSize( - width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude) + // Configure text wrapping based on user preference + let softWrapLines = UserDefaults.standard.bool(forKey: "softWrapLines") + if !softWrapLines { + // Disable word wrapping to prevent flashing on soft-wrapped lines + textView.textContainer?.widthTracksTextView = false + textView.textContainer?.containerSize = NSSize( + width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude) + } else { + textView.textContainer?.widthTracksTextView = true + } + textView.isHorizontallyResizable = true textView.isVerticallyResizable = true + self.view = scrollView } diff --git a/Map/Presentation/MapEditor.swift b/Map/Presentation/MapEditor.swift index 0f8f24e..c8ce5cd 100644 --- a/Map/Presentation/MapEditor.swift +++ b/Map/Presentation/MapEditor.swift @@ -32,6 +32,8 @@ struct MapEditor: View { @AppStorage("customEditorFontName") var customEditorFontName: String = UserPreferences.Defaults .customEditorFontName @AppStorage("editorFontSize") var editorFontSize: Double = UserPreferences.Defaults.editorFontSize + @AppStorage("softWrapLines") var softWrapLines: Bool = UserPreferences.Defaults + .softWrapLines let zoomRange = Constants.kMinZoom...Constants.kMaxZoom @AppStorage("zoom") var zoom = UserPreferences.Defaults.zoom @@ -110,7 +112,7 @@ struct MapEditor: View { highlightRanges: results, selectedRange: selectedTerm ) - .id("\(useCustomEditorFont)-\(customEditorFontName)-\(editorFontSize)") + .id("\(useCustomEditorFont)-\(customEditorFontName)-\(editorFontSize)-\(softWrapLines)") .background(Color.Theme.UI.background) .foregroundColor(Color.Theme.UI.foreground) .frame(minHeight: 96.0) diff --git a/Map/Presentation/Preferences/EditorPreferencesView.swift b/Map/Presentation/Preferences/EditorPreferencesView.swift index 23359b2..c08b03e 100644 --- a/Map/Presentation/Preferences/EditorPreferencesView.swift +++ b/Map/Presentation/Preferences/EditorPreferencesView.swift @@ -24,6 +24,8 @@ struct EditorPreferencesView: View { .customEditorFontName @AppStorage("editorFontSize") private var editorFontSize: Double = UserPreferences.Defaults .editorFontSize + @AppStorage("softWrapLines") private var softWrapLines: Bool = UserPreferences.Defaults + .softWrapLines var monospacedFonts: [String] { let fontManager = NSFontManager.shared @@ -78,6 +80,13 @@ struct EditorPreferencesView: View { VStack(alignment: .leading, spacing: Dimensions.Spacing.cozy) { + Toggle( + isOn: $softWrapLines, + label: { + Text("preferences.editor.editor_style.soft_wrap_lines") + .font(.Theme.Body.regular) + }) + Toggle( isOn: $useCustomEditorFont, label: { -- cgit