Add egui::Modifiers::contains (#2989)

This commit is contained in:
Andreas Reich 2023-05-15 15:10:54 +02:00 committed by GitHub
parent 268a63fee2
commit ff8e4826b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 59 additions and 0 deletions

View File

@ -510,6 +510,65 @@ impl Modifiers {
true
}
/// Whether another set of modifiers is contained in this set of modifiers with proper handling of [`Self::command`].
///
/// ```
/// # use egui::Modifiers;
/// assert!(Modifiers::default().contains(Modifiers::default()));
/// assert!(Modifiers::CTRL.contains(Modifiers::default()));
/// assert!(Modifiers::CTRL.contains(Modifiers::CTRL));
/// assert!(Modifiers::CTRL.contains(Modifiers::COMMAND));
/// assert!(Modifiers::MAC_CMD.contains(Modifiers::COMMAND));
/// assert!(Modifiers::COMMAND.contains(Modifiers::MAC_CMD));
/// assert!(Modifiers::COMMAND.contains(Modifiers::CTRL));
/// assert!(!(Modifiers::ALT | Modifiers::CTRL).contains(Modifiers::SHIFT));
/// assert!((Modifiers::CTRL | Modifiers::SHIFT).contains(Modifiers::CTRL));
/// assert!(!Modifiers::CTRL.contains(Modifiers::CTRL | Modifiers::SHIFT));
/// ```
pub fn contains(&self, query: Modifiers) -> bool {
if query == Modifiers::default() {
return true;
}
let Modifiers {
alt,
ctrl,
shift,
mac_cmd,
command,
} = *self;
if alt && query.alt {
return self.contains(Modifiers {
alt: false,
..query
});
}
if shift && query.shift {
return self.contains(Modifiers {
shift: false,
..query
});
}
if (ctrl || command) && (query.ctrl || query.command) {
return self.contains(Modifiers {
command: false,
ctrl: false,
..query
});
}
if (mac_cmd || command) && (query.mac_cmd || query.command) {
return self.contains(Modifiers {
mac_cmd: false,
command: false,
..query
});
}
false
}
}
impl std::ops::BitOr for Modifiers {