Как установить ширину свойства абзаца в NSTextView - PullRequest
0 голосов
/ 20 февраля 2019

Мой английский ужасен, и я не знаю, как его описать.

Пожалуйста, посмотрите на картинку, которую я загрузил первым.Это скриншот от Ulysses.

enter image description here

Это должен быть элемент управления NSTextView.Выбрав весь текст, я обнаружил, что он может управлять левым смещением определенного абзаца.

Я пытался имитировать его.

Но я обнаружил, что стиль абзаца NSMutable не выглядитчтобы достичь такого эффекта, он может достичь только эффекта, подобного следующему:

enter image description here

Проще говоря, я хочу добиться эффектапредыдущей картинки, но только эффект второй картинки.

Я посмотрел на другой вопрос, но он был в основном о цвете фона, и я хотел знать вопрос об отступах, чтобы я мог добиться большего результата.

Выбор NSTextView выделяет все символы, даже отступы абзаца

Как реализован Ulysses?

1 Ответ

0 голосов
/ 21 февраля 2019

Вы можете изменить рисование прямоугольников выделения, переопределив fillBackgroundRectArray(_: count:forCharacterRange:color:) в своем NSLayoutManager подклассе.

class MyLayoutManager: NSLayoutManager {

    override func fillBackgroundRectArray(_ rectArray: UnsafePointer<NSRect>, count rectCount: Int, forCharacterRange charRange: NSRange, color: NSColor) {
        // selection rects to draw a highlight.
        var rects: [NSRect] = Array(UnsafeBufferPointer(start: rectArray, count: rectCount))

        // modify rects here...

        // call super and pass in your custom rects array.
        super.fillBackgroundRectArray(&rects, count: rectCount, forCharacterRange: charRange, color: color)
    }

}

И вы можете достичь чего-то подобного:

enter image description here


Кстати, вы можете заменить менеджер макета текстового представления, используя:

textView.textContainer?.replaceLayoutManager(MyLayoutManager())
...