Большие засечки в шрифте приводят к тому, что flash неправильно измеряет размер - PullRequest
1 голос
/ 02 ноября 2009

У меня есть текстовое поле, где я измеряю textWidth и textHeight, чтобы убедиться, что пользователь не может ввести больше текста, чем может поместиться в текстовой области. Я также расширил textArea с помощью textHeightNow и textWidthNow, которые измеряют размеры textField, поскольку они обновляются без проверки, требующей проверки. Теперь это прекрасно работает для 90% встроенных шрифтов, которые я использую, но любые шрифты с гигантскими засечками не измеряются должным образом, например, посмотрите на 'f' в этой текстовой области:

альтернативный текст http://img.skitch.com/20091101-xhm5jguma1qgukg6fxrymrwr3u.jpg

Вы можете видеть, что они обрезаются с обеих сторон, потому что textWidth и textWidthNow оба возвращают неправильный размер, не принимая во внимание массивные засечки. Размер шрифта, координаты и размеры текстовой области являются целыми числами, так что это не проблема, какие-либо другие предложения? Я посмотрел, есть ли у textArea аргумент clipContent, но его нет (это было бы неплохо).

Спасибо

1 Ответ

2 голосов
/ 02 ноября 2009

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

  • Используйте новый flash.text.engine в Flash Player 10 ... его очень сложно использовать, но Я думаю, что он будет измерять такие шрифты (и лигатуры) правильно.
  • Нарисуйте текстовое поле в растровые данные и использовать getColorBoundsRect для определить его реальные размеры.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...