pub( crate ) mod private
{
use crate::*;
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 )
}
}
}
pub mod protected
{
pub use super::
{
orphan::*,
private::REGISTRY,
private::current,
};
}
pub use protected::*;
pub mod orphan
{
pub use super::exposed::*;
}
pub mod exposed
{
pub use super::
{
prelude::*,
private::Context,
private::current as context,
};
}
pub use exposed::*;
pub mod prelude
{
pub use super::private::
{
};
}