So I have this editor module:
// <... imports ...>
pub struct Editor<'a> {
render_manager: RenderManager<'a>,
font_manager: FontManager,
}
impl<'a> Editor<'a> {
pub fn new (window: Window) -> Self {
let renderer = window.into_canvas().build().unwrap();
Editor {
render_manager: RenderManager::new(renderer),
font_manager: FontManager::new(),
}
}
pub fn show_window (&mut self) { self.render_manager.show_window(); }
pub fn render_all_views (&mut self) { self.render_manager.render_all_views(); }
}
And inside of it, I create a new RenderManager:
// <... imports ...>
const BACKGROUND_COLOR: Color = Color::RGB(46, 46, 50);
pub struct RenderManager<'a> {
renderer: WindowCanvas,
// -- for rendering fonts --
font_texture: FontTexture<'a>,
text_layout: Layout<Color>
}
impl<'a> RenderManager<'a> {
pub fn new (renderer: WindowCanvas) -> Self {
let texture_creator = renderer.texture_creator();
let font_texture = FontTexture::new(&texture_creator).unwrap();
RenderManager {
renderer,
font_texture,
text_layout: Layout::new(CoordinateSystem::PositiveYDown)
}
}
pub fn show_window (&mut self) {
self.renderer.window_mut().show();
}
fn clear_all_views (&mut self) {
self.renderer.set_draw_color(BACKGROUND_COLOR);
self.renderer.clear();
}
pub fn render_all_views (&mut self) {
self.clear_all_views();
self.renderer.present();
}
}
I believe that the issue is that in the RenderManager impl, in the new function, the texture_creator only exists during the function, so when we return the RenderManager it would be a dangling reference, but I don't know how to fix this...