Skip to content

Commit

Permalink
Added preference for zoom wheel rate adjustment
Browse files Browse the repository at this point in the history
  • Loading branch information
Dhanraj30 committed Mar 9, 2025
1 parent 85fac63 commit a540e01
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,22 @@ impl PreferencesDialogMessageHandler {
TextLabel::new("Zoom with Scroll").table_align(true).tooltip(zoom_with_scroll_tooltip).widget_holder(),
];

let zoom_rate_tooltip = "Adjust the zoom speed when using the scroll wheel.";
let zoom_rate_input = vec![
Separator::new(SeparatorType::Unrelated).widget_holder(),
NumberInput::new(preferences.zoom_wheel_rate.unwrap_or(0.005)) // Default fallback
.label("Zoom Wheel Rate")
.unit("x")
.tooltip(zoom_rate_tooltip)
.min(0.001)
.max(0.1)
.on_update(|number_input: &NumberInput| {
PreferencesMessage::ZoomWheelRate { rate: number_input.value }.into()
})
.widget_holder(),
TextLabel::new("Zoom Wheel Rate").table_align(true).tooltip(zoom_rate_tooltip).widget_holder(),
];

// =======
// EDITING
// =======
Expand Down Expand Up @@ -185,6 +201,7 @@ impl PreferencesDialogMessageHandler {
Layout::WidgetLayout(WidgetLayout::new(vec![
LayoutGroup::Row { widgets: navigation_header },
LayoutGroup::Row { widgets: zoom_with_scroll },
LayoutGroup::Row { widgets: zoom_rate_input },
LayoutGroup::Row { widgets: editing_header },
LayoutGroup::Row { widgets: selection_label },
LayoutGroup::Row { widgets: selection_mode },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,8 @@ impl MessageHandler<NavigationMessage, NavigationMessageData<'_>> for Navigation
}
NavigationMessage::CanvasZoomMouseWheel => {
let scroll = ipp.mouse.scroll_delta.scroll_delta();
let mut zoom_factor = 1. + scroll.abs() * VIEWPORT_ZOOM_WHEEL_RATE;
let zoom_rate = preferences.zoom_wheel_rate.unwrap_or(VIEWPORT_ZOOM_WHEEL_RATE);
let mut zoom_factor = 1. + scroll.abs() * zoom_rate;
if ipp.mouse.scroll_delta.y > 0. {
zoom_factor = 1. / zoom_factor
}
Expand Down
1 change: 1 addition & 0 deletions editor/src/messages/preferences/preferences_message.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,5 @@ pub enum PreferencesMessage {
GraphWireStyle { style: GraphWireStyle },
// ImaginateRefreshFrequency { seconds: f64 },
// ImaginateServerHostname { hostname: String },
ZoomWheelRate { rate: f64 },
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ pub struct PreferencesMessageHandler {
pub use_vello: bool,
pub vector_meshes: bool,
pub graph_wire_style: GraphWireStyle,
pub zoom_wheel_rate: Option<f64>,
}

impl PreferencesMessageHandler {
Expand Down Expand Up @@ -41,6 +42,7 @@ impl Default for PreferencesMessageHandler {
} = Default::default();

Self {
zoom_wheel_rate: Some(VIEWPORT_ZOOM_WHEEL_RATE),
imaginate_server_hostname: host_name,
imaginate_refresh_frequency: 1.,
selection_mode: SelectionMode::Touched,
Expand All @@ -55,6 +57,13 @@ impl Default for PreferencesMessageHandler {
impl MessageHandler<PreferencesMessage, ()> for PreferencesMessageHandler {
fn process_message(&mut self, message: PreferencesMessage, responses: &mut VecDeque<Message>, _data: ()) {
match message {
//zoom rate
PreferencesMessage::ZoomWheelRate { rate } => {
self.zoom_wheel_rate = Some(rate);
// Store in preferences (assuming a Preferences struct exists)
preferences.zoom_wheel_rate = Some(rate);
}
_ => {}
// Management messages
PreferencesMessage::Load { preferences } => {
if let Ok(deserialized_preferences) = serde_json::from_str::<PreferencesMessageHandler>(&preferences) {
Expand Down

0 comments on commit a540e01

Please sign in to comment.