From 4e257af919045a446f2c441422ed4c3036f71a72 Mon Sep 17 00:00:00 2001 From: rewin Date: Fri, 16 Feb 2024 22:40:25 +0300 Subject: [PATCH] Allow to block drag logic for value changing --- studio-frontend/src/dioxus-machine.ts | 14 +++++++++++++- studio/src/ui/utils.rs | 7 +++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/studio-frontend/src/dioxus-machine.ts b/studio-frontend/src/dioxus-machine.ts index 633c005..f52903a 100644 --- a/studio-frontend/src/dioxus-machine.ts +++ b/studio-frontend/src/dioxus-machine.ts @@ -136,19 +136,28 @@ function create_float_input(element : HTMLInputElement) { let value = 0; // Начальное значение let isMouseDown = false; let startX = 0; + let isSelected = false; + let max_dx = 0; + + //if focus is lost set isSelected to false + element.addEventListener('focusout', () => { + isSelected = false; + }); element.addEventListener('mousedown', (e: MouseEvent) => { isMouseDown = true; startX = e.clientX; + max_dx = 0; value = parseInt(element.value, 10); document.addEventListener('mousemove', onMouseMove); document.addEventListener('mouseup', onMouseUp); }); const onMouseMove = (e: MouseEvent) => { - if (isMouseDown) { + if (isMouseDown && !isSelected) { const dx = e.clientX - startX; startX = e.clientX; + max_dx = Math.max(max_dx, dx); var float_value = parseFloat(element.value); if (float_value == null) { return; @@ -165,6 +174,9 @@ function create_float_input(element : HTMLInputElement) { const onMouseUp = () => { isMouseDown = false; + if (Math.abs(max_dx) < 1) { + isSelected = true; + } document.removeEventListener('mousemove', onMouseMove); document.removeEventListener('mouseup', onMouseUp); }; diff --git a/studio/src/ui/utils.rs b/studio/src/ui/utils.rs index b2ab0af..7249dc0 100644 --- a/studio/src/ui/utils.rs +++ b/studio/src/ui/utils.rs @@ -286,7 +286,8 @@ fn check_predefined(r : &dyn Reflect, onchange : ReflectChange) -> Option().ok() else { return; }; + let Some(mut value) = value.parse::().ok() else { return; }; + if value == -180.0 { value = 180.0; } let value = value.to_radians(); let mut e = world.get_entity_mut(entity).unwrap(); @@ -312,6 +313,7 @@ fn check_predefined(r : &dyn Reflect, onchange : ReflectChange) -> Option().ok() else { return; }; + if value == -180.0 { value = 180.0; } let mut e = world.get_entity_mut(entity).unwrap(); let mut transform = e.get_mut::().unwrap(); if transform.is_changed() { @@ -335,7 +337,8 @@ fn check_predefined(r : &dyn Reflect, onchange : ReflectChange) -> Option().ok() else { return; }; + let Some(mut value) = value.parse::().ok() else { return; }; + if value == -180.0 { value = 180.0; } let value = value.to_radians(); let mut e = world.get_entity_mut(entity).unwrap(); let mut transform = e.get_mut::().unwrap();