Skip to content

Commit b3d1fae

Browse files
committed
perf: merged theming optimizations from simonbs#380
1 parent f154b63 commit b3d1fae

8 files changed

Lines changed: 14 additions & 7 deletions

File tree

Sources/Runestone/StringSyntaxHighlighter.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public final class StringSyntaxHighlighter {
2727
/// - language: The language to use when parsing the text
2828
/// - languageProvider: Object that can provide embedded languages on demand. A strong reference will be stored to the language provider..
2929
public init(
30-
theme: Theme = DefaultTheme(),
30+
theme: Theme = DefaultTheme.share,
3131
language: TreeSitterLanguage,
3232
languageProvider: TreeSitterLanguageProvider? = nil
3333
) {

Sources/Runestone/TextView/Appearance/DefaultTheme.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ public final class DefaultTheme: Runestone.Theme {
1818
public let selectionColor = UIColor(themeColorNamed: "selection")
1919

2020
public init() {}
21+
22+
public static let share = DefaultTheme()
2123

2224
// swiftlint:disable:next cyclomatic_complexity
2325
public func textColor(for highlightName: String) -> UIColor? {

Sources/Runestone/TextView/Core/LayoutManager.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public class LayoutManager {
3535
}
3636
}
3737
}
38-
var theme: Theme = DefaultTheme() {
38+
var theme: Theme = DefaultTheme.share {
3939
didSet {
4040
if theme !== oldValue {
4141
gutterBackgroundView.backgroundColor = theme.gutterBackgroundColor

Sources/Runestone/TextView/Core/TextInputView.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -914,7 +914,11 @@ public class TextInputView: UIView, UITextInput {
914914
super.pressesEnded(presses, with: event)
915915
if let keyCode = presses.first?.key?.keyCode, presses.count == 1 {
916916
if markedRange != nil {
917-
handleKeyPressDuringMultistageTextInput(keyCode: keyCode)
917+
if #available(iOS 13.4, *) {
918+
handleKeyPressDuringMultistageTextInput(keyCode: keyCode)
919+
} else {
920+
// Fallback on earlier versions
921+
}
918922
}
919923
}
920924
}
@@ -936,6 +940,7 @@ private extension TextInputView {
936940

937941
// MARK: - Navigation
938942
private extension TextInputView {
943+
@available(iOS 13.4, *)
939944
private func handleKeyPressDuringMultistageTextInput(keyCode: UIKeyboardHIDUsage) {
940945
// When editing multistage text input (that is, we have a marked text) we let the user unmark the text
941946
// by pressing the arrow keys or Escape. This isn't common in iOS apps but it's the default behavior

Sources/Runestone/TextView/Core/TextView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -655,7 +655,7 @@ open class TextView: UIScrollView {
655655
/// Create a new text view.
656656
/// - Parameter frame: The frame rectangle of the text view.
657657
override public init(frame: CGRect) {
658-
textInputView = TextInputView(theme: DefaultTheme())
658+
textInputView = TextInputView(theme: DefaultTheme.share)
659659
super.init(frame: frame)
660660
backgroundColor = .white
661661
textInputView.delegate = self

Sources/Runestone/TextView/LineController/LineController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ final class LineController {
2525
}
2626
}
2727
}
28-
var theme: Theme = DefaultTheme() {
28+
var theme: Theme = DefaultTheme.share {
2929
didSet {
3030
syntaxHighlighter?.theme = theme
3131
applyThemeToAllLineFragmentControllers()

Sources/Runestone/TextView/SyntaxHighlighting/Internal/PlainText/PlainTextSyntaxHighlighter.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import CoreGraphics
22
import Foundation
33

44
final class PlainTextSyntaxHighlighter: LineSyntaxHighlighter {
5-
var theme: Theme = DefaultTheme()
5+
var theme: Theme = DefaultTheme.share
66
var kern: CGFloat = 0
77
var canHighlight: Bool {
88
false

Sources/Runestone/TextView/SyntaxHighlighting/Internal/TreeSitter/TreeSitterSyntaxHighlighter.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ enum TreeSitterSyntaxHighlighterError: LocalizedError {
1515
}
1616

1717
final class TreeSitterSyntaxHighlighter: LineSyntaxHighlighter {
18-
var theme: Theme = DefaultTheme()
18+
var theme: Theme = DefaultTheme.share
1919
var kern: CGFloat = 0
2020
var canHighlight: Bool {
2121
languageMode.canHighlight

0 commit comments

Comments
 (0)