2

在我的应用程序中,我遇到了一个奇怪的下划线问题。我没有任何其他与字体相关的属性(大小、样式、粗体等)的问题,只有下划线。

我在 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 中的。无论来源如何,行为都是相同的。

4

0 回答 0