Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Theme background #123

Merged
merged 3 commits into from
Jan 23, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions Sources/CodeEditTextView/CodeEditTextView.swift
Original file line number Diff line number Diff line change
@@ -17,6 +17,7 @@ public struct CodeEditTextView: NSViewControllerRepresentable {
/// - text: The text content
/// - language: The language for syntax highlighting
/// - theme: The theme for syntax highlighting
/// - useThemeBackground: Whether CodeEditTextView uses theme background color or is transparent
/// - font: The default font
/// - tabWidth: The tab width
/// - lineHeight: The line height multiplier (e.g. `1.2`)
@@ -31,11 +32,13 @@ public struct CodeEditTextView: NSViewControllerRepresentable {
lineHeight: Binding<Double>,
wrapLines: Binding<Bool>,
editorOverscroll: Binding<Double> = .constant(0.0),
cursorPosition: Published<(Int, Int)>.Publisher? = nil
cursorPosition: Published<(Int, Int)>.Publisher? = nil,
useThemeBackground: Bool = true
) {
self._text = text
self.language = language
self._theme = theme
self.useThemeBackground = useThemeBackground
self._font = font
self._tabWidth = tabWidth
self._lineHeight = lineHeight
@@ -53,6 +56,7 @@ public struct CodeEditTextView: NSViewControllerRepresentable {
@Binding private var wrapLines: Bool
@Binding private var editorOverscroll: Double
private var cursorPosition: Published<(Int, Int)>.Publisher?
private var useThemeBackground: Bool

public typealias NSViewControllerType = STTextViewController

@@ -65,7 +69,8 @@ public struct CodeEditTextView: NSViewControllerRepresentable {
tabWidth: tabWidth,
wrapLines: wrapLines,
cursorPosition: cursorPosition,
editorOverscroll: editorOverscroll
editorOverscroll: editorOverscroll,
useThemeBackground: useThemeBackground
)
controller.lineHeightMultiple = lineHeight
return controller
@@ -75,6 +80,7 @@ public struct CodeEditTextView: NSViewControllerRepresentable {
controller.font = font
controller.tabWidth = tabWidth
controller.wrapLines = wrapLines
controller.useThemeBackground = useThemeBackground
controller.lineHeightMultiple = lineHeight
controller.editorOverscroll = editorOverscroll

19 changes: 13 additions & 6 deletions Sources/CodeEditTextView/STTextViewController.swift
Original file line number Diff line number Diff line change
@@ -33,6 +33,9 @@ public class STTextViewController: NSViewController, STTextViewDelegate, ThemeAt
highlighter?.invalidate()
}}

/// Whether the code editor should use the theme background color or be transparent
public var useThemeBackground: Bool

/// The number of spaces to use for a `tab '\t'` character
public var tabWidth: Int

@@ -63,7 +66,8 @@ public class STTextViewController: NSViewController, STTextViewDelegate, ThemeAt
tabWidth: Int,
wrapLines: Bool,
cursorPosition: Published<(Int, Int)>.Publisher? = nil,
editorOverscroll: Double
editorOverscroll: Double,
useThemeBackground: Bool
) {
self.text = text
self.language = language
@@ -73,6 +77,7 @@ public class STTextViewController: NSViewController, STTextViewDelegate, ThemeAt
self.wrapLines = wrapLines
self.cursorPosition = cursorPosition
self.editorOverscroll = editorOverscroll
self.useThemeBackground = useThemeBackground
super.init(nibName: nil, bundle: nil)
}

@@ -89,9 +94,10 @@ public class STTextViewController: NSViewController, STTextViewDelegate, ThemeAt
scrollView.translatesAutoresizingMaskIntoConstraints = false
scrollView.hasVerticalScroller = true
scrollView.documentView = textView
scrollView.drawsBackground = useThemeBackground

rulerView = STLineNumberRulerView(textView: textView, scrollView: scrollView)
rulerView.backgroundColor = theme.background
rulerView.backgroundColor = useThemeBackground ? theme.background : .clear
rulerView.textColor = .systemGray
rulerView.drawSeparator = false
rulerView.baselineOffset = baselineOffset
@@ -102,7 +108,7 @@ public class STTextViewController: NSViewController, STTextViewDelegate, ThemeAt
textView.defaultParagraphStyle = self.paragraphStyle
textView.font = self.font
textView.textColor = theme.text
textView.backgroundColor = theme.background
textView.backgroundColor = useThemeBackground ? theme.background : .clear
textView.insertionPointColor = theme.insertionPoint
textView.insertionPointWidth = 1.0
textView.selectionBackgroundColor = theme.selection
@@ -207,16 +213,17 @@ public class STTextViewController: NSViewController, STTextViewDelegate, ThemeAt
}

textView?.textColor = theme.text
textView?.backgroundColor = theme.background
textView.backgroundColor = useThemeBackground ? theme.background : .clear
textView?.insertionPointColor = theme.insertionPoint
textView?.selectionBackgroundColor = theme.selection
textView?.selectedLineHighlightColor = theme.lineHighlight

rulerView?.backgroundColor = theme.background
rulerView?.backgroundColor = useThemeBackground ? theme.background : .clear
rulerView?.separatorColor = theme.invisibles
rulerView?.baselineOffset = baselineOffset

(view as? NSScrollView)?.backgroundColor = theme.background
(view as? NSScrollView)?.drawsBackground = useThemeBackground
(view as? NSScrollView)?.backgroundColor = useThemeBackground ? theme.background : .clear
(view as? NSScrollView)?.contentView.contentInsets.bottom = bottomContentInsets

setStandardAttributes()
3 changes: 2 additions & 1 deletion Tests/CodeEditTextViewTests/STTextViewControllerTests.swift
Original file line number Diff line number Diff line change
@@ -34,7 +34,8 @@ final class STTextViewControllerTests: XCTestCase {
theme: theme,
tabWidth: 4,
wrapLines: true,
editorOverscroll: 0.5
editorOverscroll: 0.5,
useThemeBackground: true
)
}