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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
pub( crate ) mod private
{
use crate::protected::*;
use crate::abs::*;
use once_cell::sync::Lazy;
use std::sync::Mutex;
use std::sync::Arc;
#[ derive( Debug, Clone ) ]
pub struct Context
{
id : Id,
stroke : Option< StrokeBrush >,
drawing : Option< Drawing >,
}
impl Context
{
}
impl Make0 for Context
{
fn make_0() -> Self
{
let id = Id::new::< Self >();
let stroke = None;
let drawing = None;
Self
{
id,
stroke,
drawing,
}
}
}
impl ContextInterface for Context
{
type Changer = ContextChanger;
fn changer( &mut self ) -> Self::Changer
{
let id = self.id();
let stroke = self.stroke.as_ref().map( | stroke | stroke.id() );
let drawing = self.drawing.as_ref().map( | drawing | drawing.id() );
let changes = Vec::new();
ContextChanger
{
id,
stroke,
drawing,
changes,
}
}
}
impl HasIdInterface for Context
{
#[ inline ]
fn id( &self ) -> Id
{
self.id
}
}
pub static mut REGISTRY : Lazy< Arc< Mutex< Registry< Context > > > > = Registry::< Context >::new();
pub fn current() -> ContextChanger
{
unsafe
{
Registry::< Context >::current( &mut REGISTRY )
}
}
}
crate::mod_interface!
{
protected use { REGISTRY, current };
exposed use { Context, current as context };
}