LINUX.ORG.RU

История изменений

Исправление X512, (текущая версия) :

Часы в панели задач возводят таймер, по истечении таймера делают invalidate region и снимают таймер.

Если WM_PAINT не пришло, значит часы не видимы на экране, и дальше можно ни о чем не беспокоиться.

При получении WM_PAINT (часы снова стали видимы) – после отрисовки часы снова возводят таймер.

Я так тоже делаю в своих проектах. Это позволяет избежать шквала сообщений таймера при медленной отрисовке и позволяет не нагружать систему когда графический объект не видно. Также это лучше подходит для модели памяти со сборщиком мусора: не нужно обрабатывать оповещения об удалении визуального объекта из дерева объектов.

Другой пример: события мыши не стоят в очереди, а на лету генерируются в процессе чтения сообщений.

В результате окно зависает намертво если обработка сообщения отсылает новое сообщение. В Haiku всё работает. Я так и не нашёл способа избежать зависания. Надеялся на WM_ENTERIDLE, но оно не всегда присылается. В итоге пришлось сделать обработку в главном цикле и смириться с зависанием при открытии меню и модальных окон.

честная микроядерная реализация GUI на этом ядре тормозила на актуальном железе.

Это уже 20 лет не является проблемой. Сейчас ничего не мешает сделать графику в пространстве пользователя. Ссылаться на проблемы 199x годов в 2020 году - это странно.

Исходная версия X512, :

Часы в панели задач возводят таймер, по истечении таймера делают invalidate region и снимают таймер.

Если WM_PAINT не пришло, значит часы не видимы на экране, и дальше можно ни о чем не беспокоиться.

При получении WM_PAINT (часы снова стали видимы) – после отрисовки часы снова возводят таймер.

Я так тоже делаю в своих проектах. Это позволяет избежать шквала сообщений таймера при медленной отрисовке и позволяет не нагружать систему когда графический объект не видно. Также это лучше подходит для модели памяти со сборщиком мусора: не нужно обрабатывать оповещения об удалении визуального объекта из дерева объектов.

Другой пример: события мыши не стоят в очереди, а на лету генерируются в процессе чтения сообщений.

В результате окно зависает намертво если обработка сообщения отсылает новое сообщение. В Haiku всё работает. Я так и не нашёл способа избежать зависания. Надеялся на WM_ENTERIDLE, но оно не всегда присылается. В итоге пришлось сделать обработку в главном цикле и смириться с зависанием при открытии меню и модальных окон.

честная микроядерная реализация GUI на этом ядре тормозила на актуальном железе.

Это уже 20 лет не является проблемой. Сейчас ничего не мешает сделать графику в пространстве пользователя.