@Tim: Awesome, exactly what I was looking for. Thank you. @Jameson: Just to check, do you mean something like:
function redraw_canvas(canvas) draw(canvas) end draw(canvas) do widget # ... end If so, I'll re-post my code with the update. It may be useful to someone else to see the entire code as an example. Thanks! A On Tuesday, June 17, 2014 10:44:16 AM UTC-4, Jameson wrote: > > This code is not valid, since getgc does not always have a valid drawing > context to return. Instead you need to provide Canvas with a callback > function via a call to redraw in which you do all the work, then just call > draw(canvas) in your timer callback to force an update to the view. > double-buffering is enabled by default. > > wait(Condition()) is the same wait(), and means sleep until this task is > signaled, and thereby prevents the program from exiting early > > > On Tue, Jun 17, 2014 at 7:46 AM, Abe Schneider <[email protected] > <javascript:>> wrote: > >> Thank you everyone for the fast replies! >> >> After looking at ImageView and the sources, here's the solution I came up >> with: >> >> w = Gtk.@Window() |> >> (body=Gtk.@Box(:v) |> >> (canvas=Gtk.@Canvas(600, 600)) |> >> showall >> >> function redraw_canvas(canvas) >> ctx = getgc(canvas) >> h = height(canvas) >> w = width(canvas) >> >> # draw background >> rectangle(ctx, 0, 0, w, h) >> set_source_rgb(ctx, 1, 1, 1) >> fill(ctx) >> >> # draw objects >> # ... >> >> # tell Gtk+ to redisplay >> draw(canvas) >> end >> >> function init(canvas, delay::Float64, interval::Float64) >> update_timer = Timer(timer -> redraw_canvas(canvas)) >> start_timer(update_timer, delay, interval) >> end >> >> update_timer = init(canvas, 2, 1) >> if !isinteractive() >> wait(Condition()) >> end >> >> stop_timer(update_timer) >> >> I haven't looked yet into what is required to do double-buffering (or if >> it's enabled by default). I also copied the 'wait(Condition())' from the >> docs, though it's not clear to me what the condition is (if I close the >> window, the program is still running -- I'm assuming that means I need to >> connect the signal for window destruction to said condition). >> >> A >> >> >> On Monday, June 16, 2014 9:33:42 PM UTC-4, Jameson wrote: >> >>> I would definately use Julia's timers. See `Gtk.jl/src/cairo.jl` for an >>> example interface to the Cairo backing to a Gtk window (used in >>> `Winston.jl/src/gtk.jl`). If you are using this wrapper, call `draw(w)` to >>> force a redraw immediately, or `draw(w,false)` to queue a redraw request >>> for when Gtk is idle. >>> >>> >>> On Mon, Jun 16, 2014 at 9:12 PM, Tim Holy <[email protected]> wrote: >>> >>>> ImageView's navigation.jl contains an example. The default branch is Tk >>>> (because as far as binary distribution goes, Tk is "solved" and Gtk >>>> isn't >>>> yet), but it has a gtk branch you can look at. >>>> >>>> --Tim >>>> >>>> On Monday, June 16, 2014 04:01:46 PM Abe Schneider wrote: >>>> > I was looking for a way to display a simulation in Julia. Originally >>>> I was >>>> > going to just use PyPlot, but it occurred to me it would be better to >>>> just >>>> > use Gtk+ + Cairo to do the drawing rather than something whose main >>>> purpose >>>> > is drawing graphs. >>>> > >>>> > So far, following the examples on the Github page, I have no problem >>>> > creating a window with a Cairo canvas. I can also display content on >>>> the >>>> > canvas fairly easily (which speaks volumes on the awesomeness of >>>> Julia and >>>> > the Gtk+ library). However, after looking through the code and >>>> samples, >>>> > it's not obvious to me how to redraw the canvas every fraction of a >>>> second >>>> > to display new content. >>>> > >>>> > I did find an example of animating with Cairo and Gtk+ in C >>>> > (http://cairographics.org/threaded_animation_with_cairo/). However, I >>>> > assume one would want to use Julia's timers instead of of GLibs? >>>> Secondly, >>>> > there in their function 'timer_exe', call is made directly to Gtk+ to >>>> send >>>> > a redraw queue to the window. Is there a cleaner way to do it with >>>> the Gtk+ >>>> > library? >>>> > >>>> > Thanks! >>>> > A >>>> >>>> >>> >
