refactor: move menu wheel trap helper

This commit is contained in:
lix-2026
2026-05-25 09:44:28 +08:00
parent 863e68b126
commit baae38786d
3 changed files with 31 additions and 21 deletions
+3 -19
View File
@@ -41,7 +41,9 @@ use editor_runtime::command_sync::{
read_editor_snapshot, sync_editor_outputs, sync_persisted_editor_command,
};
use editor_runtime::content_layout::{content_column_left, content_text_left};
use editor_runtime::dom_events::{event_target_matches_selector, target_element};
use editor_runtime::dom_events::{
event_target_matches_selector, target_element, trap_scroll_inside_menu,
};
use editor_runtime::dom_selection::{
block_index_from_selection, current_block_info_from_index, runtime_block_id_from_index,
selection_payload, selection_summary, SelectionPayload,
@@ -4810,24 +4812,6 @@ fn handle_lane_left(stage_rect_width: f64) -> f64 {
.max(HANDLE_STAGE_PADDING_LEFT)
}
fn current_target_html_element(event: &WheelEvent) -> Option<HtmlElement> {
event.current_target()?.dyn_into::<HtmlElement>().ok()
}
fn trap_scroll_inside_menu(event: &WheelEvent) {
event.prevent_default();
event.stop_propagation();
let Some(menu) = current_target_html_element(event) else {
return;
};
let current = f64::from(menu.scroll_top());
let max_scroll = f64::from((menu.scroll_height() - menu.client_height()).max(0));
let next = (current + event.delta_y()).clamp(0.0, max_scroll);
menu.set_scroll_top(next.round() as i32);
}
fn hovered_block_from_target(target: web_sys::EventTarget) -> Option<HoveredBlockState> {
let root = editor_root_element()?;
hovered_block_from_target_runtime(target, &root, HANDLE_SHELL_SELECTOR)