커스텀 컨트롤을 만들 때 주로, Canvas를 상속받게 되는 데, 이 컨트롤이 애니메이션 요소를 갖고 있다면, 화면이 심하게 깜박거리는 것을 볼 수 있습니다. 이와 관련한 질문에는 더블 버퍼링을 쓰라는 답변이 많고, 코드까지 딸려있는데, 그래도 플리커링은 멈추지 않습니다. Canvas는 paint이벤트를 받으면, 스타일 플래그를 대조하여 SWT.DOUBLE_BUFFERED 값이 0이면 무조건 화면을 지우고 다시 그리기 때문에, 버퍼에 랜더링된 이미지를 한번에 찍는다 해도, 그 전에 지우는 과정이 눈에 보이기 때문입니다.
아래와 같이 생성자를 변경하면, 그리기 코드에 수동 버퍼나, 오프 이미지등과 같은 테크닉을 사용하지 않더라도 자동으로 더블 버퍼됩니다.
Canvas c = new Canvas(parent, SWT.DOUBLE_BUFFERED);
'JFace/SWT' 카테고리의 다른 글
TreeViewer, 컬럼 이동 및, 정렬 표시 (1) | 2011.01.10 |
---|---|
SWT의 사정 - 위젯 상속을 불허하는 이유 (1) | 2011.01.07 |
Table Viewer / Tree Viewer 성능향상 테크닉 (2) | 2010.12.09 |
SWT, JFace 그리고 Dispose (0) | 2010.11.26 |
SWT에서의 한영전환 (0) | 2010.09.29 |