Oh, right you are. I misunderstood what was going on. Sorry for the noise. Robby
On Tue, Apr 17, 2012 at 4:27 PM, Deren Dohoda <[email protected]> wrote: > It was convenient to have something that bypassed the whole gui issue. Since > it really is a gui issue, I am not too offended that my own laziness got in > my way. > > That said, it seemed to me that the use of the new window was a convenience > added for just this kind of use, otherwise I would be using a snip, not just > slamming a plot up. When plot-new-window? is #t, the call to plot evaluates > to void. So it seems that my use case was the point. Without a reference to > the new window, "the opposite problem"---if I understood correctly---can't > happen. Can it? > > On Apr 17, 2012 3:12 PM, "Robby Findler" <[email protected]> > wrote: >> >> FWIW, I think we'd want somehow, in the library, to show plot windows >> in a way that doesn't do any special threading/eventspace stuff, or >> else the opposite confusion can happen. >> >> How about, for this situation, having a function called 'show-plot!' >> that takes a plot and puts it into a window in a separate eventspace, >> collecting all of the plots? >> >> Robby >> >> On Tue, Apr 17, 2012 at 1:16 PM, Matthew Flatt <[email protected]> wrote: >> > You could give each frame in its own eventspace. >> > >> > At Tue, 17 Apr 2012 11:45:20 -0600, Neil Toronto wrote: >> >> Would it be possible to change plot so that its windows always behave >> >> like this? Could I make it not require cooperation from the program >> >> that >> >> calls `plot-frame'? >> >> >> >> This is going to come up every time someone wants to pop up plot >> >> windows >> >> in a non-GUI, interactive loop. >> >> >> >> Neil ⊥ >> >> >> >> On 04/17/2012 10:48 AM, Matthew Flatt wrote: >> >> > All GUI activity like window drawing happens only in the main thread >> >> > of >> >> > an eventspace. Your program also starts out in the main thread. So, >> >> > yes, drawing has to wait until your loop completes. >> >> > >> >> > One solution is to put your loop in a separate thread. The example >> >> > below creates a thread and passes it to `yield' to wait until the >> >> > thread is done. The `yield' function is special in that it lets other >> >> > GUI activity happen while it waits: >> >> > >> >> > #lang at-exp racket >> >> > (require plot >> >> > racket/gui/base) >> >> > (plot-new-window? #t) >> >> > (yield >> >> > (thread >> >> > (lambda () >> >> > (let loop () >> >> > (let ((dummy (read))) >> >> > (if (and (number? dummy) (zero? dummy)) >> >> > (void) >> >> > (begin >> >> > (plot (function (λ(x) (* x x)) -2 2)) >> >> > (loop)))))))) >> >> > >> >> > Although the above should work, it's not really a good idea to >> >> > perform >> >> > GUI actions outside of the main thread. So, here's an improved >> >> > version >> >> > that uses `queue-callback' to send the `plot' call back to the main >> >> > thread: >> >> > >> >> > #lang at-exp racket >> >> > (require plot >> >> > racket/gui/base) >> >> > (plot-new-window? #t) >> >> > (yield >> >> > (thread >> >> > (lambda () >> >> > (let loop () >> >> > (let ((dummy (read))) >> >> > (if (and (number? dummy) (zero? dummy)) >> >> > (void) >> >> > (begin >> >> > ;; queue a callback instead of `plot' directly: >> >> > (queue-callback >> >> > (lambda () >> >> > (plot (function (λ(x) (* x x)) -2 2)))) >> >> > (loop)))))))) >> >> > >> >> > For more information, see >> >> > >> >> > >> >> >> >> http://docs.racket-lang.org/gui/windowing-overview.html#(part._eventspaceinfo) >> >> > >> >> > >> >> > At Tue, 17 Apr 2012 10:40:55 -0400, Deren Dohoda wrote: >> >> >> I was messing around with a spline utility last night and was using >> >> >> the plot-new-window? setting to get a plot. The goal was to share an >> >> >> exe with a coworker who doesn't have Racket. Just a command-line app >> >> >> but to get the plot to display I needed a window and this seemed >> >> >> awesome. The problem is I couldn't get the plot to display when the >> >> >> thread was in a procedure. The window would appear but it was like >> >> >> the >> >> >> plot backend wasn't free to draw to it. Here's a way to reproduce it >> >> >> on v5.2: >> >> >> >> >> >> #lang at-exp racket >> >> >> (require plot) >> >> >> (plot-new-window? #t) >> >> >> (let loop () >> >> >> (let ((dummy (read))) >> >> >> (if (and (number? dummy) (zero? dummy)) >> >> >> (void) >> >> >> (begin >> >> >> (plot (function (λ(x) (* x x)) -2 2)) >> >> >> (loop))))) >> >> >> >> >> >> So long as you are looping, new windows will appear without plot >> >> >> contents. When you finally quit (here by entering the number zero) >> >> >> all >> >> >> the plots are drawn in those windows. Any help? Did I do something >> >> >> horribly dumb? >> >> >> >> >> >> Thanks, >> >> >> Deren >> >> >> >> >> >> ____________________ >> >> >> Racket Users list: >> >> >> http://lists.racket-lang.org/users >> >> > >> >> > ____________________ >> >> > Racket Users list: >> >> > http://lists.racket-lang.org/users >> >> >> >> ____________________ >> >> Racket Users list: >> >> http://lists.racket-lang.org/users >> > >> > ____________________ >> > Racket Users list: >> > http://lists.racket-lang.org/users >> >> ____________________ >> Racket Users list: >> http://lists.racket-lang.org/users ____________________ Racket Users list: http://lists.racket-lang.org/users

