[Cairo] Мерцание окна при перерисовке
От: nosuchip  
Дата: 20.05.09 10:41
Оценка:
В окне приложения win32 рисую путь, заливаю градиентом (все с использованием cairo), при клике внутри контура заливаю другим градиентом.
При перезаливке происходит неприятное мерцание.
Ладно, списываю на отсутствие бэкбуфера, создаю его в формате CAIRO_FORMAT_ARGB32, рисую по нему, в конце метода перерисовки вызываю копирование его на экран. Мерцание только усиливается.
Как можно это победить? Как в кайре вообще избавиться от мерцания?
cairo win32
Re: [Cairo] Мерцание окна при перерисовке
От: c-smile Канада http://terrainformatica.com
Дата: 21.05.09 00:50
Оценка:
Здравствуйте, nosuchip, Вы писали:

N>В окне приложения win32 рисую путь, заливаю градиентом (все с использованием cairo), при клике внутри контура заливаю другим градиентом.

N>При перезаливке происходит неприятное мерцание.
N>Ладно, списываю на отсутствие бэкбуфера, создаю его в формате CAIRO_FORMAT_ARGB32, рисую по нему, в конце метода перерисовки вызываю копирование его на экран. Мерцание только усиливается.
N>Как можно это победить? Как в кайре вообще избавиться от мерцания?

WM_ERASEBKGND как-нибудь обрабатываешь?
Re[2]: [Cairo] Мерцание окна при перерисовке
От: nosuchip  
Дата: 21.05.09 08:32
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Здравствуйте, nosuchip, Вы писали:


N>>В окне приложения win32 рисую путь, заливаю градиентом (все с использованием cairo), при клике внутри контура заливаю другим градиентом.

N>>При перезаливке происходит неприятное мерцание.
N>>Ладно, списываю на отсутствие бэкбуфера, создаю его в формате CAIRO_FORMAT_ARGB32, рисую по нему, в конце метода перерисовки вызываю копирование его на экран. Мерцание только усиливается.
N>>Как можно это победить? Как в кайре вообще избавиться от мерцания?

CS>WM_ERASEBKGND как-нибудь обрабатываешь?


На его месте заглушка стоит, просто забиваю на него и не пробрасываю в DefWndProc.
Re[3]: [Cairo] Мерцание окна при перерисовке
От: nosuchip  
Дата: 21.05.09 09:44
Оценка:
Проблема решена!

1. Заглушка на месте WM_ERASEBKGND
2. Использование бэкбуфера: cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height) и изменение его размера на WM_SIZING
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.