OSDN Git Service

10.13以降は CGGlyph を使用するようにした
[kcd/KCD.git] / KCD / StrokeTextFieldCell.swift
index b9b61f0..7ea4da5 100644 (file)
@@ -12,14 +12,11 @@ final class StrokeTextFieldCell: NSTextFieldCell {
     
     private static let boarderWidth: CGFloat = 2.0
     
-    private let layoutManager: NSLayoutManager
-    private let textContainer: NSTextContainer
+    private let layoutManager = NSLayoutManager()
+    private let textContainer = NSTextContainer()
     
     required init(coder: NSCoder) {
-        
-        layoutManager = NSLayoutManager()
-        textContainer = NSTextContainer()
-        
+                
         super.init(coder: coder)
         
         layoutManager.addTextContainer(textContainer)
@@ -38,8 +35,10 @@ final class StrokeTextFieldCell: NSTextFieldCell {
         
         let attribute = attributedString.attributes(at: 0, effectiveRange: nil)
         
-        guard let forgroundColor = attribute[.foregroundColor] as? NSColor
-            else { return }
+        guard let forgroundColor = attribute[.foregroundColor] as? NSColor else {
+            
+            return
+        }
         
         if forgroundColor == .controlTextColor {
             
@@ -48,8 +47,10 @@ final class StrokeTextFieldCell: NSTextFieldCell {
             return
         }
         
-        guard let font = attribute[.font] as? NSFont
-            else { return }
+        guard let font = attribute[.font] as? NSFont else {
+            
+            return
+        }
         
         let textStorage = NSTextStorage(string: attributedString.string, attributes: attribute)
         textStorage.addLayoutManager(layoutManager)
@@ -68,13 +69,16 @@ final class StrokeTextFieldCell: NSTextFieldCell {
             point.y -= controlView.frame.height
         }
         
-        let nsGlyph = UnsafeMutablePointer<NSGlyph>.allocate(capacity: range.length)
-        
-        (0..<range.length).forEach { nsGlyph[$0] = NSGlyph(glyph[$0]) }
-        
         let path = NSBezierPath()
         path.move(to: point)
-        path.appendGlyphs(nsGlyph, count: glyphLength, in: font)
+        if #available(macOS 13, *) {
+            path.append(withCGGlyphs: glyph, count: glyphLength, in: font)
+        } else {
+            let nsGlyph = UnsafeMutablePointer<NSGlyph>.allocate(capacity: range.length)
+            
+            (0..<range.length).forEach { nsGlyph[$0] = NSGlyph(glyph[$0]) }
+            path.appendGlyphs(nsGlyph, count: glyphLength, in: font)
+        }
         path.lineWidth = StrokeTextFieldCell.boarderWidth
         path.lineJoinStyle = .roundLineJoinStyle