Skip to content

Add a way to close the window #181

@sunjay

Description

@sunjay

Currently, there is no way to close the window programmatically opened by Turtle::new() or Drawing::new(). We should add a fn destroy(self) method to Drawing which allows for this.

Implementation: The destroy method can send a request to the renderer process which uses EventLoopNotifier to tell the event loop to exit. (More mentoring instructions can be provided if requested.)

To-Do

  • Bikeshed the name. destroy() was the best I could come up with
    • close() only works when Drawing represents a window, but that won't always be the case
    • quit() might work, but it might confuse some people who expect that to end the entire process
    • bye() is used by the Python turtle module and some LOGO implementation, but calling drawing.bye() probably doesn't read very well...
    • Other suggestions are welcome!
  • Resolve TODO comment in examples/runtest.rs (needs to be tested on MacOS)
    • The window currently stays open even after process::exit because the subprocess gets orphaned when using the multiprocessed backend
    • To test on any platform, you can force the multiprocessed backend by changing backend.rs to contain the following:
cfg_if::cfg_if! {
    if #[cfg(any(feature = "test", test))] {
        mod test;
        pub use test::*;

    // } else if #[cfg(target_os = "macos")] {
    } else {
        mod multiprocessed;
        pub use multiprocessed::*;
    //
    // } else {
    //     mod multithreaded;
    //     pub use multithreaded::*;
    }
}

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions