|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
кривое отображение курсива в TextField c autoSize
вот такой случай:
var tf:TextField = new TextField(); var fmt:TextFormat = new TextFormat("Tahoma", 24, 0x0, false, true); tf.autoSize = TextFieldAutoSize.LEFT; tf.text = "TEST"; tf.setTextFormat(fmt); addChild(tf); в текстФилде заведомо больших размеров все нормально, но нужно именно с autoSize и без всяких там левых(лишних) пробелов кто знает как обойти ? |
|
|||||
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Цитата:
Есть предложение создать ф-ю типа updateSize() и в ней по шагам делать следующее: 1 включить автосайз 2 запомнить ширину текстового поля 3 вычислить сдвиг по Х вправо от скоса курсивом 4 отключить автосайз 5 задать жестко ширину поля как "пункт 2" + "пункт 3" Вот как то так. Правда придется обновлять каждый раз при изменении текста |
|
|||||
Lorem ipsum
|
а предусмотрительный отступ справа не проще?
__________________
Поймай яблоко 2! |
|
|||||
ну да, примерно такие танцы с бубном и есть..
только мне двигать ширину совсем не с руки ( текст многострочный и нужен для отрисовки в битмап - ломается все, когда снимаешь автосайз и меняешь ширину ), выкручиваюсь отрисовкой 'большого' текстФилда без автосайза в битмап и перерисвкой его непрозрачной области в нужный мне битмап. но косяк с текстфилдом вопиющий же, вот и подумал, может кто знает обход |
|
|||||
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Попробуй еще вот так:
var fmt:TextFormat = new TextFormat("Courier New", 80, 0x0, false, true); fmt.rightMargin = 0.2 * Number(fmt.size); Цитата:
|
|
|||||
упс, спасибо!
Добавлено через 18 минут упс еще раз: такой прикол еще var tf:TextField = new TextField(); var fmt:TextFormat = new TextFormat("Tahoma", 24, 0x0, false, true); fmt.rightMargin = 0.2 * Number(fmt.size);//0.2 не причем tf.autoSize = TextFieldAutoSize.LEFT; tf.text = "TEST"; tf.setTextFormat(fmt); tf.y = 50; addChild(tf);//ОК //однако в битмап рисует без полей (иногда убивает просто логика этих вещей) var bmd:BitmapData = new BitmapData(tf.width, tf.height, true, 0x0); bmd.draw(tf); addChild(new Bitmap(bmd)); изрядно портится настроение когда натыкаешься на такое, не очевидное, враждебное нам (не побоюсь этого слова Ж) |
|
|||||
[+1 16.08.10]
Регистрация: Jun 2009
Сообщений: 93
|
я тоже вот поекспериментировал с фонтами и прорисовкой их битмап
флеш вообще както нехорошо работает с фонтами если они не встроинные например var tf:TextField = new TextField(); var fmt:TextFormat = new TextFormat("Tahoma", 24, 0x0, false, true); tf.autoSize = TextFieldAutoSize.LEFT; tf.text = "TEST"; tf.rotation=10; // ета строчка все попортит tf.setTextFormat(fmt); addChild(tf); var tf:TextField = new TextField(); var fmt:TextFormat = new TextFormat("Times New Roman", 24, 0x0, false, true); tf.autoSize = TextFieldAutoSize.LEFT; tf.text = "TEST"; //если раскоментировать нижнюю строчку то правильно прорисуется(не забудте встроить шрифт) //tf.embedFonts=true; tf.setTextFormat(fmt); tf.y = 50; addChild(tf);//ОК var bmd:BitmapData = new BitmapData(tf.width, tf.height, true, 0x0); bmd.draw(tf); addChild(new Bitmap(bmd)); |
|
|||||
ага, спасибо за ссылку
выходит, что погано в этой ситуации себя ведут шрифты у которых нет 'родного' курсива, Arial, например, нормально все кажет.. к слову, насчет если бы TF нормально отрисовывался в битмап, то такой вариант все решал бы даже с поворотом в принципе такой вариант для не встроенных шрифтов позволяет и поворот и альфу.. но с курсивом облом Последний раз редактировалось silin; 16.08.2010 в 00:55. |
|
|||||
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
|
Ну да, у тахомы нет италика, он формируется искусственно, а поскольку автосайз срабатывает по метрикам глифа, то линии ширины остается там же, где она была и для обычного начератиня. К примеру я выбрал тахому и вердану в блокноте. Видите где находится курсор для букв T? Это и есть линия ширины глифа, по которой срабатывает автосайз. В самом нижу скрин из фонлаба для T шрифта Verdana Italic. Так что и для него автосайз срежет часть символа. |
|
|||||
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
у меня кстати и без автосайза италик срезает.
Вот в коде, что привел silin, если внести изменения var tf:TextField = new TextField(); var fmt:TextFormat = new TextFormat("Tahoma", 32, 0x0, false, true); //fmt.rightMargin = 0.2 * Number(fmt.size);//0.2 не причем tf.autoSize = TextFieldAutoSize.NONE; tf.text = "TEST"; tf.setTextFormat(fmt); tf.border = true; tf.width = 250; tf.height= 40; tf.y = 50; addChild(tf);//ОК //однако в битмап рисует без полей (иногда убивает просто логика этих вещей) var bmd:BitmapData = new BitmapData(tf.width+1, tf.height+1, true, 0x0); bmd.draw(tf); addChild(new Bitmap(bmd)); Цитата:
Последний раз редактировалось i.o.; 16.08.2010 в 01:18. |
Часовой пояс GMT +4, время: 16:36. |
|
« Предыдущая тема | Следующая тема » |
|
|