Генерация фрагмента строки
NSTypesetter
объект кладет текст в NSTextContainer
объект в строках глифов. Расположение этих строк в NSTextContainer
объект определяется его формой. Например, если текстовый контейнер является более узким в некоторых частях, чем в других, строки в тех частях должны быть сокращены; если существуют дыры в области, некоторые строки должны быть фрагментированы; если бы существует разрыв через весь регион, строки, которые наложились бы, это должно быть смещено для компенсации.
Встроенные наборные устройства, в настоящее время предоставляемые текстовую систему, поддерживают только расположение горизонтального текста. Однако текстовая система может поддерживать наборные устройства, размечающие текст вдоль строк, работающих или горизонтально или вертикально, и в любом направлении. Этот тип перемещения вызывают направлением развертки и выражают NSLineSweepDirection
введите в Objective C и константах направления развертки в Java. Направление, в котором тогда развиваются строки, вызывают направлением перемещения строки и выражают NSLineMovementDirection
введите в Objective C и константах перемещения строки в Java. Каждый влияет на корректировку прямоугольника фрагмента строки по-другому: прямоугольник может быть перемещен или сокращен вдоль направления развертки и смещен (но не изменен) в направлении перемещения строки.
Объект наборного устройства предлагает прямоугольник для данной строки, и затем спрашивает NSTextContainer
объект скорректировать прямоугольник для адаптации. Предложенный прямоугольник обычно охватывает текстовый ограничительный прямоугольник контейнера, но это может быть более узким или более широким, и это может также лечь частично или полностью вне ограничительного прямоугольника. Сообщение, что наборное устройство отправляет текстовый контейнер для корректировки предложенного прямоугольника, lineFragmentRectForProposedRect:sweepDirection:movementDirection:remainingRect:
, который возвращает самый большой прямоугольник, доступный для предложенного прямоугольника, на основе направления, в котором размечается текст. Это также возвращает прямоугольник, содержащий любое остающееся пространство, такое как оставленный с другой стороны дыры или разрыва в текстовом контейнере. Этот процесс проиллюстрирован на рисунке 1.
Для этих трех примеров на рисунке 1 направление развертки NSLineSweepRight
и направление перемещения строки NSLineMovesDown
. В первом примере предложенный прямоугольник охватывает ограничительный прямоугольник области и сокращен текстовым контейнером для адаптации в форме песочных часов без остатка.
Во втором примере предложенный прямоугольник пересекает дыру, таким образом, текстовый контейнер должен возвратить более короткий прямоугольник (белый прямоугольник слева) вместе с остатком (белый прямоугольник справа). Следующий прямоугольник, предложенный наборным устройством, тогда будет этим прямоугольником остатка, который будет возвращен неизменный текстовым контейнером.
В третьем примере разрыв пересекает весь текстовый контейнер. Здесь текстовый контейнер смещает предложенный прямоугольник вниз, пока это не находится полностью в области контейнера. Если направление перемещения строки здесь было NSLineDoesntMove
, текстовый контейнер должен был бы возвратиться NSRect.ZeroRect
указание, что просто не соответствует строка. В таком случае это до наборного устройства, чтобы предложить различный прямоугольник или идти дальше к различному контейнеру. Когда текстовый контейнер смещает прямоугольник фрагмента строки, менеджер по расположению принимает это во внимание для последующих строк.
Наборное устройство вносит одну окончательную корректировку, когда это фактически вмещает текст в прямоугольник. Эта корректировка является мелкой суммой, фиксированной NSTextContainer
объект, названный дополнением фрагмента строки, определяющим часть на каждом конце прямоугольника фрагмента строки, оставил незаполненный. Текст вставляется в прямоугольнике фрагмента строки этой суммой (сам прямоугольник незатронут). Дополнение допускает небольшую корректировку текстовой области контейнера в краях и вокруг любых дыр и сохраняет текст от непосредственно примыкающего любой другой графикой выведенный на экран около области. Можно изменить дополнение от его значения по умолчанию с setLineFragmentPadding:
метод. Обратите внимание на то, что дополнение фрагмента строки не является подходящими средними значениями для выражения полей; необходимо установить NSTextView
позиция объекта и размер для полей документа или атрибуты поля абзаца для полей текста.
В дополнение к самому прямоугольнику фрагмента строки возвращается наборное устройство, прямоугольник вызвал используемый прямоугольник. Это - часть прямоугольника фрагмента строки, фактически содержащего глифы или другие метки, которые будут нарисованы. Условно, оба прямоугольника включают дополнение фрагмента строки и пространство шпона, вычисленное от метрик высоты строки шрифта и параметров межстрочного интервала абзаца. Однако расстояние между абзацами (перед и после) и любое пространство, добавленное вокруг текста, такого как вызванный расположенным с интервалами центром текстом, включено только в прямоугольнике фрагмента строки а не в используемом прямоугольнике.
Посмотрите Геометрию макета: Класс NSTextContainer для получения дополнительной информации о текстовых контейнерах. Посмотрите менеджера по Расположению для получения дополнительной информации о процессе создания макета.