Похоже, что команды перерисовки SWT пропускаются, что приводит к появлению артефактов на экране - PullRequest
0 голосов
/ 25 января 2012

Я столкнулся со следующей проблемой, связанной с методом Control.redraw(int, int, int, int, boolean), вызываемым в Canvas. Я работаю над редактором диаграмм. Недавно я внедрил инструмент выбора. Это показывает прямоугольную рамку на диаграмме. Проблема в том, что я получаю артефакты на экране, когда быстро изменяю размер этого инструмента выделения с помощью мыши. Но все перерисовывается правильно, когда я медленно изменяю размер инструмента.

На языке SWT это выглядит следующим образом.

Каждый раз, когда размер прямоугольника выделения изменяется с помощью мыши, я в конечном итоге вызываю метод redraw, указывающий соответствующую область прямоугольника для перерисовки. Затем я ловлю PaintEvent и рисую рамку. Все работает как положено, если движение мыши медленное.

Вопрос в том, может ли SWT пропустить события рисования или пропустить команды перерисовки? Кто-нибудь сталкивался с подобной проблемой? Может быть, есть какой-то флаг, который нужно установить?

Итак, я попытался setRedraw(true), но это не дало никакого эффекта. Наконец, я попытался заменить метод redraw(int, int, int, int, boolean) на redraw(), и артефакты исчезли, но это неприемлемое решение, поскольку оно создавало заметные задержки во время изменения размера инструмента выделения, особенно в Windows.

Спасибо

1 Ответ

1 голос
/ 25 января 2012

Если вы спрашиваете, соответствует ли каждый отдельный вызов перерисовке событию рисования, тогда ответ - нет. Возможно, ОС решит объединить несколько запросов на перерисовку в одно событие рисования (которое, тем не менее, должно охватывать область всех исходных запросов). Обратите внимание, что запросы рисования могут быть запущены с использованием метода update() - redraw() просто сделает недействительной область и пометит ее для перерисовки, но не вызовет явную перерисовку.

Возможно, у ОС есть некоторые проблемы с перерисовками, но гораздо более вероятно, что проблема в вашем алгоритме рисования кода / перерисовки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...