Интервал мигания точки вставки в macOS - PullRequest
0 голосов
/ 05 января 2019

Я работаю над подклассом NSTextView, и теперь мне нужно рисовать точки вставки текста самостоятельно во время остановки формального таймера точки вставки NSTextView. Мне удалось нарисовать свой собственный, но я не смог найти способ получения временного интервала мигания точки вставки текста.

Согласно моим наблюдениям в NSTextView, NSTextView (подкласс) управляет миганием курсора, используя частный NSTimer, но этот таймер отключается, когда textView имеет только непустые выделения (потому что нет точки вставки для рисования) или при перетаскивании. Поэтому мне нужно иметь собственный таймер с подходящим интервалом для рисования фальшивых точек вставки.

Копая исходный код древнего OpenStep, магическое число для него, похоже, составляет 0,5 секунды. Однако в настоящее время пользователи могут настроить интервал или даже отключить мигание. Аналогично, система также может изменить интервал для определенных ситуаций или в будущем. Я хотел бы уважать эти предпочтения, но я не мог найти правильный путь для этого.

Кто-нибудь знает, как его получить (без доступа к частному API)?


Что я делаю до сих пор:

private struct BlinkPeriod {

    var on: Int
    var off: Int
}


private extension UserDefaults {

    var textInsertionPointBlinkPeriod: BlinkPeriod {

        let onPeriod = self.integer(forKey: "NSTextInsertionPointBlinkPeriodOn")
        let offPeriod = self.integer(forKey: "NSTextInsertionPointBlinkPeriodOff")

        return BlinkPeriod(on: (onPeriod > 0) ? onPeriod : 500,
                           off: (offPeriod > 0) ? offPeriod : 500)
    }

}

Но я чувствую, что это грязно и не знаю, когда система изменила период: /

...