@@ -68,18 +68,41 @@ final class SquirrelTheme {
68
68
private var fonts = [ NSFont] ( )
69
69
private var labelFonts = [ NSFont] ( )
70
70
private var commentFonts = [ NSFont] ( )
71
+ private var fontSize : CGFloat ?
72
+ private var labelFontSize : CGFloat ?
73
+ private var commentFontSize : CGFloat ?
71
74
72
75
private var candidateTemplate = " [label]. [candidate] [comment] "
73
76
var statusMessageType : StatusMessageType = . mix
77
+
78
+ private var defaultFont : NSFont {
79
+ if let size = fontSize {
80
+ Self . defaultFont. withSize ( size)
81
+ } else {
82
+ Self . defaultFont
83
+ }
84
+ }
74
85
75
86
var font : NSFont {
76
- return combineFonts ( fonts) ?? Self . defaultFont
87
+ return combineFonts ( fonts, size : fontSize ) ?? defaultFont
77
88
}
78
- var labelFont : NSFont ? {
79
- return combineFonts ( labelFonts)
89
+ var labelFont : NSFont {
90
+ if let font = combineFonts ( labelFonts, size: labelFontSize ?? fontSize) {
91
+ return font
92
+ } else if let size = labelFontSize {
93
+ return self . font. withSize ( size)
94
+ } else {
95
+ return self . font
96
+ }
80
97
}
81
- var commentFont : NSFont ? {
82
- return combineFonts ( commentFonts)
98
+ var commentFont : NSFont {
99
+ if let font = combineFonts ( commentFonts, size: commentFontSize ?? fontSize) {
100
+ return font
101
+ } else if let size = commentFontSize {
102
+ return self . font. withSize ( size)
103
+ } else {
104
+ return self . font
105
+ }
83
106
}
84
107
var attrs : [ NSAttributedString . Key : Any ] {
85
108
[ . foregroundColor: candidateTextColor,
@@ -93,23 +116,23 @@ final class SquirrelTheme {
93
116
}
94
117
var labelAttrs : [ NSAttributedString . Key : Any ] {
95
118
return [ . foregroundColor: candidateLabelColor ?? blendColor ( foregroundColor: self . candidateTextColor, backgroundColor: self . backgroundColor) ,
96
- . font: labelFont ?? font ,
97
- . baselineOffset: baseOffset + ( labelFont != nil && ! vertical ? ( font. pointSize - labelFont! . pointSize) / 2 : 0 ) ]
119
+ . font: labelFont,
120
+ . baselineOffset: baseOffset + ( ! vertical ? ( font. pointSize - labelFont. pointSize) / 2 : 0 ) ]
98
121
}
99
122
var labelHighlightedAttrs : [ NSAttributedString . Key : Any ] {
100
123
return [ . foregroundColor: highlightedCandidateLabelColor ?? blendColor ( foregroundColor: highlightedCandidateTextColor, backgroundColor: highlightedBackColor) ,
101
- . font: labelFont ?? font ,
102
- . baselineOffset: baseOffset + ( labelFont != nil && ! vertical ? ( font. pointSize - labelFont! . pointSize) / 2 : 0 ) ]
124
+ . font: labelFont,
125
+ . baselineOffset: baseOffset + ( ! vertical ? ( font. pointSize - labelFont. pointSize) / 2 : 0 ) ]
103
126
}
104
127
var commentAttrs : [ NSAttributedString . Key : Any ] {
105
128
return [ . foregroundColor: commentTextColor ?? candidateTextColor,
106
- . font: commentFont ?? font ,
107
- . baselineOffset: baseOffset + ( commentFont != nil && ! vertical ? ( font. pointSize - commentFont! . pointSize) / 2 : 0 ) ]
129
+ . font: commentFont,
130
+ . baselineOffset: baseOffset + ( ! vertical ? ( font. pointSize - commentFont. pointSize) / 2 : 0 ) ]
108
131
}
109
132
var commentHighlightedAttrs : [ NSAttributedString . Key : Any ] {
110
133
return [ . foregroundColor: highlightedCommentTextColor ?? highlightedCandidateTextColor,
111
- . font: commentFont ?? font ,
112
- . baselineOffset: baseOffset + ( commentFont != nil && ! vertical ? ( font. pointSize - commentFont! . pointSize) / 2 : 0 ) ]
134
+ . font: commentFont,
135
+ . baselineOffset: baseOffset + ( ! vertical ? ( font. pointSize - commentFont. pointSize) / 2 : 0 ) ]
113
136
}
114
137
var preeditAttrs : [ NSAttributedString . Key : Any ] {
115
138
[ . foregroundColor: textColor,
@@ -246,28 +269,33 @@ final class SquirrelTheme {
246
269
} else {
247
270
native = true
248
271
}
249
- if let name = fontName {
250
- fonts = decodeFonts ( from: name, size: fontSize)
251
- }
252
- if let name = labelFontName ?? fontName {
253
- labelFonts = decodeFonts ( from: name, size: labelFontSize ?? fontSize)
254
- }
255
- if let name = commentFontName ?? fontName {
256
- commentFonts = decodeFonts ( from: name, size: commentFontSize ?? fontSize)
257
- }
272
+
273
+ fonts = decodeFonts ( from: fontName)
274
+ self . fontSize = fontSize
275
+ labelFonts = decodeFonts ( from: labelFontName ?? fontName)
276
+ self . labelFontSize = labelFontSize
277
+ commentFonts = decodeFonts ( from: commentFontName ?? fontName)
278
+ self . commentFontSize = commentFontSize
258
279
}
259
280
}
260
281
261
282
private extension SquirrelTheme {
262
- func combineFonts( _ fonts: [ NSFont ] ) -> NSFont ? {
283
+ func combineFonts( _ fonts: [ NSFont ] , size : CGFloat ? ) -> NSFont ? {
263
284
if fonts. count == 0 { return nil }
264
- if fonts. count == 1 { return fonts [ 0 ] }
285
+ if fonts. count == 1 {
286
+ if let size = size {
287
+ return fonts [ 0 ] . withSize ( size)
288
+ } else {
289
+ return fonts [ 0 ]
290
+ }
291
+ }
265
292
let attribute = [ NSFontDescriptor . AttributeName. cascadeList: fonts [ 1 ... ] . map { $0. fontDescriptor } ]
266
293
let fontDescriptor = fonts [ 0 ] . fontDescriptor. addingAttributes ( attribute)
267
- return NSFont . init ( descriptor: fontDescriptor, size: fonts [ 0 ] . pointSize)
294
+ return NSFont . init ( descriptor: fontDescriptor, size: size ?? fonts [ 0 ] . pointSize)
268
295
}
269
296
270
- func decodeFonts( from fontString: String , size: CGFloat ? ) -> [ NSFont ] {
297
+ func decodeFonts( from fontString: String ? ) -> [ NSFont ] {
298
+ guard let fontString = fontString else { return [ ] }
271
299
var seenFontFamilies = Set < String > ( )
272
300
let fontStrings = fontString. split ( separator: " , " )
273
301
var fonts = [ NSFont] ( )
@@ -280,7 +308,7 @@ private extension SquirrelTheme {
280
308
}
281
309
if !seenFontFamilies. contains ( familyName) {
282
310
seenFontFamilies. insert ( familyName)
283
- if let validFont = NSFont ( name: trimedString, size: size ?? Self . defaultFontSize) {
311
+ if let validFont = NSFont ( name: trimedString, size: Self . defaultFontSize) {
284
312
fonts. append ( validFont)
285
313
}
286
314
}
0 commit comments