use std::fmt::Debug;
use crate::renderer::bridge::ffi;
use crate::renderer::bridge::map_observer;
use crate::renderer::callbacks::{
CameraDidChangeCallback, FailingLoadingMapCallback, FinishRenderingFrameCallback, VoidCallback,
};
use cxx::SharedPtr;
pub struct MapObserver {
instance: SharedPtr<ffi::MapObserver>,
}
impl Debug for MapObserver {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("MapObserver").finish()
}
}
impl MapObserver {
pub(crate) fn new(instance: SharedPtr<ffi::MapObserver>) -> Self {
Self { instance }
}
pub fn set_will_start_loading_map_callback<F: Fn() + 'static>(&self, callback: F) {
self.instance.setWillStartLoadingMapCallback(Box::new(VoidCallback::new(callback)));
}
pub fn set_did_finish_loading_style_callback<F: Fn() + 'static>(&self, callback: F) {
self.instance.setFinishLoadingStyleCallback(Box::new(VoidCallback::new(callback)));
}
pub fn set_did_become_idle_callback<F: Fn() + 'static>(&self, callback: F) {
self.instance.setBecomeIdleCallback(Box::new(VoidCallback::new(callback)));
}
pub fn set_did_fail_loading_map_callback<F: Fn(map_observer::MapLoadError, &str) + 'static>(
&self,
callback: F,
) {
self.instance.setFailLoadingMapCallback(Box::new(FailingLoadingMapCallback::new(callback)));
}
pub fn set_camera_changed_callback<
F: Fn(map_observer::MapObserverCameraChangeMode) + 'static,
>(
&self,
callback: F,
) {
self.instance.setCameraDidChangeCallback(Box::new(CameraDidChangeCallback::new(callback)));
}
pub fn set_finish_rendering_frame_callback<
F: Fn(/*needs_repaint:*/ bool, /*placement_changed:*/ bool) + 'static,
>(
&self,
callback: F,
) {
self.instance
.setFinishRenderingFrameCallback(Box::new(FinishRenderingFrameCallback::new(callback)));
}
}