LINUX.ORG.RU

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

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

клиент рисует кнопку в буфере, который он предварительно договорился расшарить с композитором (на практике - сначала в бэкбуффере, а когда отрисует все необходимое - свопит буферы) и посылает композитору событие «дамаг». композитор ловит событие и перерисовывает буфер на экране.
в свою очередь, когда композитор получает событие нажатия кнопки, он определяет окно, которому оно предназначено, он отправляет событие нажатия с относительными координатами клиенту, рисующему это окно. клиент определяет виджет, которому предназначено событие, совершает некие действия и перерисовывает кнопку, чтобы изобразить ее нажатой, а потом посылает композитору событие «дамаг».
точно так же дело обстоит и с иксами, если используется композитный менеджер, но там есть некоторые нерешаемые проблемы.

Или отправляем только измененные части?

меняем в буфере необходимое, отправляем событие перерисовки. новый буфер создавать не нужно.

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

никакой магии

клиент рисует кнопку в буфере, который он предварительно договорился расшарить с композитором (на практике - сначала в бэкбуффере, а когда отрисует все необходимое - свопит буферы) и посылает композитору событие «дамаг». композитор ловит событие и перерисовывает буфер на экране.
в свою очередь, когда композитор получает событие нажатия кнопки, он определяет окно, которому оно предназначено, он отправляет событие нажатия с относительными координатами клиенту, рисующему это окно. клиент определяет виджет, которому предназначено событие, совершает некие действия и перерисовывает кнопку, чтобы изобразить ее нажатой, а потом посылает композитору событие «дамаг».
точно так же дело обстоит и с иксами, если используется композитный менеджер, но там есть некоторые нерешаемые проблемы.