NSTextView-> cacheDisplay失去一些下划线,但没有其他

时间:2018-12-27 15:01:29

标签: nstextview nsbitmapimagerep

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

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

0 个答案:

没有答案