Sto scrivendo un programma Haskell con funzionalità click-and-drag, quindi con ogni evento movimento del mouse un aggiornamento viene dipinto sulla finestra. Al momento sto usandoQual è il modo giusto per visualizzare gli aggiornamenti di Cairo in Gtk2hs?
renderWithDrawable myCanvas update
Tuttavia questo è tremolante molto. La mia comprensione è che ho bisogno di creare un drawable separato (una "superficie"?), Renderizzare a quello, e quindi blitarlo sulla finestra dello schermo in una singola operazione. Tuttavia sono confuso sul modo giusto per farlo.
Ho trovato drawWindowBeginPaintRegion
, che parla dell'eliminazione dello sfarfallio. Tuttavia è rimosso in Gtk3 in base ai documenti Haddock. Quindi non sono sicuro se dovrei usare questo, in quanto sembra essere deprecato.
Ho anche trovato renderWithSimilarSurface
al Cairo, che sembra fare qualcosa di simile.
Non so inoltre in che modo queste funzioni si riferiscono a renderWithDrawable
: devo utilizzarle all'interno di tale funzione o cosa?
Qual è il modo giusto per farlo?
Modifica
Questa sembra essere una cosa conosciuta al Cairo. Sto cercando di capire come gestirlo in Haskell.
È possibile pubblicare un esempio indipendente e minimo? – Cactus
@Cactus, non facilmente. Una demo del problema dello sfarfallio avrebbe bisogno di un qualche tipo di animatore o gestore di eventi del mouse per eseguire ripetuti ritocchi, quindi non sarà così piccolo. Anche il grado di sfarfallio sembra variare con la piattaforma. Invece aggiornerò il post con i puntatori alle discussioni sul problema in altre lingue.Disegnare su una PixMap e quindi darne uno schermo allo schermo sembra essere una cosa standard in altre lingue, quindi speravo che esistesse un modo canonico per farlo in Haskell. –
Si potrebbe voler guardare la funzione 'clip'. Ti permetterà di ridisegnare solo ciò di cui hai bisogno (nel tuo caso, il rettangolo iniziale (vecchia posizione) dell'oggetto trascinato e il suo nuovo rettangolo (nuova posizione)). – antoyo