Board.KolibriOS.org http://board.kolibrios.org/ |
|
SysFn 4 http://board.kolibrios.org/viewtopic.php?f=36&t=2252 |
Page 3 of 5 |
Author: | Serge [ Tue Mar 12, 2013 11:35 pm ] |
Post subject: | Re: SysFn 4 |
SoUrcerer Может сразу над новым АПИ подумать для новых шрифтов. Например надо, чтобы функция вписывала текст в ограничивающий прямоугольник, отсекая лишнее. |
Author: | SoUrcerer [ Tue Mar 12, 2013 11:42 pm ] |
Post subject: | Re: SysFn 4 |
Устное предупреждение всем участникам оффтопа. Раз... Serge, я думаю над более интересными вещами. Займусь начальными исследованиями этой важной для меня области. |
Author: | Akyltist [ Tue Mar 12, 2013 11:49 pm ] |
Post subject: | Re: SysFn 4 |
SoUrcerer wrote: В трех битах нельзя вернуть данные. В трех битах можно определить новую подфункцию, но это будет нелогично. В общем, нафиг всё, даешь библиотеку. Допустим вариант: при ebx = 1 , в eax возвращать ширину строки Это ни как не сломает все работающие программы, так как ebx = [координата по оси x]*65536 + [координата по оси y], что при любом раскладе > 1, собственно добавить в 4 функцию Quote: cmp ebx,1 ... je.... ... mov eax,... то что тут затрётся eax, как понимаете, ничего страшного! Так как условие ebx=1 ранее не существовало, и во всех остальных программах, не использовавших это - eax затираться не будет! PS: стандарты нарушать не хорошо (согласен с Маратом), как и плодить костыли, но ведь подобное расширение функции допустимо! Это ни чем не хуже этого: Quote: A=0 - выводить esi символов, A=1 - выводить ASCIIZ-строку esi = для A=0 длина строки, должна быть не больше 255; для A=1 игнорируется просто еще одно условие, при чём не ресурсоёмкое и много мусора не внесёт (ничего лишнего в ядре не должно быть!) Вообще да, нужна библиотека ответственная за работу со шрифтами и вывод текста во всех извращённых формах, с функциями возвращения размеров каждого символа какого нужно, вывода подчёркнутого наклонного зачёркнутого текста, с функцией вывода текста с установленным шагом и прочче, в общем библиотека!). PPS: у линукса хороший слоган есть. Есть программа, она должна выполнять только свои функции, ничего левого, но должна это делать по максимуму. |
Author: | SoUrcerer [ Tue Mar 12, 2013 11:59 pm ] |
Post subject: | Re: SysFn 4 |
4я функция умеет рисовать в относительных координатах. Я частенько рисую в 0,0. Не исключено, что кто-то может нарисовать что-то в 0,1. Это плохое ограничение. |
Author: | Akyltist [ Wed Mar 13, 2013 12:04 am ] |
Post subject: | Re: SysFn 4 |
SoUrcerer wrote: 4я функция умеет рисовать в относительных координатах. Я частенько рисую в 0,0. Не исключено, что кто-то может нарисовать что-то в 0,1. Это плохое ограничение. Ok, при ebx = 0xFFFF ? (X=0, Y=65535) врятли такое возможно, а если кто то и рисует в таких суперширокоформатных масштабах) на экране всё равно ничего не изменится! PS: ebx =0xFFFFFFFF ? О_о Ну на крайний случай: (хотя вариант выше мне кажется безопаснее) Quote: X=ABnn (биты): У нас получается что на самом деле:nn задает используемый шрифт: 0=системный моноширинный, 1=системный шрифт переменной ширины Quote: X=ABnD (биты): Так почему бы не сделать:D задает используемый шрифт: D=0-системный моноширинный, D=1-системный шрифт переменной ширины X=ABСВ (биты):
B=1 - закрашивать фон цветом edi С=1 - возвращать ширину текста в eax. (при С=0 конечно же eax не меняется) D задает используемый шрифт: D=0-системный моноширинный, D=1-системный шрифт переменной ширины PS: но такой вариант не гарантирует что где-то в бите C не лежит мусор(1), и не порушит тем самым eax/ Шансов конечно такой ситуации мало, но вдруг! |
Author: | SoUrcerer [ Wed Mar 13, 2013 12:29 am ] |
Post subject: | Re: SysFn 4 |
Почему не использовать Y в таком случае? |
Author: | Akyltist [ Wed Mar 13, 2013 12:37 am ] |
Post subject: | Re: SysFn 4 |
SoUrcerer wrote: Почему не использовать Y в таком случае? Почему бы и нет, не вижу в этом трагедии какой то. Это ни чем не хуже этого: Quote: A=0 - выводить esi символов, A=1 - выводить ASCIIZ-строку esi = для A=0 длина строки, должна быть не больше 255; для A=1 игнорируется Ну я собственно не настаиваю, просто высказал своё мнение и соображения. Работу программ существующих не нарушает, объём кода реализации 5 строк. В общем я за подобное расширение функционала. Другое дело как окажется в итоге, после всех мнений. |
Author: | Alver [ Sun Jul 07, 2013 7:20 pm ] |
Post subject: | Re: SysFn 4 |
Можно было и еще безопаснее при теперешней реализации функции 4 ![]() Вот кусок описания функции Code: * Y=Cnnn (биты): Накладываем свою жадную лапу на C=1 , edi=0 и спокойно возвращаем в eax или в ecx ширину строки. Думаю указатель на область пользователя с нулевым адресом точно никто не юзает ![]() ![]() |
Author: | 0CodErr [ Wed Sep 28, 2016 4:41 pm ] |
Post subject: | Re: SysFn 4 |
Вот такой код Spoiler: Show Attachment: В результате при запуске приложения происходит это Spoiler: Show Spoiler: Show |
Author: | Siemargl [ Wed Sep 28, 2016 5:14 pm ] |
Post subject: | Re: SysFn 4 |
Есть такое. Вылетает если текст сильно не влезает в окно. |
Author: | Pathoswithin [ Wed Sep 28, 2016 5:52 pm ] |
Post subject: | Re: SysFn 4 |
Всё это связано с тем, что вывод на экран производится через промежуточный буфер с шириной экрана. |
Author: | Pathoswithin [ Wed May 17, 2017 11:04 am ] |
Post subject: | Re: SysFn 4 |
revision #6899 Теперь слишком длинная строка обрезается. |
Author: | 0CodErr [ Mon Oct 16, 2017 3:17 pm ] |
Post subject: | Re: SysFn 4 |
Разное поведение в зависимости от ревизии Code: Unit Unit1; Attachment: Вот таокй вывод в #7040 Attachment: 1.PNG [ 5.8 KiB | Viewed 4798 times ] а так было в KolibriN8(по моему мнению это правильный вариант) Attachment: 2.PNG [ 14.1 KiB | Viewed 4798 times ] Для вывода zero-terminated строк используется флаг DT_ZSTRING Code: DrawText(20, 50, 'ABCDE'#0'FGHIJKLMNOPQRSTUVWXYZ', $00000000, $00FFFFFF, DT_FILL_OPAQUE + DT_ZSTRING, 0); |
Author: | Pathoswithin [ Tue Oct 17, 2017 2:01 am ] |
Post subject: | Re: SysFn 4 |
Ну так это ты специально такую строку сделал. А где это встречается на практике? В текстовых строках нулей быть не должно. А ещё это полезно, если размер строки указан неправильно - после неё часто встречаются нули. |
Author: | GerdtR [ Tue Oct 17, 2017 11:23 am ] |
Post subject: | Re: SysFn 4 |
Pathoswithin, ну на практике такие строки редкость, но всё же возможны. И даже бывало видеть их в Винде, по-моему, в отладчике видел. Pascal-строки, например. Обычно, правда, всё таки при ошибках программы. Или попытках открыть подбитый txt файл. Считаю, что если надо вывести строку из 10 байт, значит вывести все 10 байт. И плевать, какие они. |
Page 3 of 5 | All times are UTC+03:00 |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |