收紧桌面图片拖拽坐标
桌面壳发送图片拖拽事件前将坐标归一为非负整数 桌面壳配置检查反查拖拽坐标归一和单测边界 共享决策记录补充桌面拖拽坐标边界约定
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user