use std::cell::Cell;
use yog_abi::YogGfxApi;
thread_local! {
static FRAME: Cell<*const YogGfxApi> = const { Cell::new(std::ptr::null()) };
}
pub(crate) fn drawing<R>(gfx: &YogGfxApi, f: impl FnOnce() -> R) -> R {
let before = FRAME.with(|frame| frame.replace(gfx));
let out = f();
FRAME.with(|frame| frame.set(before));
out
}
pub(crate) unsafe extern "C" fn api_gfx() -> *const YogGfxApi {
crate::jni_util::guarded("api_gfx", std::ptr::null(), || FRAME.with(Cell::get))
}
pub(crate) fn scale_factor() -> f32 {
let frame = FRAME.with(Cell::get);
unsafe { frame.as_ref() }
.map_or(1.0, |g| g.scale_factor)
.max(1.0)
}