NSTextView -> cacheDisplay теряет некоторые подчеркивания, но не другие
В моем приложении у меня странная проблема с подчеркиванием. У меня нет проблем с другими свойствами шрифта (размер, стиль, полужирный и т. Д.), Только с подчеркиванием.
У меня есть текстовые данные в 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 в окне.
Я просмотрел атрибуты один за другим, и они всегда одинаковы, как в начале, так и в конце файла, а также в тех случаях, когда подчеркивания видны и не видны в моем окне OpenGL.
Как я уже говорил выше, все остальные текстовые атрибуты всегда корректны.
Источником текста является либо файл RTF, либо вставленный из другого приложения, либо введенный непосредственно в NSTextView. Независимо от источника, поведение одинаково.