Board.KolibriOS.org

Official KolibriOS board
It is currently Wed Dec 11, 2019 12:28 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 118 posts ]  Go to page Previous 1 2 3 4 58 Next
Author Message
PostPosted: Fri Oct 31, 2008 6:46 pm 
Offline

Joined: Wed Jun 04, 2008 10:16 pm
Posts: 174
Будет ли общесистемная настройка размера шрифтов? Если пользователь хочет сделать шрифты крупнее, ему удобнее настроить размер шрифтов один раз, а не в каждом приложении отдельно.


Top
   
PostPosted: Fri Oct 31, 2008 9:13 pm 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
Имхо хорошо иметь 1 конфигурационный файл, в котором это будет прописано. Вообще тема дискусий. Но пока каждая программа сама будет выбирать тип шрифта который она захочет выводить.


Top
   
PostPosted: Fri Oct 31, 2008 9:27 pm 
Offline
User avatar

Joined: Thu Mar 29, 2007 3:02 am
Posts: 249
<Lrz>
Супер!... это сильно поменяет мой проект, и это замечательно!... :D :D :D

_________________
*****:
;дух машины, мой бубен сильнее твоей тупости

*****:


Top
   
PostPosted: Fri Oct 31, 2008 11:53 pm 
Offline
User avatar

Joined: Thu Mar 01, 2007 4:16 pm
Posts: 426
> как ты знаешь на больших объемах это тормоза
Знаю. Потому пусть такой вывод остается опциональным, о чем я и говорил. Или вывод прозрачных символов можно сделать только на bitmap.

> тебе потребуется 200х128=25600
Количество вызовов функций для формирования всех глифов будет составлять 8*16*256=32768, много кто бы спорил. Но это единовременная операция, в дальнейшем будут использоваться эти кешированные глифы, о чем я и говорил. Ты ведь, перед выводом текста, будешь формировать с кешированием необходимые изображения символов в соответствии со шрифтом и цветом, а в дальнейшем будешь использовать это изображение для вывода? Или ты будешь формировать такое изображение налету?

> Далее при формировании градиента возможны тормоза при выводе, или увеличению использования ОЗУ
То же что и выше. Ну и вопрос тот же. Если глифы полностью заранее подготовленны, то всё равно как это сделано, вывод в любом случае займет одно и то же время.

p.s. Вызов callback для цвета точки глифа каждый раз при выводе, это не самая лучшая моя идея, такой вариант врядли стоит предусматривать, а вот для формирования глифа, вроде альтернативы константному цвету, почему бы и нет, тогда и градиент с тебя снимается. Как я и говорил ранее.

..bw


Top
   
PostPosted: Sat Nov 01, 2008 4:03 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Quote:
Конечно может Serge или кто -то еще и прикрутит шрифты от иксов, но я думаю без аппаратной акселерации это будет медленно.

Не будет. Сейчас все всё рисуют программно. В ХАА ещё есть аппаратный вывод линий и глифов, в новом ЕХА оставили только блитер.
Прицип такой же. Программа рисует всё в битмап а потом акселератор выводит битмап на экран. Это позволяет и шрифты сглаживать и градиент делать. Кстати в pixlib уже есть почти всё для этого необходимое. И прозрачность и альфа.

P.S. В никсах все работают с freetype. Как насчёт неё ?


Top
   
PostPosted: Sat Nov 01, 2008 5:36 am 
Offline
User avatar

Joined: Thu Mar 01, 2007 4:16 pm
Posts: 426
> В никсах все работают с freetype. Как насчёт неё ?
Пойдет. Когда займешься :-)?

..bw


Last edited by bw on Sat Nov 01, 2008 8:59 am, edited 1 time in total.

Top
   
PostPosted: Sat Nov 01, 2008 8:03 am 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
bw
Объясню работу 65 функции для вывода изображения. В памяти при загрузке либы будет размещены глифы изображения в виде массива в формате raw. При выводе изображения т.е. при вызове 65 функции ты указываешь цвет слоев. т.е. на примере простого:
Загрузил ты монохромный шрифт каждая точка кодируется битом т.е. 8х16х256=32768 бит или 4096 байт. Так вот при выводе можно указывать цвет в формате RGB для каждого слоя т.е. фон и цвет символа могут быть любыми в формате RGB. В описании функции 65 можно работать минимально с 8 битным изображением. Вообще в документации оч хорошо сказано

Code:
Функция 65 - вывести изображение с палитрой в окно.
Параметры:
eax = 65 - номер функции
ebx = указатель на изображение
ecx = [размер по оси x]*65536 + [размер по оси y]
edx = [координата по оси x]*65536 + [координата по оси y]
esi = число бит на пиксель, должно быть 8, 24 или 32
edi = указатель на палитру (256 цветов 0x00RRGGBB); игнорируется при esi = 24 и 32
ebp = смещение данных каждой следующей строки изображения относительно предыдущей
Замечания:
Координаты изображения - это координаты верхнего левого угла изображения относительно окна.
Размер изображения в байтах есть xsize*ysize.
Каждый байт изображения рассматривается как индекс в палитре.
Если изображение использует не все 256 цветов, а меньше, размер палитры может быть меньше 256.

Т.е. сам пользователь может выбрать цвет глифа и фона по своему усмотрению.

На счет формирования изображения. Изображение будет формироваться в памяти, т.е. выделится буфер, и в него будут копироваться глифы, и все операции по наложению и т.д. будут происходить только с этим буфером. Затем, готовое изображение будет выведено на канву.

Serge
Quote:
P.S. В никсах все работают с freetype. Как насчёт неё ?

Итак рассмотрим модульный принцип построения работы со шрифтами.
В любом случае freetype шрифты нужно будет преобразовывать в raw массив для вывода изображения (если будет испльзована 65 функция для вывода) Думаю то же справедливо и для pixlib. Однако, нужно описание API что бы говорить более конкретно.
Т.е. общее у разных шрифтов, это формирование raw массива для вывода. Если использовать один и тот же формат буфера для вывода изображения, то можно использовать в системе различные типы шрифтов.
У меня есть примеры на С для работы с freetype, но пока нету времени что бы их начать разбирать...


Top
   
PostPosted: Sat Nov 01, 2008 9:14 am 
Offline
User avatar

Joined: Thu Mar 01, 2007 4:16 pm
Posts: 426
Непонятно, к чему этот ликбез по 65'ой функции. Я знаю о её существовании и о том какие параметры она принимает. Возможно ты так, по своему, хотел сказать, что глифы у тебя будут 8'ми битные, а при выводе будет использоваться 65'ая с палитрой из двух индексов. Из того что ты сказал выше (про 65'ую) я никак не могу связать с "Т.е. сам пользователь может выбрать цвет глифа и фона по своему усмотрению.".

p.s. Ладно, это всё демагогия. Уверен, что и без моих советов справишься.

..bw


Top
   
PostPosted: Sat Nov 01, 2008 9:38 am 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
bw
Если ты знаешь о существовании 65 функции, и как она работает, то при использовании 8 битных глифов и палитры из 2-х цветов в формате RGB можно добиться вывода глифа(ов) в любой цветопередаче. Если говорить о 24 и 32 битных составляющих на пиксель, то в этих режимах можно выводить и градиент и вообще использовать любую маску.
В большинстве случаев требуется использование только вывод глифов с указанием цвета фона и самого символа. Так вот, в 8 битных глифах, достаточно изменить палитру для формирования нужного цвета глифа, а эти параметры можно передавать при вызове функции, которая выводит глиф(ы) или формирует изображение в массиве озу.


Top
   
PostPosted: Thu Nov 06, 2008 1:35 pm 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
Во вложении пример, скрин которого был выше. Можно потестировать скорость вывода глифов. В примере сделано не оптимально, в дальнейшем скорость будет увеличена, как в принципе будет и библиотека, над которой я тружусь. Для тестирования нужна библиотека box_lib.obj в /sys/lib, версия ядра начиная с SVN 912.


Attachments:
File comment: Пример, который можно проверить на скорость вывода. Нужна box_lib.obj в /sys/lib
font_ex.7z [2.28 KiB]
Downloaded 123 times
Top
   
PostPosted: Thu Nov 06, 2008 1:41 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5067
Выглядит отлично :)

_________________
Через тернии к звездам


Top
   
PostPosted: Fri Nov 07, 2008 10:39 am 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
Предлагаю обсудить API библиотеки масштабируемых шрифтов:

Пока я сделал следующее:
функция initialization_font инициализация, функция типа viod.
Получает список файлов в папке /sys/FONTS.
Если функция выполнилась не успешно возвращает в eax =-1

функция get_font - получить т.е. загрузить нужный шрифт
входные параметры: в стек запихиваем dword ширина shl 16 + высота (ширина*65536 + высота)
По этому параметру происходит поиск подходящего шрифта и если нашли - загружаем его. если ничего не нашли возвращаем в eax=-1

функция free_folder_info осободить память занимаемую при вызове initialization_font
эта функция осовбождает всю память где храниться информация о файлах из папки /sys/FONTS.

функция free_font - тип void, освобождает память занимаемую загруженым шрифтом

Предложения по другим функциям в формате который я описал выше.


Last edited by <Lrz> on Fri Nov 07, 2008 11:09 am, edited 1 time in total.

Top
   
PostPosted: Fri Nov 07, 2008 10:58 am 
Offline
User avatar

Joined: Thu Mar 01, 2007 4:16 pm
Posts: 426
Я считаю логичнее загружать шрифт по его имени (либо по имени файла).
А после загрузки, перед выводом, указывать какой кегль (размер в пикселях) должен использоваться. Если не удается установить размер (а на первых парах так и будет, как я пологаю), то используется ближайший возможный, либо единственный возможный.
Code:
f = font_load(name)
font_set_size(f, size)
font_get_size(f)
font_close(f)

В таком духе. А еще можно слизать один из множества существующих API.

..bw


Top
   
PostPosted: Fri Nov 07, 2008 11:06 am 
Offline
User avatar

Joined: Fri Jan 27, 2006 3:06 pm
Posts: 1071
<Lrz> wrote:
функция free_fulder_info осободить память занимаемую при вызове initialization_font
эта функция осовбождает всю память где храниться информация о файлах из папки /sys/FONTS.

А что такое fulder? Может folder? Или я ламер и что-то не так понял? :)


Top
   
PostPosted: Fri Nov 07, 2008 11:28 am 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
bw
Сейчас заголовок шрифта имеет вид

name_head db 'fnt1' - это тип шрифта
font_size dd 8 shl 16 +16 ;font_width shl +font_height
font_start dd font - смещение до реальных данных т.е. до raw картинки с цветопередачей 1 bpp.
font_name db 'font raw format 8x16',0 - имя шрифта в формате ASCIIZ
align 16
font:
file 'font_8x16.fon' - raw картинка с цветопередачей 1 bpp.


Т.к. сейчас шрифты не имеют возможности масштабироваться, то можем иметь картину с одинаковым именем. Лучше если будет возможность указывать как в формате размер, имя, или размер + имя. для получения нужного шрифта. Сейчас при инициализации шрифта идет проверка на тип файла т.е. проверяется наличие у файла расширения типа .fnt, далее проверяется его заголовок на тип 'fnt1' если он совпадает с этими требованиями, то функция get_font уже может работать с этим файлом.
По дефолту получить тип шрифта то же можно, но где-то должна храниться информация о настройках - есть предложения?

Quote:
А после загрузки, перед выводом, указывать какой кегль (размер в пикселях) должен использоваться. Если не удается установить размер (а на первых парах так и будет, как я пологаю), то используется ближайший возможный, либо единственный возможный.


Можно, если функция get_font не нашла указываемый шрифт, будет загружен ближайший и вернется в программу информация о кегле.

P/S Можно ссылку на описание API как это сделано в других системах ?

Heavyiron
поправил.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 118 posts ]  Go to page Previous 1 2 3 4 58 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited