Client for playing 300 publicly available Sokoban puzzles on a computer or phone.
on.draw = function()
	Global_state.button_handlers = {}
	Global_state.slider_handlers = {}
	if not Show_code then
		if car.draw then call_protected(car.draw) end
	else
		-- modal dialog
		if Show_file_dialog then
			draw_file_dialog()
			return
		end
		Overflow_button = nil
		love.graphics.setBackgroundColor(Background_color.r, Background_color.g, Background_color.b)
		App.color(Foreground_color)
		love.graphics.setFont(Font)
		App.color(Normal_color)
		love.graphics.setLineWidth(1)
		-- output
		draw_output_border()
		if #Output_editor_state.lines ~= #Output_editor_state.line_cache then
			Text.redraw_all(Output_editor_state)
		end
		edit.draw(Output_editor_state, Foreground_color, --[[hide cursor]] true)
		draw_scrollbar(Output_editor_state)
		-- code editor
		draw_editor_border()
		edit.draw(Current_pane.editor_state, --[[implicitly use Foreground_color]] nil, --[[hide_cursor]] nil, --[[show_line_numbers]] true)
		draw_scrollbar(Current_pane.editor_state)
		--
		draw_menu()
		draw_next_frames_of_animations()
		if Window_in_focus and Mouse_on_window then
			draw_button_tooltips(Global_state)
		end
	end
end