As I'm writing a real-world application in racket (and it's a great tool to do so!) I just ran into another problem:
When a a panel% has a visible scrollbar and there are enough children to actually use that scrollbar, then all children get flooded with on-paint calls when the scrollbar is used. To be precise, the problem is not that the children get lots of on-paint, but that invisible children get that calls, too, which results in a pileup of on-paint calls that block the application when the drawing operation is expensive. In my case I have several dozen graphs to present and even touching the scrollbar results in a desaster. Is there a workaround, say, can I find out if a child is visible at all? Example code - just scroll around and watch how often the first child is redrawn, even when invisible: #lang racket (require racket/gui) (require plot) (define counter 0) (define frame (new frame% [label "on-paint flooding"] [min-height 800] [min-width 800])) (define panel (new vertical-panel% [parent frame] [style '(auto-hscroll auto-vscroll)])) (for-each (λ (a) (new canvas% [parent panel] [min-height 150] [min-width 150] [paint-callback (λ (c dc) (when (= a 0) (set! counter (add1 counter))) (define-values (w h) (send dc get-size)) ; uncomment the following line to see the effect on expensive rendering: ; (plot/dc (function (λ (x) (sin (* 4 x))) -1 1) dc 0 0 w h ) (send dc draw-text (format "~a" counter) 0 0))])) '(0 1 2 3 4 5 6 7 8 9 10)) (send frame show #t) Nik -- ____________________ Racket Users list: http://lists.racket-lang.org/users