私のアプリでは、下線に奇妙な問題があります。他のフォント関連のプロパティ (サイズ、スタイル、太字など) には問題はなく、下線のみがあります。
NSTextView、theView にテキスト データがあります。下線はテキストのどこでも正しいです。
私は次のようなコードを使用します:
dataPointers?[0] = UnsafeMutablePointer<UInt8>.allocate(capacity: totalBytes)
cachedBMs[appDel.nextFrameIndex] = NSBitmapImageRep(bitmapDataPlanes: dataPointers, pixelsWide: Int(viewFrame.size.width * 2), pixelsHigh: Int(viewFrame.size.height * 2), bitsPerSample: 8, samplesPerPixel: 4, hasAlpha: true, isPlanar: false, colorSpaceName: NSCalibratedRGBColorSpace, bytesPerRow: Int(bytesPerRow), bitsPerPixel: 32)
cachedBMs[appDel.nextFrameIndex]?.size = NSSize(width: viewFrame.size.width, height: viewFrame.size.height)
cachedBMsDataPointer[appDel.nextFrameIndex] = dataPointers?[0]
cachedBMsSize[appDel.nextFrameIndex] = totalBytes
if let bitmap = cachedBMs[appDel.nextFrameIndex]
{
theView = NSKeyedUnarchiver.unarchiveObject(with: NSKeyedArchiver.archivedData(withRootObject: originalView))!
theView.cacheDisplay(in: viewFrame, to: bitmap)
cachedBMsDataPointer[appDel.nextFrameIndex] = bitmap.bitmapData
}
次に、そのビットマップ バッファーを使用して OpenGL 用のテクスチャを作成し (Metal を使用する必要があり、すぐに使用する予定です)、それらを別のウィンドウにレンダリングします。すべての下線が表示されているわけではありません。ファイルの先頭の方が欠落しています。ファイルの末尾の方が正しいです。
テキストは非常に長く、5000 行以上になる場合があります。ファイルの途中からテキストのチャンクを削除すると、ファイルの先頭にある下線が OpenGL ビューで正しく表示されます。これが、操作の前に NSTextView のクローンを作成する理由です。そうしないと、ユーザーがウィンドウで NSTextView を編集するのを妨げるほど時間がかかります。
属性を 1 つずつ確認しましたが、ファイルの最初と最後、および OpenGL ウィンドウで下線が表示されている場合と表示されていない場合の両方で、属性は毎回同じです。
上で述べたように、他のすべてのテキスト属性は常に正しいです。
テキストのソースは、RTF ファイルであるか、別のアプリから貼り付けられているか、NSTextView に直接入力されています。ソースに関係なく、動作は同じです。