[racket] how to stop canvas% from refreshing after on-event
Excluding only the mouse events from triggering a refresh would probably
be the most elegant solution.
My canvas should only ever listen to a timer, though, so they might as
well share some insider information:
#lang racket/gui
(require sgl)
(define c%
(class canvas%
(inherit with-gl-context swap-gl-buffers refresh)
(define asked-nicely? #f)
(define (please) (set! asked-nicely? #t))
(define (thank-you) (set! asked-nicely? #f))
(define/public (please-refresh)
(please)
(refresh))
(define/override (on-paint)
(when asked-nicely?
(with-gl-context
(lambda ()
(gl-clear-color (random) (random) (random) 1)
(gl-clear 'color-buffer-bit)
(swap-gl-buffers)
(gl-flush)))
(thank-you)))
(super-new (style '(gl)))))
(define t%
(class timer%
(define/override (notify)
(send c please-refresh))
(super-new)))
(define f (new frame% [label ""] [width 100] [height 100]))
(define c (new c% [parent f]))
(define t (new t% [interval 1000]))
(send f show #t)
On 12.02.13 20:04, Robby Findler wrote:
> Could you work around this by tracking mouse movements and, when you
> see a refresh call that comes with a mouse movement doing something
> different than drawing? (I guess you'd need to set a timer that
> expired in a short time and refresh then, just in case it was a "real"
> refresh, but at least you could work around the performance issue.)
>
> Robby
>
>
> On Tue, Feb 12, 2013 at 1:02 PM, Robby Findler
> <robby at eecs.northwestern.edu <mailto:robby at eecs.northwestern.edu>> wrote:
>
> I was using os x 10.7.5 (and saw the same flashing).
>
>
> On Tue, Feb 12, 2013 at 12:59 PM, Philipp Dikmann
> <philipp at dikmann.de <mailto:philipp at dikmann.de>> wrote:
>
> The OS here is Mac OS 10.6.8, running Racket 5.3.1 -
> so I guess its an issue with the OpenGL implementation.
> Thanks for taking a look, though :)
>
>
>
> On 12.02.13 19:37, Michael Wilber wrote:
>
> Your OpenGL example still doesn't flash for me when I move
> the mouse
> over it, on 64-bit linux.
>
> It does, however, flash when I change window focus... for
> some reason?
>
> What OS are you using?
>
> Philipp Dikmann <philipp at dikmann.de
> <mailto:philipp at dikmann.de>> writes:
>
> I'm sorry, I should have been more specific – it
> happens when using a
> gl-enabled canvas (example below).
> I hope that does not turn it into a dragons' den? ;)
>
> Philipp
>
> #lang racket/gui
>
> (require sgl)
>
> (define c%
> (class canvas%
> (inherit with-gl-context swap-gl-buffers)
> (define/override (on-paint)
> (with-gl-context
> (lambda ()
> (gl-clear-color (random) (random) (random) 1)
> (gl-clear 'color-buffer-bit)
> (swap-gl-buffers)
> (gl-flush))))
> (super-new (style '(gl no-autoclear)))))
>
> (define f (new frame% [label ""] [width 100] [height
> 100]))
> (define c (new c% [parent f]))
> (send f show #t)
>
>
> On 11.02.13 22:39, Robby Findler wrote:
>
> I don't think it does that. The program below, at
> least for me,
> doesn't do crazy colors when I move the mouse
> around (it does when
> resizing, tho).
>
> Robby
>
> #lang racket/gui
>
> (define c%
> (class canvas%
> (inherit get-client-size get-dc)
> (define/override (on-paint)
> (define-values (w h) (get-client-size))
> (define dc (get-dc))
> (define c (make-object color% (random 255)
> (random 255) (random
> 255)))
> (send dc set-brush c 'solid)
> (send dc set-pen "black" 1 'transparent)
> (send dc draw-ellipse 0 0 w h))
> (super-new)))
>
> (define f (new frame% [label ""] [width 100]
> [height 100]))
> (define c (new c% [parent f]))
> (send f show #t)
>
>
> On Mon, Feb 11, 2013 at 9:41 AM, Philipp Dikmann
> <philipp at dikmann.de <mailto:philipp at dikmann.de>
> <mailto:philipp at dikmann.de
> <mailto:philipp at dikmann.de>>> wrote:
>
> It appears that the GUI canvas% refreshes
> itself whenever it
> receives a mouse-event%.
> I intend to refresh the canvas at a steady
> pace (using a timer%)
> and independently of any mouse-events instead.
> Is there a reasonable way to suppress the
> default behavior?
>
> Thanks for your time,
> Philipp
> ____________________
> Racket Users list:
> http://lists.racket-lang.org/users
>
>
> ____________________
> Racket Users list:
> http://lists.racket-lang.org/users
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20130212/efc7ad88/attachment.html>