fn events_cleared_transition()

in src/platform_impl/ios/app_state.rs [399:461]


    fn events_cleared_transition(&mut self) {
        if !self.has_launched() {
            return;
        }
        let (waiting_event_handler, old) = match self.take_state() {
            AppStateImpl::ProcessingRedraws {
                event_handler,
                active_control_flow,
            } => (event_handler, active_control_flow),
            s => bug!("unexpected state {:?}", s),
        };

        let new = self.control_flow;
        match (old, new) {
            (ControlFlow::Poll, ControlFlow::Poll) => self.set_state(AppStateImpl::PollFinished {
                waiting_event_handler,
            }),
            (ControlFlow::Wait, ControlFlow::Wait) => {
                let start = Instant::now();
                self.set_state(AppStateImpl::Waiting {
                    waiting_event_handler,
                    start,
                });
            }
            (ControlFlow::WaitUntil(old_instant), ControlFlow::WaitUntil(new_instant))
                if old_instant == new_instant =>
            {
                let start = Instant::now();
                self.set_state(AppStateImpl::Waiting {
                    waiting_event_handler,
                    start,
                });
            }
            (_, ControlFlow::Wait) => {
                let start = Instant::now();
                self.set_state(AppStateImpl::Waiting {
                    waiting_event_handler,
                    start,
                });
                self.waker.stop()
            }
            (_, ControlFlow::WaitUntil(new_instant)) => {
                let start = Instant::now();
                self.set_state(AppStateImpl::Waiting {
                    waiting_event_handler,
                    start,
                });
                self.waker.start_at(new_instant)
            }
            (_, ControlFlow::Poll) => {
                self.set_state(AppStateImpl::PollFinished {
                    waiting_event_handler,
                });
                self.waker.start()
            }
            (_, ControlFlow::Exit) => {
                // https://developer.apple.com/library/archive/qa/qa1561/_index.html
                // it is not possible to quit an iOS app gracefully and programatically
                warn!("`ControlFlow::Exit` ignored on iOS");
                self.control_flow = old
            }
        }
    }