From 0c3f16c9ba77185c059f93ec6307116ae0bce142 Mon Sep 17 00:00:00 2001 From: Marijn Suijten Date: Sat, 1 Apr 2023 15:00:35 +0200 Subject: [PATCH] native-activity: Propagate `onContentRectChanged` callback to main loop --- android-activity/src/native_activity/glue.rs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/android-activity/src/native_activity/glue.rs b/android-activity/src/native_activity/glue.rs index 8e47e8a..908e63f 100644 --- a/android-activity/src/native_activity/glue.rs +++ b/android-activity/src/native_activity/glue.rs @@ -132,6 +132,7 @@ impl NativeActivityGlue { (*(*activity).callbacks).onNativeWindowDestroyed = Some(on_native_window_destroyed); (*(*activity).callbacks).onInputQueueCreated = Some(on_input_queue_created); (*(*activity).callbacks).onInputQueueDestroyed = Some(on_input_queue_destroyed); + (*(*activity).callbacks).onContentRectChanged = Some(on_content_rect_changed); } glue @@ -211,7 +212,6 @@ pub struct NativeActivityState { pub redraw_needed: bool, pub pending_input_queue: *mut ndk_sys::AInputQueue, pub pending_window: Option, - pub pending_content_rect: ndk_sys::ARect, } impl NativeActivityState { @@ -358,7 +358,6 @@ impl WaitableNativeActivityState { redraw_needed: false, pending_input_queue: ptr::null_mut(), pending_window: None, - pending_content_rect: Rect::empty().into(), }), cond: Condvar::new(), } @@ -459,6 +458,12 @@ impl WaitableNativeActivityState { guard.pending_window = None; } + unsafe fn set_content_rect(&self, rect: *const ndk_sys::ARect) { + let mut guard = self.mutex.lock().unwrap(); + guard.content_rect = *rect; + guard.write_cmd(AppCmd::ContentRectChanged); + } + unsafe fn set_activity_state(&self, state: State) { let mut guard = self.mutex.lock().unwrap(); @@ -774,6 +779,16 @@ unsafe extern "C" fn on_input_queue_destroyed( }); } +unsafe extern "C" fn on_content_rect_changed( + activity: *mut ndk_sys::ANativeActivity, + rect: *const ndk_sys::ARect, +) { + log::debug!("ContentRectChanged: {:p} -- {:p}\n", activity, rect); + try_with_waitable_activity_ref(activity, |waitable_activity| { + waitable_activity.set_content_rect(rect) + }); +} + /// This is the native entrypoint for our cdylib library that `ANativeActivity` will look for via `dlsym` #[no_mangle] extern "C" fn ANativeActivity_onCreate(