@@ -68,18 +68,41 @@ final class SquirrelTheme {
6868 private var fonts = [ NSFont] ( )
6969 private var labelFonts = [ NSFont] ( )
7070 private var commentFonts = [ NSFont] ( )
71+ private var fontSize : CGFloat ?
72+ private var labelFontSize : CGFloat ?
73+ private var commentFontSize : CGFloat ?
7174
7275 private var candidateTemplate = " [label]. [candidate] [comment] "
7376 var statusMessageType : StatusMessageType = . mix
7477
78+ private var defaultFont : NSFont {
79+ if let size = fontSize {
80+ Self . defaultFont. withSize ( size)
81+ } else {
82+ Self . defaultFont
83+ }
84+ }
85+
7586 var font : NSFont {
76- return combineFonts ( fonts) ?? Self . defaultFont
87+ return combineFonts ( fonts, size : fontSize ) ?? defaultFont
7788 }
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+ }
8097 }
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+ }
83106 }
84107 var attrs : [ NSAttributedString . Key : Any ] {
85108 [ . foregroundColor: candidateTextColor,
@@ -93,23 +116,23 @@ final class SquirrelTheme {
93116 }
94117 var labelAttrs : [ NSAttributedString . Key : Any ] {
95118 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 ) ]
98121 }
99122 var labelHighlightedAttrs : [ NSAttributedString . Key : Any ] {
100123 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 ) ]
103126 }
104127 var commentAttrs : [ NSAttributedString . Key : Any ] {
105128 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 ) ]
108131 }
109132 var commentHighlightedAttrs : [ NSAttributedString . Key : Any ] {
110133 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 ) ]
113136 }
114137 var preeditAttrs : [ NSAttributedString . Key : Any ] {
115138 [ . foregroundColor: textColor,
@@ -246,28 +269,33 @@ final class SquirrelTheme {
246269 } else {
247270 native = true
248271 }
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
258279 }
259280}
260281
261282private extension SquirrelTheme {
262- func combineFonts( _ fonts: [ NSFont ] ) -> NSFont ? {
283+ func combineFonts( _ fonts: [ NSFont ] , size : CGFloat ? ) -> NSFont ? {
263284 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+ }
265292 let attribute = [ NSFontDescriptor . AttributeName. cascadeList: fonts [ 1 ... ] . map { $0. fontDescriptor } ]
266293 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)
268295 }
269296
270- func decodeFonts( from fontString: String , size: CGFloat ? ) -> [ NSFont ] {
297+ func decodeFonts( from fontString: String ? ) -> [ NSFont ] {
298+ guard let fontString = fontString else { return [ ] }
271299 var seenFontFamilies = Set < String > ( )
272300 let fontStrings = fontString. split ( separator: " , " )
273301 var fonts = [ NSFont] ( )
@@ -280,7 +308,7 @@ private extension SquirrelTheme {
280308 }
281309 if !seenFontFamilies. contains ( familyName) {
282310 seenFontFamilies. insert ( familyName)
283- if let validFont = NSFont ( name: trimedString, size: size ?? Self . defaultFontSize) {
311+ if let validFont = NSFont ( name: trimedString, size: Self . defaultFontSize) {
284312 fonts. append ( validFont)
285313 }
286314 }
0 commit comments