Merge pull request #862 from JuliaPlots/sd/fix_signals

fix glvisualize backend
This commit is contained in:
Michael Krabbe Borregaard 2017-06-01 11:51:09 +02:00 committed by GitHub
commit 7805f3f85b

View File

@ -98,41 +98,6 @@ end
# end # end
const _glplot_deletes = [] const _glplot_deletes = []
function close_child_signals!(screen)
for child in screen.children
for (k, s) in child.inputs
empty!(s.actions)
end
for (k, cam) in child.cameras
for f in fieldnames(cam)
s = getfield(cam, f)
if isa(s, Signal)
close(s, false)
end
end
end
empty!(child.cameras)
close_child_signals!(child)
end
return
end
function empty_screen!(screen)
if isempty(_glplot_deletes)
close_child_signals!(screen)
empty!(screen)
empty!(screen.cameras)
for (k, s) in screen.inputs
empty!(s.actions)
end
empty!(screen)
else
for del_signal in _glplot_deletes
push!(del_signal, true) # trigger delete
end
empty!(_glplot_deletes)
end
nothing
end
function get_plot_screen(list::Vector, name, result = []) function get_plot_screen(list::Vector, name, result = [])
for elem in list for elem in list
@ -158,7 +123,7 @@ function create_window(plt::Plot{GLVisualizeBackend}, visible)
resolution = plt[:size], resolution = plt[:size],
visible = visible visible = visible
) )
@async GLWindow.waiting_renderloop(parent_screen) @async GLWindow.renderloop(parent_screen)
GLVisualize.add_screen(parent_screen) GLVisualize.add_screen(parent_screen)
end end
# now lets get ourselves a permanent Plotting screen # now lets get ourselves a permanent Plotting screen
@ -169,9 +134,6 @@ function create_window(plt::Plot{GLVisualizeBackend}, visible)
parent, area = map(GLWindow.zeroposition, parent.area), parent, area = map(GLWindow.zeroposition, parent.area),
name = name name = name
) )
for (k, s) in screen.inputs # copy signals, so we can clean them up better
screen.inputs[k] = map(identity, s)
end
screen screen
elseif length(plot_screens) == 1 elseif length(plot_screens) == 1
plot_screens[1] plot_screens[1]
@ -181,7 +143,7 @@ function create_window(plt::Plot{GLVisualizeBackend}, visible)
error("multiple Plot screens. Please don't use any screen with the name $name") error("multiple Plot screens. Please don't use any screen with the name $name")
end end
# Since we own this window, we can do deep cleansing # Since we own this window, we can do deep cleansing
empty_screen!(screen) empty!(screen)
plt.o = screen plt.o = screen
GLWindow.set_visibility!(screen, visible) GLWindow.set_visibility!(screen, visible)
resize!(screen, plt[:size]...) resize!(screen, plt[:size]...)