pub enum HitboxBehavior {
Normal,
BlockMouse,
BlockMouseExceptScroll,
}Expand description
How the hitbox affects mouse behavior.
Variants§
Normal
Normal hitbox mouse behavior, doesn’t affect mouse handling for other hitboxes.
BlockMouse
All hitboxes behind this hitbox will be ignored and so will have hitbox.is_hovered() == false and hitbox.should_handle_scroll() == false. Typically for elements this causes
skipping of all mouse events, hover styles, and tooltips. This flag is set by
InteractiveElement::occlude.
For mouse handlers that check those hitboxes, this behaves the same as registering a bubble-phase handler for every mouse event type:
window.on_mouse_event(move |_: &EveryMouseEventTypeHere, phase, window, cx| {
if phase == DispatchPhase::Capture && hitbox.is_hovered(window) {
cx.stop_propagation();
}
})This has effects beyond event handling - any use of hitbox checking, such as hover styles and tooltips. These other behaviors are the main point of this mechanism. An alternative might be to not affect mouse event handling - but this would allow inconsistent UI where clicks and moves interact with elements that are not considered to be hovered.
BlockMouseExceptScroll
All hitboxes behind this hitbox will have hitbox.is_hovered() == false, even when
hitbox.should_handle_scroll() == true. Typically for elements this causes all mouse
interaction except scroll events to be ignored - see the documentation of
Hitbox::is_hovered for details. This flag is set by
InteractiveElement::block_mouse_except_scroll.
For mouse handlers that check those hitboxes, this behaves the same as registering a
bubble-phase handler for every mouse event type except ScrollWheelEvent:
window.on_mouse_event(move |_: &EveryMouseEventTypeExceptScroll, phase, window, cx| {
if phase == DispatchPhase::Bubble && hitbox.should_handle_scroll(window) {
cx.stop_propagation();
}
})See the documentation of Hitbox::is_hovered for details of why ScrollWheelEvent is
handled differently than other mouse events. If also blocking these scroll events is
desired, then a cx.stop_propagation() handler like the one above can be used.
This has effects beyond event handling - this affects any use of is_hovered, such as
hover styles and tooltips. These other behaviors are the main point of this mechanism.
An alternative might be to not affect mouse event handling - but this would allow
inconsistent UI where clicks and moves interact with elements that are not considered to
be hovered.
Trait Implementations§
Source§impl Clone for HitboxBehavior
impl Clone for HitboxBehavior
Source§fn clone(&self) -> HitboxBehavior
fn clone(&self) -> HitboxBehavior
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for HitboxBehavior
impl Debug for HitboxBehavior
Source§impl Default for HitboxBehavior
impl Default for HitboxBehavior
Source§fn default() -> HitboxBehavior
fn default() -> HitboxBehavior
Source§impl PartialEq for HitboxBehavior
impl PartialEq for HitboxBehavior
impl Copy for HitboxBehavior
impl Eq for HitboxBehavior
impl StructuralPartialEq for HitboxBehavior
Auto Trait Implementations§
impl Freeze for HitboxBehavior
impl RefUnwindSafe for HitboxBehavior
impl Send for HitboxBehavior
impl Sync for HitboxBehavior
impl Unpin for HitboxBehavior
impl UnwindSafe for HitboxBehavior
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
ReadEndian::read_from_little_endian().