Re: [racket-users] Re: Trying to understand racket/gui and racket/draw

2016-09-16 Thread Robby Findler
You could draw into a bitmap and then have on-paint draw that bitmap, too.

Robby

On Fri, Sep 16, 2016 at 2:53 AM, Jens Axel Søgaard
 wrote:
> As Alex writes the operating system (the system GUI) might erase parts of a
> window at
> any time. Therefore you need to do all your drawing from within on-paint.
>
> http://stackoverflow.com/q/16084690/23567
>
> /Jens Axel
>
>
> 2016-09-16 7:09 GMT+02:00 Alex Harsanyi :
>>
>> According to the documentation for the canvas<%> interface you cannot rely
>> on the canvas not being cleared
>> (http://docs.racket-lang.org/gui/canvas___.html?q=canvas%3C%25%3E):
>>
>> Even when the canvas’s style suppresses explicit clearing of the canvas, a
>> canvas may be erased by the windowing system due to window-moving and
>> -resizing operations. For a transparent canvas, “erased” means that the
>> canvas’s parent window shows through.
>>
>> I suspect the window system clears the canvas when the frame is resized.
>>
>> Alex.
>>
>>
>> On Friday, September 16, 2016 at 9:06:01 AM UTC+8, David K. Storrs wrote:
>> > How do I draw into a canvas and have the results persist past the next
>> > call to paint-callback?
>> >
>> >
>> > Given the code below I was expecting to see:
>> >
>> > 1) A window opens with a diagonal green line on it
>> >
>> > 2) A vertical blue line appears, crossing with the green line
>> >
>> > 3) The window goes fullscreen, still showing the green and blue lines
>> >
>> >
>> >
>> > Instead what I get is:
>> >
>> > 1) A window appears with vertical blue line
>> >
>> > 2) The blue line disappears and is replaced by a diagonal green line
>> >
>> > 3) The window goes fullscreen.  Only the green line is shown.
>> >
>> >
>> > I'm guessing that what's happening is that the window opens, completes
>> > going through the script (and therefore calling the section of code that
>> > displays the blue line), then the on-paint event is triggered and erases 
>> > the
>> > canvas's dc before calling the paint callback.
>> >
>> >
>> > I tried removing the paint-callback on the theory that the default one
>> > probably just told the dc to render its content.  That made no change 
>> > except
>> > that (unsurprisingly) the green line is not painted -- the blue line is, 
>> > but
>> > promptly disappears.
>> >
>> >
>> > Assuming I'm right about what's going on, how do I draw into a dc and
>> > have the changes persist?
>> >
>> >
>> >
>> > #lang racket
>> > (require racket/gui)
>> >
>> >
>> > (define-values (w h) (get-display-size))
>> > (displayln (format "Display size (pixels): ~a x ~a" w h))  ;; 1440 x 877
>> > (define frame (new frame%
>> >(label "Example")
>> >(width w)
>> >(height h)
>> >))
>> > (define canvas
>> >   (new canvas%
>> >(parent frame)
>> >(style '(border hscroll vscroll resize-corner))
>> >(paint-callback (lambda (canvas dc)
>> >  (send dc set-pen (send the-pen-list
>> > find-or-create-pen "green" 1 'solid))
>> >  (send dc draw-line 0 0 1430 867)
>> >
>> >
>> > (define dc (send canvas get-dc))
>> >
>> > (send frame show #t)
>> > (send dc set-pen (send the-pen-list find-or-create-pen "blue" 1 'solid))
>> > (send dc draw-line 700 0 700 877)
>> > (send frame fullscreen #t)
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Racket Users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to racket-users+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.
>
>
>
>
> --
> --
> Jens Axel Søgaard
>
> --
> You received this message because you are subscribed to the Google Groups
> "Racket Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to racket-users+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [racket-users] Re: Trying to understand racket/gui and racket/draw

2016-09-16 Thread Jens Axel Søgaard
As Alex writes the operating system (the system GUI) might erase parts of a
window at
any time. Therefore you need to do all your drawing from within on-paint.

http://stackoverflow.com/q/16084690/23567

/Jens Axel


2016-09-16 7:09 GMT+02:00 Alex Harsanyi :

> According to the documentation for the canvas<%> interface you cannot rely
> on the canvas not being cleared (http://docs.racket-lang.org/
> gui/canvas___.html?q=canvas%3C%25%3E):
>
> Even when the canvas’s style suppresses explicit clearing of the canvas, a
> canvas may be erased by the windowing system due to window-moving and
> -resizing operations. For a transparent canvas, “erased” means that the
> canvas’s parent window shows through.
>
> I suspect the window system clears the canvas when the frame is resized.
>
> Alex.
>
>
> On Friday, September 16, 2016 at 9:06:01 AM UTC+8, David K. Storrs wrote:
> > How do I draw into a canvas and have the results persist past the next
> call to paint-callback?
> >
> >
> > Given the code below I was expecting to see:
> >
> > 1) A window opens with a diagonal green line on it
> >
> > 2) A vertical blue line appears, crossing with the green line
> >
> > 3) The window goes fullscreen, still showing the green and blue lines
> >
> >
> >
> > Instead what I get is:
> >
> > 1) A window appears with vertical blue line
> >
> > 2) The blue line disappears and is replaced by a diagonal green line
> >
> > 3) The window goes fullscreen.  Only the green line is shown.
> >
> >
> > I'm guessing that what's happening is that the window opens, completes
> going through the script (and therefore calling the section of code that
> displays the blue line), then the on-paint event is triggered and erases
> the canvas's dc before calling the paint callback.
> >
> >
> > I tried removing the paint-callback on the theory that the default one
> probably just told the dc to render its content.  That made no change
> except that (unsurprisingly) the green line is not painted -- the blue line
> is, but promptly disappears.
> >
> >
> > Assuming I'm right about what's going on, how do I draw into a dc and
> have the changes persist?
> >
> >
> >
> > #lang racket
> > (require racket/gui)
> >
> >
> > (define-values (w h) (get-display-size))
> > (displayln (format "Display size (pixels): ~a x ~a" w h))  ;; 1440 x 877
> > (define frame (new frame%
> >(label "Example")
> >(width w)
> >(height h)
> >))
> > (define canvas
> >   (new canvas%
> >(parent frame)
> >(style '(border hscroll vscroll resize-corner))
> >(paint-callback (lambda (canvas dc)
> >  (send dc set-pen (send the-pen-list
> find-or-create-pen "green" 1 'solid))
> >  (send dc draw-line 0 0 1430 867)
> >
> >
> > (define dc (send canvas get-dc))
> >
> > (send frame show #t)
> > (send dc set-pen (send the-pen-list find-or-create-pen "blue" 1 'solid))
> > (send dc draw-line 700 0 700 877)
> > (send frame fullscreen #t)
>
> --
> You received this message because you are subscribed to the Google Groups
> "Racket Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to racket-users+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>



-- 
-- 
Jens Axel Søgaard

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.