Skip to content

Commit ff8e482

Browse files
authored
Add egui::Modifiers::contains (#2989)
1 parent 268a63f commit ff8e482

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

crates/egui/src/data/input.rs

+59
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,65 @@ impl Modifiers {
510510

511511
true
512512
}
513+
514+
/// Whether another set of modifiers is contained in this set of modifiers with proper handling of [`Self::command`].
515+
///
516+
/// ```
517+
/// # use egui::Modifiers;
518+
/// assert!(Modifiers::default().contains(Modifiers::default()));
519+
/// assert!(Modifiers::CTRL.contains(Modifiers::default()));
520+
/// assert!(Modifiers::CTRL.contains(Modifiers::CTRL));
521+
/// assert!(Modifiers::CTRL.contains(Modifiers::COMMAND));
522+
/// assert!(Modifiers::MAC_CMD.contains(Modifiers::COMMAND));
523+
/// assert!(Modifiers::COMMAND.contains(Modifiers::MAC_CMD));
524+
/// assert!(Modifiers::COMMAND.contains(Modifiers::CTRL));
525+
/// assert!(!(Modifiers::ALT | Modifiers::CTRL).contains(Modifiers::SHIFT));
526+
/// assert!((Modifiers::CTRL | Modifiers::SHIFT).contains(Modifiers::CTRL));
527+
/// assert!(!Modifiers::CTRL.contains(Modifiers::CTRL | Modifiers::SHIFT));
528+
/// ```
529+
pub fn contains(&self, query: Modifiers) -> bool {
530+
if query == Modifiers::default() {
531+
return true;
532+
}
533+
534+
let Modifiers {
535+
alt,
536+
ctrl,
537+
shift,
538+
mac_cmd,
539+
command,
540+
} = *self;
541+
542+
if alt && query.alt {
543+
return self.contains(Modifiers {
544+
alt: false,
545+
..query
546+
});
547+
}
548+
if shift && query.shift {
549+
return self.contains(Modifiers {
550+
shift: false,
551+
..query
552+
});
553+
}
554+
555+
if (ctrl || command) && (query.ctrl || query.command) {
556+
return self.contains(Modifiers {
557+
command: false,
558+
ctrl: false,
559+
..query
560+
});
561+
}
562+
if (mac_cmd || command) && (query.mac_cmd || query.command) {
563+
return self.contains(Modifiers {
564+
mac_cmd: false,
565+
command: false,
566+
..query
567+
});
568+
}
569+
570+
false
571+
}
513572
}
514573

515574
impl std::ops::BitOr for Modifiers {

0 commit comments

Comments
 (0)