frame-time independent scrolling

This commit is contained in:
galister 2026-07-23 17:45:39 +09:00
parent d56c181e9d
commit 078055dc0f
1 changed files with 22 additions and 6 deletions

View File

@ -646,8 +646,10 @@ fn handle_scroll<O>(hit: &PointerHit, hovered: &mut OverlayWindowData<O>, app: &
}
let config = &app.session.config;
let scroll_factor = 90.0 * app.delta_time;
let scroll_x = pointer.now.scroll_x
* scroll_factor
* config.scroll_speed
* if config.invert_scroll_direction_x {
-1.0
@ -655,6 +657,7 @@ fn handle_scroll<O>(hit: &PointerHit, hovered: &mut OverlayWindowData<O>, app: &
1.0
};
let scroll_y = pointer.now.scroll_y
* scroll_factor
* config.scroll_speed
* if config.invert_scroll_direction_x {
-1.0
@ -889,16 +892,25 @@ where
return;
};
let scroll_factor = 90.0 * app.delta_time;
if grab_anchor {
if pointer.now.click {
pointer.interaction.mode = PointerMode::Special;
let grab_dist = grab_data.offset.translation.length().clamp(0.5, 5.0) * 0.2 + 0.4;
handle_scale(&mut app.anchor, pointer.now.scroll_y * grab_dist);
handle_scale(&mut grab_data.offset, pointer.now.scroll_y * grab_dist);
handle_scale(
&mut app.anchor,
pointer.now.scroll_y * grab_dist * scroll_factor,
);
handle_scale(
&mut grab_data.offset,
pointer.now.scroll_y * grab_dist * scroll_factor,
);
} else if app.session.config.allow_sliding && pointer.now.scroll_y.is_finite() {
// single grab push/pull
let grab_dist = grab_data.offset.translation.length().clamp(0.5, 5.0);
grab_data.offset.translation.z -= pointer.now.scroll_y * 0.02 * grab_dist;
grab_data.offset.translation.z -=
pointer.now.scroll_y * scroll_factor * 0.02 * grab_dist;
grab_data.offset.translation.z = grab_data.offset.translation.z.min(-0.05);
}
if pointer.now.click_modifier_right {
@ -921,13 +933,17 @@ where
let grab_dist = grab_data.offset.translation.length().clamp(0.5, 5.0) * 0.2 + 0.4;
handle_scale(
&mut overlay_state.transform,
pointer.now.scroll_y * grab_dist,
pointer.now.scroll_y * grab_dist * scroll_factor,
);
handle_scale(
&mut grab_data.offset,
pointer.now.scroll_y * grab_dist * scroll_factor,
);
handle_scale(&mut grab_data.offset, pointer.now.scroll_y * grab_dist);
} else if app.session.config.allow_sliding && pointer.now.scroll_y.is_finite() {
// single grab push/pull
let grab_dist = grab_data.offset.translation.length().clamp(0.5, 5.0);
grab_data.offset.translation.z -= pointer.now.scroll_y * 0.02 * grab_dist;
grab_data.offset.translation.z -=
pointer.now.scroll_y * scroll_factor * 0.02 * grab_dist;
grab_data.offset.translation.z = grab_data.offset.translation.z.min(-0.05);
}
if pointer.now.click_modifier_right {