Баг с кнопками

Kernel-side graphics support
  • Сижу я тут с документацией, читаю, а там:

    Code: Select all

    Функция 12 - начать/закончить перерисовку окна. 
    Подфункция 1 - начать перерисовку окна. 
    Подфункция 2 - закончить перерисовку окна. 
    Замечания:
      * Функция начала перерисовки удаляет все определённые
        функцией 8 кнопки, их следует определить повторно.
    Обновляем документацию? Вероятно, в данном случае "удаляет" используется в смысле затирает изображение этих кнопок (очищает содержимое окна). Или когда-то раньше она правда удаляла все кнопки автоматически?
    Пожалуйста, посмотрите кому не лень.
  • Она и удаляет, то есть, после начала перерисовки ты уже не сможешь нажимать на удалённые кнопки, их нужно снова определить\нарисовать.
    И делать это при каждой перерисовке, иначе кнопки работать не будут: если их удалили — их уже не существует, реакции на них не будет.
  • Все работает верно.
    mcall 12,1 - удаляет все кнопки, в том числе как новосозданную, так и кнопку закрытия окна.
    Attachments
    btn.png
    btn.png (3.67 KiB)
    Viewed 8151 times
    Из хаоса в космос
  • Извиняюсь, но тогда у меня новый вопрос (просто я запутался и потерял нить происходящего): почему мы исправляли баг кнопок, принудительно удаляя кнопки через 8 функцию?
    Этот код вызывается в цикле отрисовки, между 12.1 и 12.2

    Code: Select all

    add     edx,0x80000000 ; delete a button
    mcall   8              ; before create
    sub     edx,0x80000000 ; a new one below
    mcall   8,<10,99>
    
    Функция 8 - определить/удалить кнопку.
    И после этого, я в своих программах тоже стал добавлять в начале draw:

    Code: Select all

    ;удаляем кнопку, если есть
       mov edx, 0x80000002
       mcall 8
    
    Даже в HACONFIG перед 12.1 зачем-то запихал....
    То есть я ошибся, не правильно понял, и можно убрать этот код (код удаления кнопки)? Утечки кнопок не будет?
  • Если нужно удалить все кнопки: mcall 12,1
    Если нужно удалить только часть кнопок, а другие оставить: "delete a button".

    Не думаю что в HA есть место, где нужно удалять кнопки, потому как они нигде вне mcall12,x не должны создаваться.
    Из хаоса в космос
  • Заметил, что если нажать кнопку на неактивном окне, то она не перерисовывается и остаётся нажатой.
  • b00bl1k , да есть такое.
    Могу лишь сказать, что в одной очень старой сборке #2306 этот баг не проявляется(у меня не получилось повторить).
    Возможно, раньше работало правильно, а потом сломалось.
  • 0CodErr
    Ты перерывал http://builds.kolibrios.org/rus/history/ чтобы найти в какой именно сборке появился баг?
    Из хаоса в космос
  • До rev6585 нельзя было кликнуть на кнопку неактивного окна. И уже начиная с этой ревизии кнопки ведут себя так же как и сейчас.

    Предполагаю, что при нажатии на кнопку неактивного окна сначала рисуется инвертирующая рамка (sys_button_activate_handler), потом окно становится активным и кнопки перерисовываются с нормальной рамкой и потом еще раз рамка инвертируется (sys_button_deactivate_handler). У активного окна между нажатием и отпусканием кнопка не перерисовывается.
  • Всё ещё этот баг с нажатием на кнопку неактивного окна (4-мя постами выше b00bl1k писал).
    Возможно ли исправить?
  • Who is online

    Users browsing this forum: No registered users and 4 guests