In my app I am having an odd issue with underlines. I don’t have the issue with any other font related properties (size, style, bold, etc,), only with underlines.
I have text data in an NSTextView, theView. The underlines are correct everywhere in the text.
I use code like this:
dataPointers? = 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?
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
I then use that bitmap buffer to create some textures for OpenGL (I know, I should be using Metal and I will be soon) and render them to another window. Not all of the underlines are visible. The ones towards the beginning of the file are missing. The ones towards the end of the file are correct.
The text can be quite long, 5000+ lines. If i delete a chunk of text out of the middle of the file, the underlines at the start of the file appear correctly in the OpenGL view. This is why I have the clone the NSTextView before the operation, otherwise it takes so long that it interferes with the user editing the NSTextView in the window.
I’ve gone thru the attributes one by one and they are the same every time, both at the start and end of the file and in the cases where the underlines are visible and not visible in my OpenGL window.
As I said above, all other text attributes are always correct.
The source of the text is either an RTF file, or pasted in from another app or typed directly into the NSTextView. No matter the source the behavior is the same.