Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
# pragma mark Custom caret
- (void)drawInsertionPointInRect:(NSRect)aRect color:(NSColor *)aColor turnedOn:(BOOL)flag {
aRect.size.width = self.caretWidth;
[super drawInsertionPointInRect:aRect color:aColor turnedOn:flag];
// This is a hack to get the caret drawing to work. I know, I know.
- (void)setNeedsDisplayInRect:(NSRect)invalidRect {
invalidRect.size.width += self.caretWidth - 1;
[super setNeedsDisplayInRect:invalidRect];
Copy link

soffes commented Feb 27, 2019

Can confirm this works. I know, I know.

Copy link

gongzhang commented Aug 28, 2020

Swift version:

override func drawInsertionPoint(in rect: NSRect, color: NSColor, turnedOn flag: Bool) {
    var rect = rect
    rect.size.width = customCaretWidth

    let path = NSBezierPath(roundedRect: rect, xRadius: customCaretWidth / 2, yRadius: customCaretWidth / 2)

override func setNeedsDisplay(_ rect: NSRect, avoidAdditionalLayout flag: Bool) {
    var rect = rect
    rect.size.width += customCaretWidth - 1
    super.setNeedsDisplay(rect, avoidAdditionalLayout: flag)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment