Page 1 of 5

SysFn 4

Posted: Tue Mar 12, 2013 9:57 pm
by SoUrcerer
Данная функция вполне может возвращать длину строки. Это важно для не-моноширинных шрифтов.
У этой функции ecx=0xXYRRGGBB, где сейчас Y всегда должен быть равен 0.
Я предлагаю использовать значение Y=1 для подфункции Fn4, возвращающей размер выводимой надписи. К сожалению, возвращать размеры всегда нельзя - это поломает большинство программ, имеющихся на сегодняшний день.

Re: SysFn 4

Posted: Tue Mar 12, 2013 10:01 pm
by Leency
Идею всецело поддерживаю.

Re: SysFn 4

Posted: Tue Mar 12, 2013 10:14 pm
by yogev_ezra
Как сказал в чате:
Зачем функция, рисующая текст, должна возвращать его длину? Размер у надписи будет, даже если её не выводить.
ИМХО размер и вывод на экран - вещи не связанные. Что, у нас номера функций закончились?

Re: SysFn 4

Posted: Tue Mar 12, 2013 10:18 pm
by SoUrcerer
Функции имеют/будут иметь общий код. 4я и 74я функции - это будет очень и очень логично.

Re: SysFn 4

Posted: Tue Mar 12, 2013 10:21 pm
by Mario_r4
Мне тоже непонятно зачем? Хотелось бы более подробного изложения всей идеи.

Re: SysFn 4

Posted: Tue Mar 12, 2013 10:23 pm
by Mario_r4
SoUrcerer wrote:74я функции
Занято сетевым бранчем:

Code: Select all

      dd blit_32                 ; 73-blitter;
      dd undefined_syscall       ; 74-reserved for new stack
      dd undefined_syscall       ; 75-reserved for new stack
      dd undefined_syscall       ; 76-reserved for new stack

Re: SysFn 4

Posted: Tue Mar 12, 2013 10:25 pm
by SoUrcerer
Сейчас везде моноширинный шрифт, потому что его размеры "известны" программисту. Это плохо, потому что дает ужасный результат с вашими любимыми большими и красивыми шрифтами.

Re: SysFn 4

Posted: Tue Mar 12, 2013 10:26 pm
by Mario_r4
SoUrcerer wrote:Это плохо, потому что дает ужасный результат с вашими любимыми большими и красивыми шрифтами.
Я все равно не понимаю. Честно. Ты половину как минимум не договариваешь вслух.

Re: SysFn 4

Posted: Tue Mar 12, 2013 10:31 pm
by SoUrcerer
Перевожу с русского на русский. Большинство программ работает сейчас так:
У нас размер буквы 5x9 точек, с интервалом 1 точку между буквами. У нас надпись в 5 букв, так что сделаем кнопку в 5*(5+1)+2 = 32 пикселя шириной и 9+2=11 пикселей высотой.
Так вот это нихера не работает, когда размер шрифта НЕ 5x9, не говоря уже о том, что шрифт может быть НЕ моноширинным. Нужно знать точный размер надписи. Без этого ВООБЩЕ никакого смысла нет работать над шрифтами в системе.

Re: SysFn 4

Posted: Tue Mar 12, 2013 10:36 pm
by Leency
Зачем знать длинну выводимой строки?
Eolite (имена файлов), HTMLv (страница), Liza (текст письма) для отображения текста использует моноширный шрифт, т.к. я знаю сколько максимально символов поместится в окно. С немоноширным я этого не могу знать. Хотя немоноширный по размеру больше и легче для чтения.

Re: SysFn 4

Posted: Tue Mar 12, 2013 10:41 pm
by Mario_r4
SoUrcerer wrote:Перевожу с русского на русский. Большинство программ работает сейчас так:
У нас размер буквы 5x9 точек, с интервалом 1 точку между буквами. У нас надпись в 5 букв, так что сделаем кнопку в 5*(5+1)+2 = 32 пикселя шириной и 9+2=11 пикселей высотой.
Так вот это нихера не работает, когда размер шрифта НЕ 5x9, не говоря уже о том, что шрифт может быть НЕ моноширинным. Нужно знать точный размер надписи. Без этого ВООБЩЕ никакого смысла нет работать над шрифтами в системе.
Так ты вообще-то говоришь о принципиально разных вещах. Ф.4 ориентирована на 2 существующих системных шрифта и все. Если уж на то пошло зачем вообще внедрять новые шрифты в ядро? Алексей Теплов замечательно продемонстрировал какой можно применить подход. Напоминаю, что Box_Lib тоже был изначально написан как демонстрация того что можно сделать по простому и это будет работать - что собственно и наблюдаем.

Зачем все пихать в ядро? Да, даже если и пихать, то делать нужно полностью в другую функцию. Не надо оглядываться на существующую ф.4. В любом случае придется переделывать весь код программ использующих новые шрифты.

Re: SysFn 4

Posted: Tue Mar 12, 2013 10:48 pm
by SoUrcerer
Заманчивость модификации функции 4 в том, что она используется везде. Я ради интереса модифицировал её для загрузки шрифтов 12x8 - хотя можно использовать и шрифты шириной до 16 пикселей по умолчанию.
Image
А ведь растровые шрифты чуть побольше по умолчанию, минимальные правки в софте - и счастье и радость на долгие годы. Даже в Windows по-прежнему растровые шрифты используются.
(На картинке - пример, как прекрасно могут читаться растровые шрифты высотой в 12/16 пикселей).

Векторные шрифты в наше время использовать можно только в одном случае - затирая фон (спасибо, оконная подсистема!). Если считывать область экрана, затем рисовать поверх, и записывать - получаются дикие тормоза. Если НЕ считывать эту область экрана, а рисовать без анти-алиасинга - мало того, что буквы выглядят так, будто их жевал лабрадор Кони; так еще придется вызывать стопятьсот раз функцию 1. Нет, реально, для небольшого окна с текстом придется раз 100500 или больше сделать int 0x40 только для вывода текста.

Re: SysFn 4

Posted: Tue Mar 12, 2013 10:50 pm
by Leency
Вопрос разделился на два.

1. По поводу функции: получение размера надписи в любом случае нужно реализовать - это даст возможность сделать часть программ более читабельными за счёт немоноширных шрифтов.

2. Добавление новых шрифтов в ядро: спорный вопрос. С одной стороны - это возможность уже сейчас сделать программы Колибри более читабельными, с другой некрасивая реализация. Тут я за добавление, хотя и не буду особо настаивать. Хотя бы получение размера запилить.

Re: SysFn 4

Posted: Tue Mar 12, 2013 10:54 pm
by Mario_r4
SoUrcerer
Я уже рассматривал эту идею и даже высказывался на форуме в одной из тем, но реакция была нулевая.

Суть такова:
Можно использовать дополнительную функцию для установки третьего шрифта, который будет динамически меняться по желанию программы и будет действовать в пределах этого адресного пространства исключительно. В ф.4 мы выбираем третий шрифт, но код в программа сам должен учитывать особенности шрифта. Можно грабить корованы

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

Re: SysFn 4

Posted: Tue Mar 12, 2013 10:58 pm
by SoUrcerer
SysFn4, что самое паршивое, считает размеры этой самой выводимой строки. Это обидно. Считать-считает, а вывести некуда. Или затирать данные.