Генерация фрагмента строки

NSTypesetter объект кладет текст в NSTextContainer объект в строках глифов. Расположение этих строк в NSTextContainer объект определяется его формой. Например, если текстовый контейнер является более узким в некоторых частях, чем в других, строки в тех частях должны быть сокращены; если существуют дыры в области, некоторые строки должны быть фрагментированы; если бы существует разрыв через весь регион, строки, которые наложились бы, это должно быть смещено для компенсации.

Встроенные наборные устройства, в настоящее время предоставляемые текстовую систему, поддерживают только расположение горизонтального текста. Однако текстовая система может поддерживать наборные устройства, размечающие текст вдоль строк, работающих или горизонтально или вертикально, и в любом направлении. Этот тип перемещения вызывают направлением развертки и выражают NSLineSweepDirection введите в Objective C и константах направления развертки в Java. Направление, в котором тогда развиваются строки, вызывают направлением перемещения строки и выражают NSLineMovementDirection введите в Objective C и константах перемещения строки в Java. Каждый влияет на корректировку прямоугольника фрагмента строки по-другому: прямоугольник может быть перемещен или сокращен вдоль направления развертки и смещен (но не изменен) в направлении перемещения строки.

Объект наборного устройства предлагает прямоугольник для данной строки, и затем спрашивает NSTextContainer объект скорректировать прямоугольник для адаптации. Предложенный прямоугольник обычно охватывает текстовый ограничительный прямоугольник контейнера, но это может быть более узким или более широким, и это может также лечь частично или полностью вне ограничительного прямоугольника. Сообщение, что наборное устройство отправляет текстовый контейнер для корректировки предложенного прямоугольника, lineFragmentRectForProposedRect:sweepDirection:movementDirection:remainingRect:, который возвращает самый большой прямоугольник, доступный для предложенного прямоугольника, на основе направления, в котором размечается текст. Это также возвращает прямоугольник, содержащий любое остающееся пространство, такое как оставленный с другой стороны дыры или разрыва в текстовом контейнере. Этот процесс проиллюстрирован на рисунке 1.

  Фрагмент Строки рисунка 1, помещающийся в неправильные текстовые контейнеры
Line fragment fitting in irregular text containers

Для этих трех примеров на рисунке 1 направление развертки NSLineSweepRight и направление перемещения строки NSLineMovesDown. В первом примере предложенный прямоугольник охватывает ограничительный прямоугольник области и сокращен текстовым контейнером для адаптации в форме песочных часов без остатка.

Во втором примере предложенный прямоугольник пересекает дыру, таким образом, текстовый контейнер должен возвратить более короткий прямоугольник (белый прямоугольник слева) вместе с остатком (белый прямоугольник справа). Следующий прямоугольник, предложенный наборным устройством, тогда будет этим прямоугольником остатка, который будет возвращен неизменный текстовым контейнером.

В третьем примере разрыв пересекает весь текстовый контейнер. Здесь текстовый контейнер смещает предложенный прямоугольник вниз, пока это не находится полностью в области контейнера. Если направление перемещения строки здесь было NSLineDoesntMove, текстовый контейнер должен был бы возвратиться NSRect.ZeroRect указание, что просто не соответствует строка. В таком случае это до наборного устройства, чтобы предложить различный прямоугольник или идти дальше к различному контейнеру. Когда текстовый контейнер смещает прямоугольник фрагмента строки, менеджер по расположению принимает это во внимание для последующих строк.

Наборное устройство вносит одну окончательную корректировку, когда это фактически вмещает текст в прямоугольник. Эта корректировка является мелкой суммой, фиксированной NSTextContainer объект, названный дополнением фрагмента строки, определяющим часть на каждом конце прямоугольника фрагмента строки, оставил незаполненный. Текст вставляется в прямоугольнике фрагмента строки этой суммой (сам прямоугольник незатронут). Дополнение допускает небольшую корректировку текстовой области контейнера в краях и вокруг любых дыр и сохраняет текст от непосредственно примыкающего любой другой графикой выведенный на экран около области. Можно изменить дополнение от его значения по умолчанию с setLineFragmentPadding: метод. Обратите внимание на то, что дополнение фрагмента строки не является подходящими средними значениями для выражения полей; необходимо установить NSTextView позиция объекта и размер для полей документа или атрибуты поля абзаца для полей текста.

В дополнение к самому прямоугольнику фрагмента строки возвращается наборное устройство, прямоугольник вызвал используемый прямоугольник. Это - часть прямоугольника фрагмента строки, фактически содержащего глифы или другие метки, которые будут нарисованы. Условно, оба прямоугольника включают дополнение фрагмента строки и пространство шпона, вычисленное от метрик высоты строки шрифта и параметров межстрочного интервала абзаца. Однако расстояние между абзацами (перед и после) и любое пространство, добавленное вокруг текста, такого как вызванный расположенным с интервалами центром текстом, включено только в прямоугольнике фрагмента строки а не в используемом прямоугольнике.

Посмотрите Геометрию макета: Класс NSTextContainer для получения дополнительной информации о текстовых контейнерах. Посмотрите менеджера по Расположению для получения дополнительной информации о процессе создания макета.