Skip to content

Commit

Permalink
fix: Update nsAttributedString when defaultFont changes.
Browse files Browse the repository at this point in the history
  • Loading branch information
laosb committed Mar 1, 2024
1 parent ebd1de7 commit e398329
Showing 1 changed file with 29 additions and 6 deletions.
35 changes: 29 additions & 6 deletions Sources/EasyRichTextUI/ERTRichTextEditContext.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,26 +24,49 @@ public class ERTRichTextEditContext<RichText: ERTRichText>: ObservableObject {
@Published public private(set) var richText: RichText
@Published public private(set) var selectedRange: NSRange?
var nsAttributedString: NSMutableAttributedString
public var defaultFont: CTFont
public var defaultFont: CTFont {
didSet {
nsAttributedString = Self.nsAttributedString(
from: richText,
italicSynthesizer: italicSynthesizer,
defaultFont: defaultFont,
attributedStringBridge: attributedStringBridge
)
}
}
var onTextUpdated: ((NSAttributedString) -> ())?
public var onEndEditing: (() -> ())?

let italicSynthesizer: ERTItalicSynthesizer?
let attributedStringBridge: ERTAttributedStringBridge
let fontUtils: ERTFontUtils

static func nsAttributedString(
from richText: RichText,
italicSynthesizer: ERTItalicSynthesizer?,
defaultFont: CTFont,
attributedStringBridge: ERTAttributedStringBridge
) -> NSMutableAttributedString {
var attributedString = richText.attributedString(defaultFont: defaultFont)
if let italicSynthesizer {
attributedString = italicSynthesizer.synthesize(attributedString)
}
return .init(attributedString: attributedStringBridge.nsAttributedString(for: attributedString))
}

public init(richText: RichText, defaultFont: CTFont, italicSynthesizer: ERTItalicSynthesizer? = nil, attributedStringBridge: ERTAttributedStringBridge = .default, fontUtils: ERTFontUtils = .default) {
self.richText = richText
self.defaultFont = defaultFont
self.italicSynthesizer = italicSynthesizer
self.attributedStringBridge = attributedStringBridge
self.fontUtils = fontUtils

var attributedString = richText.attributedString(defaultFont: defaultFont)
if let italicSynthesizer {
attributedString = italicSynthesizer.synthesize(attributedString)
}
self.nsAttributedString = .init(attributedString: attributedStringBridge.nsAttributedString(for: attributedString))
self.nsAttributedString = Self.nsAttributedString(
from: richText,
italicSynthesizer: italicSynthesizer,
defaultFont: defaultFont,
attributedStringBridge: attributedStringBridge
)
}

func updateSelectedRange(_ range: NSRange?) {
Expand Down

0 comments on commit e398329

Please sign in to comment.