use crate::{prelude::*, wrap_render::*};
#[derive(Declare, Clone)]
pub struct IgnorePointer {
#[declare(default)]
pub ignore: IgnoreScope,
}
#[derive(Debug, Clone, Copy, Default)]
pub enum IgnoreScope {
None,
OnlySelf,
#[default]
Subtree,
}
impl_compose_child_for_wrap_render!(IgnorePointer);
impl WrapRender for IgnorePointer {
fn hit_test(&self, host: &dyn Render, ctx: &mut HitTestCtx, pos: Point) -> HitTest {
match self.ignore {
IgnoreScope::Subtree => HitTest { hit: false, can_hit_child: false },
IgnoreScope::OnlySelf => {
let hit = host.hit_test(ctx, pos);
HitTest { hit: false, can_hit_child: hit.can_hit_child }
}
IgnoreScope::None => host.hit_test(ctx, pos),
}
}
#[inline]
fn wrapper_dirty_phase(&self) -> DirtyPhase { DirtyPhase::Paint }
}