收紧桌面图片拖拽坐标

桌面壳发送图片拖拽事件前将坐标归一为非负整数

桌面壳配置检查反查拖拽坐标归一和单测边界

共享决策记录补充桌面拖拽坐标边界约定
This commit is contained in:
2026-06-20 15:40:26 +08:00
parent e2433ec02f
commit cf01ba3097
3 changed files with 22 additions and 1 deletions
@@ -15,6 +15,10 @@ fn first_valid_desktop_image_drop_payload(
.find_map(|path| import_image_file_payload(path.clone(), "dropped", Some(position)).ok())
}
fn normalize_desktop_drop_position(x: f64, y: f64) -> (i32, i32) {
(x.round().max(0.0) as i32, y.round().max(0.0) as i32)
}
fn emit_desktop_image_drop_event(
window: &WebviewWindow,
paths: &[PathBuf],
@@ -33,7 +37,7 @@ pub(crate) fn register_desktop_file_drop_events(window: &WebviewWindow) {
let drop_window = window.clone();
window.on_window_event(move |event| {
if let WindowEvent::DragDrop(DragDropEvent::Drop { paths, position }) = event {
let drop_position = (position.x.round() as i32, position.y.round() as i32);
let drop_position = normalize_desktop_drop_position(position.x, position.y);
log_desktop_host_event_result(
"file.imageDropped",
emit_desktop_image_drop_event(&drop_window, paths, drop_position),
@@ -103,4 +107,10 @@ mod tests {
fs::remove_file(text_path).expect("remove text drop file");
fs::remove_dir(directory_path).expect("remove drop directory");
}
#[test]
fn desktop_drop_position_is_rounded_and_clamped_to_window_bounds() {
assert_eq!(normalize_desktop_drop_position(12.4, 24.6), (12, 25));
assert_eq!(normalize_desktop_drop_position(-4.2, -0.6), (0, 0));
}
}