Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.08.2010, 21:28
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 1  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
По умолчанию кривое отображение курсива в TextField c autoSize

вот такой случай:
Код AS3:
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 и без всяких там левых(лишних) пробелов
кто знает как обойти ?

Старый 15.08.2010, 22:04
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 2  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
правая кромка обрезается не по реальным очертаниям, а не понятно как
По реальным, просто не учитывается верхний скос.

Есть предложение создать ф-ю типа updateSize() и в ней по шагам делать следующее:

1 включить автосайз
2 запомнить ширину текстового поля
3 вычислить сдвиг по Х вправо от скоса курсивом
4 отключить автосайз
5 задать жестко ширину поля как "пункт 2" + "пункт 3"

Вот как то так. Правда придется обновлять каждый раз при изменении текста

Старый 15.08.2010, 22:14
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 3  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
а предусмотрительный отступ справа не проще?
__________________
Поймай яблоко 2!

Старый 15.08.2010, 22:18
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 4  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
ну да, примерно такие танцы с бубном и есть..
только мне двигать ширину совсем не с руки ( текст многострочный и нужен для отрисовки в битмап - ломается все, когда снимаешь автосайз и меняешь ширину ), выкручиваюсь отрисовкой 'большого' текстФилда без автосайза в битмап и перерисвкой его непрозрачной области в нужный мне битмап.

но косяк с текстфилдом вопиющий же, вот и подумал, может кто знает обход

Старый 15.08.2010, 22:33
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 5  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Попробуй еще вот так:
Код AS3:
var fmt:TextFormat = new TextFormat("Courier New", 80, 0x0, false, true);
fmt.rightMargin = 0.2 * Number(fmt.size);
Потестил с разными шрифтами - все ОК. Правда 0.2 подобрал.

Цитата:
а предусмотрительный отступ справа не проще?
проще)

Старый 15.08.2010, 22:55
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
упс, спасибо!

Добавлено через 18 минут
упс еще раз: такой прикол еще
Код AS3:
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));
может и этот косяк можно обойти ?
изрядно портится настроение когда натыкаешься на такое, не очевидное, враждебное нам (не побоюсь этого слова Ж)

Старый 16.08.2010, 00:36
veisss вне форума Посмотреть профиль Отправить личное сообщение для veisss Найти все сообщения от veisss
  № 7  
Ответить с цитированием
veisss
[+1 16.08.10]

Регистрация: Jun 2009
Сообщений: 93
я тоже вот поекспериментировал с фонтами и прорисовкой их битмап
флеш вообще както нехорошо работает с фонтами если они не встроинные

например
Код AS3:
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);

Код AS3:
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));
а на щет Tahoma то в нем нету италик

Старый 16.08.2010, 00:50
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 8  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
ага, спасибо за ссылку
выходит, что погано в этой ситуации себя ведут шрифты у которых нет 'родного' курсива,
Arial, например, нормально все кажет..

к слову, насчет
Код AS3:
tf.rotation=10; // ета строчка все попортит
если бы TF нормально отрисовывался в битмап, то
такой вариант все решал бы даже с поворотом
Код AS3:
tf.filters = [new BlurFilter(0, 0)];			
tf.rotation=10;
в принципе такой вариант для не встроенных шрифтов позволяет и поворот и альфу..
но с курсивом облом


Последний раз редактировалось silin; 16.08.2010 в 00:55.
Старый 16.08.2010, 00:51
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 9  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Название: fonts.gif
Просмотров: 373

Размер: 5.4 Кб
Ну да, у тахомы нет италика, он формируется искусственно, а поскольку автосайз срабатывает по метрикам глифа, то линии ширины остается там же, где она была и для обычного начератиня.
К примеру я выбрал тахому и вердану в блокноте. Видите где находится курсор для букв T? Это и есть линия ширины глифа, по которой срабатывает автосайз. В самом нижу скрин из фонлаба для T шрифта Verdana Italic. Так что и для него автосайз срежет часть символа.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 16.08.2010, 01:11
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 10  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
у меня кстати и без автосайза италик срезает.
Вот в коде, что привел silin, если внести изменения
Код AS3:
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, время: 15:25.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 15:25.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.