Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix depth-ordering update #3486

Merged
merged 5 commits into from
May 30, 2022
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 19 additions & 4 deletions lib/rust/ensogl/core/src/display/scene/layer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,7 @@ impl LayerModel {
let on_mut = on_depth_order_dirty(&parents);
let depth_order_dirty = dirty::SharedBool::new(logger_dirty, on_mut);
let global_element_depth_order = default();
let sublayers = Sublayers::new(Logger::new_sub(&logger, "registry"));
let sublayers = Sublayers::new(Logger::new_sub(&logger, "registry"), &depth_order_dirty);
let mask = default();
let scissor_box = default();
let mem_mark = default();
Expand Down Expand Up @@ -851,11 +851,22 @@ impl LayerDynamicShapeInstance {
// === Sublayers ===
// =================

/// Unboxed callback.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd write here doc about what the callback does, not what this line is syntactically.

pub type OnElementDepthOrderDirty = impl Fn();
fn on_element_depth_order_dirty(
parent_depth_order_dirty: &dirty::SharedBool<OnDepthOrderDirty>,
) -> OnElementDepthOrderDirty {
let parent_depth_order_dirty = parent_depth_order_dirty.clone_ref();
move || {
parent_depth_order_dirty.set();
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

braces not needed

}

/// Abstraction for layer sublayers.
#[derive(Clone, CloneRef, Debug)]
pub struct Sublayers {
model: Rc<RefCell<SublayersModel>>,
element_depth_order_dirty: dirty::SharedBool,
element_depth_order_dirty: dirty::SharedBool<OnElementDepthOrderDirty>,
}

impl Deref for Sublayers {
Expand All @@ -874,10 +885,14 @@ impl PartialEq for Sublayers {

impl Sublayers {
/// Constructor.
pub fn new(logger: impl AnyLogger) -> Self {
pub fn new(
logger: impl AnyLogger,
parent_depth_order_dirty: &dirty::SharedBool<OnDepthOrderDirty>,
) -> Self {
let element_dirty_logger = Logger::new_sub(&logger, "dirty");
let model = default();
let element_depth_order_dirty = dirty::SharedBool::new(element_dirty_logger, ());
let dirty_on_mut = on_element_depth_order_dirty(parent_depth_order_dirty);
let element_depth_order_dirty = dirty::SharedBool::new(element_dirty_logger, dirty_on_mut);
Self { model, element_depth_order_dirty }
}
}
Expand Down