Allow to block drag logic for value changing

This commit is contained in:
rewin
2024-02-16 22:40:25 +03:00
parent bb81ca6806
commit 4e257af919
2 changed files with 18 additions and 3 deletions
+13 -1
View File
@@ -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);
};
+5 -2
View File
@@ -286,7 +286,8 @@ fn check_predefined(r : &dyn Reflect, onchange : ReflectChange) -> Option<Elemen
onchange: Some(EntityChangeExecutor::new_boxed(
onchange.entity_id,
|world : &mut World, entity, value : String| {
let Some(value) = value.parse::<f32>().ok() else { return; };
let Some(mut value) = value.parse::<f32>().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<Elemen
onchange.entity_id,
|world : &mut World, entity, value : String| {
let Some(mut value) = value.parse::<f32>().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::<Transform>().unwrap();
if transform.is_changed() {
@@ -335,7 +337,8 @@ fn check_predefined(r : &dyn Reflect, onchange : ReflectChange) -> Option<Elemen
onchange: Some(EntityChangeExecutor::new_boxed(
onchange.entity_id,
|world : &mut World, entity, value : String| {
let Some(value) = value.parse::<f32>().ok() else { return; };
let Some(mut value) = value.parse::<f32>().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::<Transform>().unwrap();