mirror of https://github.com/linebender/xilem
Add emit_signal method (#611)
Co-authored-by: Daniel McNab <36049421+DJMcNab@users.noreply.github.com>
This commit is contained in:
parent
d4f3fc8523
commit
fa4eff5648
|
@ -560,8 +560,7 @@ impl_context_method!(
|
|||
pub fn submit_action(&mut self, action: Action) {
|
||||
trace!("submit_action");
|
||||
self.global_state
|
||||
.signal_queue
|
||||
.push_back(RenderRootSignal::Action(action, self.widget_state.id));
|
||||
.emit_signal(RenderRootSignal::Action(action, self.widget_state.id));
|
||||
}
|
||||
|
||||
/// Request a timer event.
|
||||
|
|
|
@ -39,9 +39,7 @@ fn compose_widget(
|
|||
// TODO - Add unit tests for this.
|
||||
if moved {
|
||||
let ime_area = state.item.get_ime_area();
|
||||
global_state
|
||||
.signal_queue
|
||||
.push_back(RenderRootSignal::new_ime_moved_signal(ime_area));
|
||||
global_state.emit_signal(RenderRootSignal::new_ime_moved_signal(ime_area));
|
||||
}
|
||||
|
||||
// We need to update the accessibility node's coordinates and repaint it at the new position.
|
||||
|
|
|
@ -168,8 +168,7 @@ pub(crate) fn run_update_pointer_pass(root: &mut RenderRoot, root_state: &mut Wi
|
|||
|
||||
if root.state.cursor_icon != new_cursor {
|
||||
root.state
|
||||
.signal_queue
|
||||
.push_back(RenderRootSignal::SetCursor(new_cursor));
|
||||
.emit_signal(RenderRootSignal::SetCursor(new_cursor));
|
||||
}
|
||||
|
||||
root.state.cursor_icon = new_cursor;
|
||||
|
@ -260,19 +259,16 @@ pub(crate) fn run_update_focus_pass(root: &mut RenderRoot, root_state: &mut Widg
|
|||
});
|
||||
|
||||
if prev_focused.is_some() && was_ime_active {
|
||||
root.state.signal_queue.push_back(RenderRootSignal::EndIme);
|
||||
root.state.emit_signal(RenderRootSignal::EndIme);
|
||||
}
|
||||
if next_focused.is_some() && is_ime_active {
|
||||
root.state
|
||||
.signal_queue
|
||||
.push_back(RenderRootSignal::StartIme);
|
||||
root.state.emit_signal(RenderRootSignal::StartIme);
|
||||
}
|
||||
|
||||
if let Some(id) = next_focused {
|
||||
let ime_area = root.widget_arena.get_state(id).item.get_ime_area();
|
||||
root.state
|
||||
.signal_queue
|
||||
.push_back(RenderRootSignal::new_ime_moved_signal(ime_area));
|
||||
.emit_signal(RenderRootSignal::new_ime_moved_signal(ime_area));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -193,17 +193,13 @@ impl RenderRoot {
|
|||
// TODO - What we'd really like is to request a repaint and an accessibility
|
||||
// pass for every single widget.
|
||||
self.root_state().needs_layout = true;
|
||||
self.state
|
||||
.signal_queue
|
||||
.push_back(RenderRootSignal::RequestRedraw);
|
||||
self.state.emit_signal(RenderRootSignal::RequestRedraw);
|
||||
Handled::Yes
|
||||
}
|
||||
WindowEvent::Resize(size) => {
|
||||
self.size = size;
|
||||
self.root_state().needs_layout = true;
|
||||
self.state
|
||||
.signal_queue
|
||||
.push_back(RenderRootSignal::RequestRedraw);
|
||||
self.state.emit_signal(RenderRootSignal::RequestRedraw);
|
||||
Handled::Yes
|
||||
}
|
||||
WindowEvent::AnimFrame => {
|
||||
|
@ -229,9 +225,7 @@ impl RenderRoot {
|
|||
}
|
||||
WindowEvent::RebuildAccessTree => {
|
||||
self.rebuild_access_tree = true;
|
||||
self.state
|
||||
.signal_queue
|
||||
.push_back(RenderRootSignal::RequestRedraw);
|
||||
self.state.emit_signal(RenderRootSignal::RequestRedraw);
|
||||
Handled::Yes
|
||||
}
|
||||
}
|
||||
|
@ -288,9 +282,7 @@ impl RenderRoot {
|
|||
}
|
||||
if self.root_state().needs_layout {
|
||||
warn!("Widget requested layout during layout pass");
|
||||
self.state
|
||||
.signal_queue
|
||||
.push_back(RenderRootSignal::RequestRedraw);
|
||||
self.state.emit_signal(RenderRootSignal::RequestRedraw);
|
||||
}
|
||||
|
||||
// TODO - Improve caching of scenes.
|
||||
|
@ -447,9 +439,7 @@ impl RenderRoot {
|
|||
let new_size = LogicalSize::new(size.width, size.height).to_physical(self.scale_factor);
|
||||
if self.size != new_size {
|
||||
self.size = new_size;
|
||||
self.state
|
||||
.signal_queue
|
||||
.push_back(RenderRootSignal::SetSize(new_size));
|
||||
self.state.emit_signal(RenderRootSignal::SetSize(new_size));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -525,9 +515,7 @@ impl RenderRoot {
|
|||
run_update_focus_pass(self, widget_state);
|
||||
|
||||
if self.root_state().request_anim {
|
||||
self.state
|
||||
.signal_queue
|
||||
.push_back(RenderRootSignal::RequestAnimFrame);
|
||||
self.state.emit_signal(RenderRootSignal::RequestAnimFrame);
|
||||
}
|
||||
|
||||
// We request a redraw if either the render tree or the accessibility
|
||||
|
@ -538,9 +526,7 @@ impl RenderRoot {
|
|||
|| self.root_state().needs_accessibility
|
||||
|| self.root_state().needs_layout
|
||||
{
|
||||
self.state
|
||||
.signal_queue
|
||||
.push_back(RenderRootSignal::RequestRedraw);
|
||||
self.state.emit_signal(RenderRootSignal::RequestRedraw);
|
||||
}
|
||||
|
||||
run_mutate_pass(self, widget_state);
|
||||
|
@ -593,6 +579,13 @@ impl RenderRoot {
|
|||
}
|
||||
}
|
||||
|
||||
impl RenderRootState {
|
||||
/// Send a signal to the runner of this app, which allows global actions to be triggered by a widget.
|
||||
pub(crate) fn emit_signal(&mut self, signal: RenderRootSignal) {
|
||||
self.signal_queue.push_back(signal);
|
||||
}
|
||||
}
|
||||
|
||||
impl RenderRootSignal {
|
||||
pub(crate) fn new_ime_moved_signal(area: Rect) -> Self {
|
||||
RenderRootSignal::ImeMoved(
|
||||
|
|
Loading…
Reference in New Issue