box_lib.obj - библиотека gui компонентов

Discussing libraries simplifying applications development
  • в теории потоки используют единое адресное пространство, поэтому загружать библиотеку стоит один раз, и очень желательно до создания потоков. но это в теории. как на практике - надо ещё проверить (сомнения у меня вызывает запись в глобальные переменные, которые могут находиться в библиотеках).
  • Для порожденного потока доступны адресное пространство родителя.
    Однако многие библиотеки не реентерабельны http://ru.wikipedia.org/wiki/Реентерабельность

    Бибилотека box_lib.obj на 99% реентерабельна.
  • Спасибо большое за разъяснения) а оставшийся процент нереентерабельности к каким негативным последствиям может привести, и как их можно избежать?
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • Gluk
    На самом деле все зависит от того как библиотека написана, если повторная входимость учитывалась при написании, то проблем с вызовом не должно быть.
    Для Box_lib все комопненты реентерабельны на 100%, кроме editbox. Который в ближайшее время надеюсь тоже будет пофиксен.
    Last edited by Mario on Tue Oct 13, 2009 9:54 am, edited 1 time in total.
  • Сегодня либа будет польностью реентерабельна. Я внесу необходымые изменения.
  • Спасибо, это будет очень кстати =)
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • Изменения:
    Итак изменилась структура компонента edit_box. Добавилась в структуру ссылка на переменную mouse_dd название этой переменной может быть любое. Но нужно соблюдать правило. Для потока с любым кол-во компонентов edit_box должна использоваться эта переменная. Для другого потока, даже порожденного должна быть предусмотрена своя такая переменная. В этой переменной храниться id бокса в котором произошло выделение. Если даже будет использоваться 1 переменная на 2 потока, это не приведет к крушению программы. Может потерятся выделение в компоненте. Однако рекомендую соблюдать правило - для каждого потока своя такая переменная.

    Необходимо внести изменения в каждую программу. Иначе работает не корректно. Примеры находиться на svn.
  • В ревизии 1214 в box_lib вкралась ошибка. Во всех программах, использующих EditBox, при попытке редактировать текст программы вылетают.
    KolibriOS-перспективная ос!
    Kolibri is best operation system in the world!
  • andrew_programmer
    В каких "во всех"? Например, я для zSea переделал согласно описанию измнения (более подробно в примерах на SVN)
    <Lrz> wrote:Добавилась в структуру ссылка на переменную mouse_dd название этой переменной может быть любое.
    Переменная вставлена приблизительно посередине, соответственно структура следующих данных сдвинулась на 4 байта за счет переменной. Соответственно использующие приложения надо править (если уже не правлено) и перекомпилять.
  • ed_struc_size=76
    struc edit_box width,left,top,color,shift_color,focus_border_color,\
    blur_border_color,text_color,max,text,mouse_variable,flags,size,pos

    ....
    mouse_variable dd ?

    Все ассемблерные программы я переписал. Глючат программы написанные на C.
  • Я брал последнюю ночную сборку. Тестировал в ней свои программы. Потом мне понадобилось сохранить RAM Disk. Так как диск у меня не /hd0/, а /hd2/, то я стал править путь и программа RDSAVE вылетела. Потом попробовал EditBox в HTMLV - тоже самое. И для Screenshoot тоже самое. В общем везде, где используется EditBox происходит вылет при редактировании.
    KolibriOS-перспективная ос!
    Kolibri is best operation system in the world!
  • Я нашел этот баг и я его пофиксел. Я надеюсь у тебя не будет проблем с моим компонентом.
    ---------
    I found this bug and I fix it. I hope you will have no problems with my component.
  • Исходники компонента для выбора файла OpenDialog залиты на SVN ревизия 1219. Лицензия подобна лицензии BSD. По сути это отдельная программа, которая запускается с передачей параметра - указатель на именованную область, предварительно выделенную функцией 68.22. Большая часть обслуживающего кода, подключаемого к инициирующей программе, расположена в макросе opendial.mac. В принципе подключение к программам написанным на ассемблере будет несложным, насчет других языков ничего не могу сказать, возможно придется написать код подобный содержащемуся в макросе.

    Исходники элемента управления FileBrowser и доработанного MenuBar (активация клавиатурой) были залиты еще раньше.

    Поскольку OpenDialog использует иконки в формате PNG (в принципе можно и другие форматы, но нужно подключать код ответственный за распаковку изображения в RAW), то в ближайшее время в теме Проект: Полноценный графический просмотрщик будут выложены исходники 4-х модулей распаковки изображений, под лицензией подобной лицензии BSD.

    З.Ы. По всем вопросам связанным с применением кода постараюсь ответить и помочь с внедрением OpenDialog, если найдутся желающие этим заниматься, однако на вопросы в стиле "докопайся до столба" отвечать не хочу, так что просьба к "шибко грамотным" таких вопросов не задавать.
  • SVN ревизия 1227 - убраны лишние перерисовки при обработке события мыши для компонента OptionBox.
  • Who is online

    Users browsing this forum: No registered users and 2 guests