1use crate::raylib_images::Texture2DHolder;
11use crate::renderer::RaylibRender;
12use cotis_utils::math::Dimensions;
13use cotis_utils::traits::{CotisFrameContext, CotisWindowContext};
14use raylib::texture::Texture2D;
15use std::ops::Deref;
16use std::sync::Arc;
17
18impl CotisWindowContext for RaylibRender {
19 fn window_dimensions(&self) -> Dimensions {
20 let rl = self.lock_handle();
21 (rl.get_screen_width() as f32, rl.get_screen_height() as f32).into()
22 }
23}
24
25impl CotisFrameContext for RaylibRender {
26 fn get_delta_time(&self) -> f32 {
27 self.delta_time()
28 }
29}
30
31mod traits {
32 use crate::functions_raylib::raylib_measure_text_inner;
33 use crate::renderer::RaylibRender;
34 use cotis_defaults::element_configs::text_config::TextConfig;
35 use cotis_utils::text::{RendererTextMeasuringProvider, TextMeasurer};
36
37 impl RendererTextMeasuringProvider<TextConfig> for RaylibRender {
38 fn provide_measurer(&mut self) -> Box<TextMeasurer<'_, TextConfig>> {
39 let fonts = self.fonts();
40 Box::new(move |str, config| raylib_measure_text_inner(str, config, fonts.clone()))
41 }
42 }
43
44 #[cfg(feature = "test-render")]
45 use crate::test_render::RayTestRender;
46
47 #[cfg(feature = "test-render")]
48 impl RendererTextMeasuringProvider<TextConfig> for RayTestRender {
49 fn provide_measurer(&mut self) -> Box<TextMeasurer<'_, TextConfig>> {
50 let fonts = self.get_render().fonts();
51 Box::new(move |str, config| raylib_measure_text_inner(str, config, fonts.clone()))
52 }
53 }
54}
55
56impl Texture2DHolder for Arc<Texture2D> {
57 fn texture(&self) -> &Texture2D {
58 self.deref()
59 }
60}