Fix: Make sure `RawInput::take` clears all events, like it says it does (#5104)

This commit is contained in:
Emil Ernerfeldt 2024-09-13 11:26:50 +02:00 committed by GitHub
parent b5627c7d40
commit 2c8df65bf6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 23 additions and 2 deletions

View File

@ -116,10 +116,14 @@ impl RawInput {
pub fn take(&mut self) -> Self {
Self {
viewport_id: self.viewport_id,
viewports: self.viewports.clone(),
viewports: self
.viewports
.iter_mut()
.map(|(id, info)| (*id, info.take()))
.collect(),
screen_rect: self.screen_rect.take(),
max_texture_side: self.max_texture_side.take(),
time: self.time.take(),
time: self.time,
predicted_dt: self.predicted_dt,
modifiers: self.modifiers,
events: std::mem::take(&mut self.events),
@ -247,6 +251,23 @@ impl ViewportInfo {
.any(|&event| event == ViewportEvent::Close)
}
/// Helper: move [`Self::events`], clone the other fields.
pub fn take(&mut self) -> Self {
Self {
parent: self.parent,
title: self.title.clone(),
events: std::mem::take(&mut self.events),
native_pixels_per_point: self.native_pixels_per_point,
monitor_size: self.monitor_size,
inner_rect: self.inner_rect,
outer_rect: self.outer_rect,
minimized: self.minimized,
maximized: self.maximized,
fullscreen: self.fullscreen,
focused: self.focused,
}
}
pub fn ui(&self, ui: &mut crate::Ui) {
let Self {
parent,