
스크롤된 창 안의 뷰포트 안에 그리기 영역이 있습니다. 그리기 영역이 스크롤된 창 안에 맞으면 이미지가 제대로 렌더링됩니다. 하지만 스크롤된 창보다 큰 크기를 요청하면 위나 아래로 스크롤할 때 그리기 영역이 항상 다시 그려지는 것은 아니며 상위 창의 크기를 조정할 때도 마찬가지입니다. 스크롤된 창 내부에 올바른 크기의 영역이 표시되지만 내부에 그리기 영역이 없는 것처럼 보이거나 그리기 영역에 아무 것도 그려지지 않은 것처럼 보이며 때로는 올바른 그림이 무작위로 깜박입니다. 스크롤바의 위치. 호출될 때마다 "render"를 인쇄하는 그리기 신호에 콜백을 연결했고, 스크롤될 때마다 화면에 "adj"를 인쇄하는 스크롤 막대 조정의 값 변경 신호에 대한 또 다른 콜백을 연결했습니다. 터미널 출력은 다음과 같습니다
adj
adj
adj
adj
adj
1428919598 render
adj
adj
adj
따라서 adj를 볼 때마다 캔버스는 비어 있는 것처럼 보이지만 <...> 렌더링을 볼 때는 올바르게 그려집니다. 따라서 빠르게 스크롤하면 깜박이는 이미지가 나타납니다. 이 문제의 원인이 무엇인지 아시나요?
답변1
일부 코드를 gtk2에서 gtk3으로 이식하고 있었습니다. 문제는 이제 "expose-event"를 대체하는 새로운 신호 "draw"에 있는 것으로 밝혀졌습니다. 이전 버전에서는 신호 처리기에서 컨텍스트를 생성해야 했지만 새 콜백에서는 이를 인수 중 하나로 사용하므로 이를 사용해야 합니다.