Move all input-related options into `InputOptions` (#7121)
This commit is contained in:
parent
6d04140736
commit
9681644936
|
|
@ -491,7 +491,7 @@ impl ContextImpl {
|
||||||
new_raw_input,
|
new_raw_input,
|
||||||
viewport.repaint.requested_immediate_repaint_prev_pass(),
|
viewport.repaint.requested_immediate_repaint_prev_pass(),
|
||||||
pixels_per_point,
|
pixels_per_point,
|
||||||
&self.memory.options,
|
self.memory.options.input_options,
|
||||||
);
|
);
|
||||||
|
|
||||||
let screen_rect = viewport.input.screen_rect;
|
let screen_rect = viewport.input.screen_rect;
|
||||||
|
|
|
||||||
|
|
@ -18,9 +18,15 @@ pub use touch_state::MultiTouchInfo;
|
||||||
use touch_state::TouchState;
|
use touch_state::TouchState;
|
||||||
|
|
||||||
/// Options for input state handling.
|
/// Options for input state handling.
|
||||||
#[derive(Clone, Debug, PartialEq)]
|
#[derive(Clone, Copy, Debug, PartialEq)]
|
||||||
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
|
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
|
||||||
pub struct InputOptions {
|
pub struct InputOptions {
|
||||||
|
/// Multiplier for the scroll speed when reported in [`crate::MouseWheelUnit::Line`]s.
|
||||||
|
pub line_scroll_speed: f32,
|
||||||
|
|
||||||
|
/// Controls the speed at which we zoom in when doing ctrl/cmd + scroll.
|
||||||
|
pub scroll_zoom_speed: f32,
|
||||||
|
|
||||||
/// After a pointer-down event, if the pointer moves more than this, it won't become a click.
|
/// After a pointer-down event, if the pointer moves more than this, it won't become a click.
|
||||||
pub max_click_dist: f32,
|
pub max_click_dist: f32,
|
||||||
|
|
||||||
|
|
@ -39,7 +45,17 @@ pub struct InputOptions {
|
||||||
|
|
||||||
impl Default for InputOptions {
|
impl Default for InputOptions {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
|
// TODO(emilk): figure out why these constants need to be different on web and on native (winit).
|
||||||
|
let is_web = cfg!(target_arch = "wasm32");
|
||||||
|
let line_scroll_speed = if is_web {
|
||||||
|
8.0
|
||||||
|
} else {
|
||||||
|
40.0 // Scroll speed decided by consensus: https://github.com/emilk/egui/issues/461
|
||||||
|
};
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
line_scroll_speed,
|
||||||
|
scroll_zoom_speed: 1.0 / 200.0,
|
||||||
max_click_dist: 6.0,
|
max_click_dist: 6.0,
|
||||||
max_click_duration: 0.8,
|
max_click_duration: 0.8,
|
||||||
max_double_click_delay: 0.3,
|
max_double_click_delay: 0.3,
|
||||||
|
|
@ -51,39 +67,59 @@ impl InputOptions {
|
||||||
/// Show the options in the ui.
|
/// Show the options in the ui.
|
||||||
pub fn ui(&mut self, ui: &mut crate::Ui) {
|
pub fn ui(&mut self, ui: &mut crate::Ui) {
|
||||||
let Self {
|
let Self {
|
||||||
|
line_scroll_speed,
|
||||||
|
scroll_zoom_speed,
|
||||||
max_click_dist,
|
max_click_dist,
|
||||||
max_click_duration,
|
max_click_duration,
|
||||||
max_double_click_delay,
|
max_double_click_delay,
|
||||||
} = self;
|
} = self;
|
||||||
crate::containers::CollapsingHeader::new("InputOptions")
|
crate::Grid::new("InputOptions")
|
||||||
.default_open(false)
|
.num_columns(2)
|
||||||
|
.striped(true)
|
||||||
.show(ui, |ui| {
|
.show(ui, |ui| {
|
||||||
ui.horizontal(|ui| {
|
ui.label("Line scroll speed");
|
||||||
ui.label("Max click distance");
|
ui.add(crate::DragValue::new(line_scroll_speed).range(0.0..=f32::INFINITY))
|
||||||
ui.add(
|
.on_hover_text(
|
||||||
crate::DragValue::new(max_click_dist)
|
"How many lines to scroll with each tick of the mouse wheel",
|
||||||
.range(0.0..=f32::INFINITY)
|
);
|
||||||
|
ui.end_row();
|
||||||
|
|
||||||
|
ui.label("Scroll zoom speed");
|
||||||
|
ui.add(
|
||||||
|
crate::DragValue::new(scroll_zoom_speed)
|
||||||
|
.range(0.0..=f32::INFINITY)
|
||||||
|
.speed(0.001),
|
||||||
|
)
|
||||||
|
.on_hover_text("How fast to zoom with ctrl/cmd + scroll");
|
||||||
|
ui.end_row();
|
||||||
|
|
||||||
|
ui.label("Max click distance");
|
||||||
|
ui.add(crate::DragValue::new(max_click_dist).range(0.0..=f32::INFINITY))
|
||||||
|
.on_hover_text(
|
||||||
|
"If the pointer moves more than this, it won't become a click",
|
||||||
|
);
|
||||||
|
ui.end_row();
|
||||||
|
|
||||||
|
|
||||||
|
ui.label("Max click duration");
|
||||||
|
ui.add(
|
||||||
|
crate::DragValue::new(max_click_duration)
|
||||||
|
.range(0.1..=f64::INFINITY)
|
||||||
|
.speed(0.1),
|
||||||
)
|
)
|
||||||
.on_hover_text("If the pointer moves more than this, it won't become a click");
|
.on_hover_text(
|
||||||
});
|
"If the pointer is down for longer than this it will no longer register as a click",
|
||||||
ui.horizontal(|ui| {
|
);
|
||||||
ui.label("Max click duration");
|
ui.end_row();
|
||||||
ui.add(
|
|
||||||
crate::DragValue::new(max_click_duration)
|
ui.label("Max double click delay");
|
||||||
.range(0.1..=f64::INFINITY)
|
ui.add(
|
||||||
.speed(0.1),
|
crate::DragValue::new(max_double_click_delay)
|
||||||
)
|
.range(0.01..=f64::INFINITY)
|
||||||
.on_hover_text("If the pointer is down for longer than this it will no longer register as a click");
|
.speed(0.1),
|
||||||
});
|
)
|
||||||
ui.horizontal(|ui| {
|
.on_hover_text("Max time interval for double click to count");
|
||||||
ui.label("Max double click delay");
|
ui.end_row();
|
||||||
ui.add(
|
|
||||||
crate::DragValue::new(max_double_click_delay)
|
|
||||||
.range(0.01..=f64::INFINITY)
|
|
||||||
.speed(0.1),
|
|
||||||
)
|
|
||||||
.on_hover_text("Max time interval for double click to count");
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -267,7 +303,7 @@ impl InputState {
|
||||||
mut new: RawInput,
|
mut new: RawInput,
|
||||||
requested_immediate_repaint_prev_frame: bool,
|
requested_immediate_repaint_prev_frame: bool,
|
||||||
pixels_per_point: f32,
|
pixels_per_point: f32,
|
||||||
options: &crate::Options,
|
input_options: InputOptions,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
profiling::function_scope!();
|
profiling::function_scope!();
|
||||||
|
|
||||||
|
|
@ -287,7 +323,7 @@ impl InputState {
|
||||||
for touch_state in self.touch_states.values_mut() {
|
for touch_state in self.touch_states.values_mut() {
|
||||||
touch_state.begin_pass(time, &new, self.pointer.interact_pos);
|
touch_state.begin_pass(time, &new, self.pointer.interact_pos);
|
||||||
}
|
}
|
||||||
let pointer = self.pointer.begin_pass(time, &new, options);
|
let pointer = self.pointer.begin_pass(time, &new, input_options);
|
||||||
|
|
||||||
let mut keys_down = self.keys_down;
|
let mut keys_down = self.keys_down;
|
||||||
let mut zoom_factor_delta = 1.0; // TODO(emilk): smoothing for zoom factor
|
let mut zoom_factor_delta = 1.0; // TODO(emilk): smoothing for zoom factor
|
||||||
|
|
@ -320,7 +356,7 @@ impl InputState {
|
||||||
} => {
|
} => {
|
||||||
let mut delta = match unit {
|
let mut delta = match unit {
|
||||||
MouseWheelUnit::Point => *delta,
|
MouseWheelUnit::Point => *delta,
|
||||||
MouseWheelUnit::Line => options.line_scroll_speed * *delta,
|
MouseWheelUnit::Line => input_options.line_scroll_speed * *delta,
|
||||||
MouseWheelUnit::Page => screen_rect.height() * *delta,
|
MouseWheelUnit::Page => screen_rect.height() * *delta,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -403,7 +439,7 @@ impl InputState {
|
||||||
}
|
}
|
||||||
|
|
||||||
zoom_factor_delta *=
|
zoom_factor_delta *=
|
||||||
(options.scroll_zoom_speed * smooth_scroll_delta_for_zoom).exp();
|
(input_options.scroll_zoom_speed * smooth_scroll_delta_for_zoom).exp();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -437,7 +473,7 @@ impl InputState {
|
||||||
keys_down,
|
keys_down,
|
||||||
events: new.events.clone(), // TODO(emilk): remove clone() and use raw.events
|
events: new.events.clone(), // TODO(emilk): remove clone() and use raw.events
|
||||||
raw: new,
|
raw: new,
|
||||||
input_options: options.input_options.clone(),
|
input_options,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -912,12 +948,12 @@ impl PointerState {
|
||||||
mut self,
|
mut self,
|
||||||
time: f64,
|
time: f64,
|
||||||
new: &RawInput,
|
new: &RawInput,
|
||||||
options: &crate::Options,
|
input_options: InputOptions,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let was_decidedly_dragging = self.is_decidedly_dragging();
|
let was_decidedly_dragging = self.is_decidedly_dragging();
|
||||||
|
|
||||||
self.time = time;
|
self.time = time;
|
||||||
self.input_options = options.input_options.clone();
|
self.input_options = input_options;
|
||||||
|
|
||||||
self.pointer_events.clear();
|
self.pointer_events.clear();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -284,14 +284,6 @@ pub struct Options {
|
||||||
/// By default this is `true` in debug builds.
|
/// By default this is `true` in debug builds.
|
||||||
pub warn_on_id_clash: bool,
|
pub warn_on_id_clash: bool,
|
||||||
|
|
||||||
// ------------------------------
|
|
||||||
// Input:
|
|
||||||
/// Multiplier for the scroll speed when reported in [`crate::MouseWheelUnit::Line`]s.
|
|
||||||
pub line_scroll_speed: f32,
|
|
||||||
|
|
||||||
/// Controls the speed at which we zoom in when doing ctrl/cmd + scroll.
|
|
||||||
pub scroll_zoom_speed: f32,
|
|
||||||
|
|
||||||
/// Options related to input state handling.
|
/// Options related to input state handling.
|
||||||
pub input_options: crate::input_state::InputOptions,
|
pub input_options: crate::input_state::InputOptions,
|
||||||
|
|
||||||
|
|
@ -311,14 +303,6 @@ pub struct Options {
|
||||||
|
|
||||||
impl Default for Options {
|
impl Default for Options {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
// TODO(emilk): figure out why these constants need to be different on web and on native (winit).
|
|
||||||
let is_web = cfg!(target_arch = "wasm32");
|
|
||||||
let line_scroll_speed = if is_web {
|
|
||||||
8.0
|
|
||||||
} else {
|
|
||||||
40.0 // Scroll speed decided by consensus: https://github.com/emilk/egui/issues/461
|
|
||||||
};
|
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
dark_style: std::sync::Arc::new(Theme::Dark.default_style()),
|
dark_style: std::sync::Arc::new(Theme::Dark.default_style()),
|
||||||
light_style: std::sync::Arc::new(Theme::Light.default_style()),
|
light_style: std::sync::Arc::new(Theme::Light.default_style()),
|
||||||
|
|
@ -335,8 +319,6 @@ impl Default for Options {
|
||||||
warn_on_id_clash: cfg!(debug_assertions),
|
warn_on_id_clash: cfg!(debug_assertions),
|
||||||
|
|
||||||
// Input:
|
// Input:
|
||||||
line_scroll_speed,
|
|
||||||
scroll_zoom_speed: 1.0 / 200.0,
|
|
||||||
input_options: Default::default(),
|
input_options: Default::default(),
|
||||||
reduce_texture_memory: false,
|
reduce_texture_memory: false,
|
||||||
}
|
}
|
||||||
|
|
@ -391,9 +373,6 @@ impl Options {
|
||||||
screen_reader: _, // needs to come from the integration
|
screen_reader: _, // needs to come from the integration
|
||||||
preload_font_glyphs: _,
|
preload_font_glyphs: _,
|
||||||
warn_on_id_clash,
|
warn_on_id_clash,
|
||||||
|
|
||||||
line_scroll_speed,
|
|
||||||
scroll_zoom_speed,
|
|
||||||
input_options,
|
input_options,
|
||||||
reduce_texture_memory,
|
reduce_texture_memory,
|
||||||
} = self;
|
} = self;
|
||||||
|
|
@ -448,22 +427,6 @@ impl Options {
|
||||||
CollapsingHeader::new("🖱 Input")
|
CollapsingHeader::new("🖱 Input")
|
||||||
.default_open(false)
|
.default_open(false)
|
||||||
.show(ui, |ui| {
|
.show(ui, |ui| {
|
||||||
ui.horizontal(|ui| {
|
|
||||||
ui.label("Line scroll speed");
|
|
||||||
ui.add(crate::DragValue::new(line_scroll_speed).range(0.0..=f32::INFINITY))
|
|
||||||
.on_hover_text(
|
|
||||||
"How many lines to scroll with each tick of the mouse wheel",
|
|
||||||
);
|
|
||||||
});
|
|
||||||
ui.horizontal(|ui| {
|
|
||||||
ui.label("Scroll zoom speed");
|
|
||||||
ui.add(
|
|
||||||
crate::DragValue::new(scroll_zoom_speed)
|
|
||||||
.range(0.0..=f32::INFINITY)
|
|
||||||
.speed(0.001),
|
|
||||||
)
|
|
||||||
.on_hover_text("How fast to zoom with ctrl/cmd + scroll");
|
|
||||||
});
|
|
||||||
input_options.ui(ui);
|
input_options.ui(ui);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue