Skip to content

Add a way to close the window #181

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::*;
    }
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions