1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
use crate::{DisplayArea, Domain, PaddleResult, Rectangle, SchedulingContext, WebGLCanvas};
use div::DivHandle;
use nuts::DomainState;
mod config;
pub use crate::display::Display;
pub use config::*;
pub(crate) struct Context {
pub display: DisplayArea,
pub scheduling: SchedulingContext,
}
impl Context {
pub(super) fn init(config: PaddleConfig) -> PaddleResult<()> {
let scheduling = SchedulingContext::new(config.display.update_delay_ms)?;
let display = Display::new(config.display)?.into();
let ctx = Self {
display,
scheduling,
};
nuts::store_to_domain(&Domain::Frame, ctx);
Ok(())
}
pub(crate) fn display_region(&mut self, region: Rectangle, div: DivHandle) -> &mut DisplayArea {
self.display.select(region, div)
}
pub(crate) fn canvas_mut(&mut self) -> &mut WebGLCanvas {
self.display.full_mut().canvas_mut()
}
}
impl Display {
pub fn from_domain(domain: &mut DomainState) -> &mut Self {
let context = domain.get_mut::<Context>();
context.display.full_mut()
}
}