mirror of
https://github.com/rust-windowing/winit.git
synced 2026-09-01 14:20:05 -04:00
android: add {Active,}EventLoopExtAndroid::android_app
This type comes from the user and stored for the entire lifetime, so no need to hide it from them after they've passed it to winit. Fixes #3818.
This commit is contained in:
@@ -43,6 +43,7 @@ changelog entry.
|
|||||||
### Added
|
### Added
|
||||||
|
|
||||||
- On Web, implement `Error` for `platform::web::CustomCursorError`.
|
- On Web, implement `Error` for `platform::web::CustomCursorError`.
|
||||||
|
- On Android, add `{Active,}EventLoopExtAndroid::android_app()` to access the app used to create the loop.
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
|||||||
@@ -76,12 +76,22 @@ use crate::window::{Window, WindowAttributes};
|
|||||||
use self::activity::{AndroidApp, ConfigurationRef, Rect};
|
use self::activity::{AndroidApp, ConfigurationRef, Rect};
|
||||||
|
|
||||||
/// Additional methods on [`EventLoop`] that are specific to Android.
|
/// Additional methods on [`EventLoop`] that are specific to Android.
|
||||||
pub trait EventLoopExtAndroid {}
|
pub trait EventLoopExtAndroid {
|
||||||
|
/// Get the [`AndroidApp`] which was used to create this event loop.
|
||||||
|
fn android_app(&self) -> &AndroidApp;
|
||||||
|
}
|
||||||
|
|
||||||
impl<T> EventLoopExtAndroid for EventLoop<T> {}
|
impl<T> EventLoopExtAndroid for EventLoop<T> {
|
||||||
|
fn android_app(&self) -> &AndroidApp {
|
||||||
|
&self.event_loop.android_app
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Additional methods on [`ActiveEventLoop`] that are specific to Android.
|
/// Additional methods on [`ActiveEventLoop`] that are specific to Android.
|
||||||
pub trait ActiveEventLoopExtAndroid {}
|
pub trait ActiveEventLoopExtAndroid {
|
||||||
|
/// Get the [`AndroidApp`] which was used to create this event loop.
|
||||||
|
fn android_app(&self) -> &AndroidApp;
|
||||||
|
}
|
||||||
|
|
||||||
/// Additional methods on [`Window`] that are specific to Android.
|
/// Additional methods on [`Window`] that are specific to Android.
|
||||||
pub trait WindowExtAndroid {
|
pub trait WindowExtAndroid {
|
||||||
@@ -100,7 +110,11 @@ impl WindowExtAndroid for Window {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ActiveEventLoopExtAndroid for ActiveEventLoop {}
|
impl ActiveEventLoopExtAndroid for ActiveEventLoop {
|
||||||
|
fn android_app(&self) -> &AndroidApp {
|
||||||
|
&self.p.app
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Additional methods on [`WindowAttributes`] that are specific to Android.
|
/// Additional methods on [`WindowAttributes`] that are specific to Android.
|
||||||
pub trait WindowAttributesExtAndroid {}
|
pub trait WindowAttributesExtAndroid {}
|
||||||
@@ -108,9 +122,9 @@ pub trait WindowAttributesExtAndroid {}
|
|||||||
impl WindowAttributesExtAndroid for WindowAttributes {}
|
impl WindowAttributesExtAndroid for WindowAttributes {}
|
||||||
|
|
||||||
pub trait EventLoopBuilderExtAndroid {
|
pub trait EventLoopBuilderExtAndroid {
|
||||||
/// Associates the `AndroidApp` that was passed to `android_main()` with the event loop
|
/// Associates the [`AndroidApp`] that was passed to `android_main()` with the event loop
|
||||||
///
|
///
|
||||||
/// This must be called on Android since the `AndroidApp` is not global state.
|
/// This must be called on Android since the [`AndroidApp`] is not global state.
|
||||||
fn with_android_app(&mut self, app: AndroidApp) -> &mut Self;
|
fn with_android_app(&mut self, app: AndroidApp) -> &mut Self;
|
||||||
|
|
||||||
/// Calling this will mark the volume keys to be manually handled by the application
|
/// Calling this will mark the volume keys to be manually handled by the application
|
||||||
@@ -147,7 +161,7 @@ impl<T> EventLoopBuilderExtAndroid for EventLoopBuilder<T> {
|
|||||||
/// depending on the `android_activity` crate, and instead consume the API that
|
/// depending on the `android_activity` crate, and instead consume the API that
|
||||||
/// is re-exported by Winit.
|
/// is re-exported by Winit.
|
||||||
///
|
///
|
||||||
/// For compatibility applications should then import the `AndroidApp` type for
|
/// For compatibility applications should then import the [`AndroidApp`] type for
|
||||||
/// their `android_main(app: AndroidApp)` function like:
|
/// their `android_main(app: AndroidApp)` function like:
|
||||||
/// ```rust
|
/// ```rust
|
||||||
/// #[cfg(target_os = "android")]
|
/// #[cfg(target_os = "android")]
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ impl RedrawRequester {
|
|||||||
pub struct KeyEventExtra {}
|
pub struct KeyEventExtra {}
|
||||||
|
|
||||||
pub struct EventLoop<T: 'static> {
|
pub struct EventLoop<T: 'static> {
|
||||||
android_app: AndroidApp,
|
pub(crate) android_app: AndroidApp,
|
||||||
window_target: event_loop::ActiveEventLoop,
|
window_target: event_loop::ActiveEventLoop,
|
||||||
redraw_flag: SharedFlag,
|
redraw_flag: SharedFlag,
|
||||||
user_events_sender: mpsc::Sender<T>,
|
user_events_sender: mpsc::Sender<T>,
|
||||||
@@ -646,7 +646,7 @@ impl<T> EventLoopProxy<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub struct ActiveEventLoop {
|
pub struct ActiveEventLoop {
|
||||||
app: AndroidApp,
|
pub(crate) app: AndroidApp,
|
||||||
control_flow: Cell<ControlFlow>,
|
control_flow: Cell<ControlFlow>,
|
||||||
exit: Cell<bool>,
|
exit: Cell<bool>,
|
||||||
redraw_requester: RedrawRequester,
|
redraw_requester: RedrawRequester,
|
||||||
|
|||||||
Reference in New Issue
Block a user