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