Change outlines to respect InheritedVisibility.
This commit is contained in:
parent
bf2385f167
commit
70847d7d5d
@ -77,6 +77,7 @@ pub(crate) struct ComputedInternal {
|
|||||||
pub struct ComputedOutline(pub(crate) Option<ComputedInternal>);
|
pub struct ComputedOutline(pub(crate) Option<ComputedInternal>);
|
||||||
|
|
||||||
type OutlineComponents<'a> = (
|
type OutlineComponents<'a> = (
|
||||||
|
(&'a InheritedVisibility, Changed<InheritedVisibility>),
|
||||||
(&'a GlobalTransform, Changed<GlobalTransform>),
|
(&'a GlobalTransform, Changed<GlobalTransform>),
|
||||||
Option<(&'a OutlineVolume, Changed<OutlineVolume>)>,
|
Option<(&'a OutlineVolume, Changed<OutlineVolume>)>,
|
||||||
Option<(&'a OutlineStencil, Changed<OutlineStencil>)>,
|
Option<(&'a OutlineStencil, Changed<OutlineStencil>)>,
|
||||||
@ -149,7 +150,7 @@ fn propagate_computed_outline(
|
|||||||
|
|
||||||
fn update_computed_outline(
|
fn update_computed_outline(
|
||||||
computed: &mut ComputedOutline,
|
computed: &mut ComputedOutline,
|
||||||
((transform, changed_transform), volume, stencil, mode): QueryItem<'_, OutlineComponents>,
|
((visibility, changed_visibility), (transform, changed_transform), volume, stencil, mode): QueryItem<'_, OutlineComponents>,
|
||||||
parent_computed: &ComputedInternal,
|
parent_computed: &ComputedInternal,
|
||||||
parent_entity: Option<Entity>,
|
parent_entity: Option<Entity>,
|
||||||
force_update: bool,
|
force_update: bool,
|
||||||
@ -157,6 +158,7 @@ fn update_computed_outline(
|
|||||||
let changed = force_update
|
let changed = force_update
|
||||||
|| if let ComputedOutline(Some(computed)) = computed {
|
|| if let ComputedOutline(Some(computed)) = computed {
|
||||||
computed.inherited_from != parent_entity
|
computed.inherited_from != parent_entity
|
||||||
|
|| changed_visibility
|
||||||
|| (changed_transform && matches!(mode, Some((OutlineMode::FlatVertex { .. }, _))))
|
|| (changed_transform && matches!(mode, Some((OutlineMode::FlatVertex { .. }, _))))
|
||||||
|| computed.volume.is_changed(volume)
|
|| computed.volume.is_changed(volume)
|
||||||
|| computed.stencil.is_changed(stencil)
|
|| computed.stencil.is_changed(stencil)
|
||||||
@ -169,7 +171,7 @@ fn update_computed_outline(
|
|||||||
inherited_from: parent_entity,
|
inherited_from: parent_entity,
|
||||||
volume: if let Some((vol, _)) = volume {
|
volume: if let Some((vol, _)) = volume {
|
||||||
Sourced::set(ComputedVolume {
|
Sourced::set(ComputedVolume {
|
||||||
enabled: vol.visible && vol.colour.a() != 0.0,
|
enabled: visibility.get() && vol.visible && vol.colour.a() != 0.0,
|
||||||
offset: vol.width,
|
offset: vol.width,
|
||||||
colour: vol.colour.into(),
|
colour: vol.colour.into(),
|
||||||
})
|
})
|
||||||
@ -178,7 +180,7 @@ fn update_computed_outline(
|
|||||||
},
|
},
|
||||||
stencil: if let Some((sten, _)) = stencil {
|
stencil: if let Some((sten, _)) = stencil {
|
||||||
Sourced::set(ComputedStencil {
|
Sourced::set(ComputedStencil {
|
||||||
enabled: sten.enabled,
|
enabled: visibility.get() && sten.enabled,
|
||||||
offset: sten.offset,
|
offset: sten.offset,
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
|
@ -241,7 +241,9 @@ impl Plugin for OutlinePlugin {
|
|||||||
.add_systems(
|
.add_systems(
|
||||||
PostUpdate,
|
PostUpdate,
|
||||||
(
|
(
|
||||||
compute_outline.after(TransformSystem::TransformPropagate),
|
compute_outline
|
||||||
|
.after(TransformSystem::TransformPropagate)
|
||||||
|
.after(VisibilitySystems::VisibilityPropagate),
|
||||||
set_outline_visibility.in_set(VisibilitySystems::CheckVisibility),
|
set_outline_visibility.in_set(VisibilitySystems::CheckVisibility),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user