iris: eliminate retained-frame heap churn
This commit is contained in:
1 parent
acf206ef19
commit
32f6ad8c79
20 files changed
+518
-195
No files matched your search
+16
-16
@@ -328,18 +328,17 @@ impl SensorUi for UiRenderState {
|
||||
// Platform cancellation reaches every tracker and produces no other sense.
|
||||
if cursor.cancelled {
|
||||
let captured = pointer.captured.take();
|
||||
let mut told: Vec<WidgetId> = captured.into_iter().collect();
|
||||
for id in pointer.pressed.drain(..) {
|
||||
if Some(id) != captured {
|
||||
told.push(id);
|
||||
}
|
||||
}
|
||||
requests.release();
|
||||
pointer.press_origin = None;
|
||||
pointer.drag_axis = None;
|
||||
for id in told {
|
||||
if let Some(id) = captured {
|
||||
deliver_cancel(self, rsc, state, id, &cursor, window_size, &requests);
|
||||
}
|
||||
for id in pointer.pressed.drain(..) {
|
||||
if Some(id) != captured {
|
||||
deliver_cancel(self, rsc, state, id, &cursor, window_size, &requests);
|
||||
}
|
||||
}
|
||||
rsc.events_mut().get_type::<CursorSense>().global = pointer;
|
||||
return;
|
||||
}
|
||||
@@ -442,15 +441,16 @@ impl SensorUi for UiRenderState {
|
||||
pointer.captured = requests.holder();
|
||||
match pointer.captured {
|
||||
Some(winner) => {
|
||||
let losers: Vec<WidgetId> = pointer
|
||||
.pressed
|
||||
.iter()
|
||||
.copied()
|
||||
.filter(|&id| id != winner)
|
||||
.collect();
|
||||
pointer.pressed.retain(|&id| id == winner);
|
||||
for loser in losers {
|
||||
deliver_cancel(self, rsc, state, loser, &cursor, window_size, &requests);
|
||||
let mut winner_was_pressed = false;
|
||||
for id in pointer.pressed.drain(..) {
|
||||
if id == winner {
|
||||
winner_was_pressed = true;
|
||||
} else {
|
||||
deliver_cancel(self, rsc, state, id, &cursor, window_size, &requests);
|
||||
}
|
||||
}
|
||||
if winner_was_pressed {
|
||||
pointer.pressed.push(winner);
|
||||
}
|
||||
}
|
||||
None if !button_down => pointer.pressed.clear(),
|
||||
|
||||
Reference in new issue
Block a user