Я столкнулся со следующей проблемой, связанной с методом Control.redraw(int, int, int, int, boolean)
, вызываемым в Canvas. Я работаю над редактором диаграмм. Недавно я внедрил инструмент выбора. Это показывает прямоугольную рамку на диаграмме. Проблема в том, что я получаю артефакты на экране, когда быстро изменяю размер этого инструмента выделения с помощью мыши. Но все перерисовывается правильно, когда я медленно изменяю размер инструмента.
На языке SWT это выглядит следующим образом.
Каждый раз, когда размер прямоугольника выделения изменяется с помощью мыши, я в конечном итоге вызываю метод redraw
, указывающий соответствующую область прямоугольника для перерисовки. Затем я ловлю PaintEvent
и рисую рамку. Все работает как положено, если движение мыши медленное.
Вопрос в том, может ли SWT пропустить события рисования или пропустить команды перерисовки? Кто-нибудь сталкивался с подобной проблемой? Может быть, есть какой-то флаг, который нужно установить?
Итак, я попытался setRedraw(true)
, но это не дало никакого эффекта. Наконец, я попытался заменить метод redraw(int, int, int, int, boolean)
на redraw()
, и артефакты исчезли, но это неприемлемое решение, поскольку оно создавало заметные задержки во время изменения размера инструмента выделения, особенно в Windows.
Спасибо