[racket] how to stop canvas% from refreshing after on-event

From: Robby Findler (robby at eecs.northwestern.edu)
Date: Tue Feb 12 14:04:21 EST 2013

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>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>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> 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>> 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<http://lists.racket-lang.org/users>
>>>>>
>>>>>
>>>>>  ____________________
>>>>    Racket Users list:
>>>>    http://lists.racket-lang.org/**users<http://lists.racket-lang.org/users>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20130212/168bf435/attachment-0001.html>

Posted on the users mailing list.