A área de desenho do Gtk nem sempre é renderizada quando dentro de uma janela rolada

A área de desenho do Gtk nem sempre é renderizada quando dentro de uma janela rolada

Eu tenho uma área de desenho dentro de uma viewport dentro de uma janela rolada. A imagem é renderizada corretamente quando a área de desenho cabe dentro da janela rolada. Mas quando solicito um tamanho maior que a janela rolada, a área de desenho nem sempre é redesenhada quando rola para cima ou para baixo, e o mesmo acontece quando a janela pai é redimensionada. O que acontece é que consigo uma área do tamanho certo dentro da Janela Rolada, mas parece que não há Área de Desenho dentro, ou como se não houvesse nada desenhado na Área de Desenho, que às vezes pisca com o desenho correto aleatoriamente. posições das barras de rolagem. Eu conectei um retorno de chamada ao sinal de desenho que imprime "renderizar" toda vez que é chamado, e outro retorno de chamada ao sinal de mudança de valor dos ajustes das barras de rolagem que imprimem "adj" na tela sempre que são roladas. A saída do terminal é a seguinte

adj
adj
adj
adj
adj
1428919598 render
adj
adj
adj

Então, toda vez que vejo adj, a tela parece em branco, enquanto ela é desenhada corretamente quando vejo <...> renderizar. Portanto, ao rolar rapidamente, obtenho uma imagem tremeluzente. Alguma ideia do que pode estar causando isso?

Responder1

Eu estava portando algum código do gtk2 para o gtk3. O problema acabou por estar no novo sinal "draw", que agora substitui "expose-event". Na versão mais antiga eu tinha que criar o contexto no manipulador de sinal, mas o novo callback o tem como um dos argumentos, e é esse que deve ser utilizado.

informação relacionada