Skip to content

Commit 64c30d2

Browse files
Add generic range mapping functions for improved reusability
1 parent dbdb982 commit 64c30d2

File tree

1 file changed

+38
-28
lines changed

1 file changed

+38
-28
lines changed

editor/src/messages/dialog/preferences_dialog/preferences_dialog_message_handler.rs

+38-28
Original file line numberDiff line numberDiff line change
@@ -272,41 +272,51 @@ impl PreferencesDialogMessageHandler {
272272
});
273273
}
274274
}
275-
// Map the actual rate value to display value (1-100)
276-
fn map_zoom_rate_to_display(rate: f64) -> f64 {
277-
let value = if rate <= 0.0001 {
278-
1.0
279-
} else if rate >= 0.05 {
280-
100.0
275+
// Function to map a value from one range to another using logarithmic scaling
276+
pub fn map_log_range(value: f64, from_min: f64, from_max: f64, to_min: f64, to_max: f64) -> f64 {
277+
if value <= from_min {
278+
to_min
279+
} else if value >= from_max {
280+
to_max
281281
} else {
282-
// Calculate the logarithmic position between 0.0001 and 0.05
283-
let log_min = 0.0001_f64.ln();
284-
let log_max = 0.05_f64.ln();
285-
let log_val = rate.ln();
282+
// Calculate the logarithmic position between from_min and from_max
283+
let log_min = from_min.ln();
284+
let log_max = from_max.ln();
285+
let log_val = value.ln();
286286

287-
// Map to 1-100 range
287+
// Map to to_min-to_max range
288288
let normalized = (log_val - log_min) / (log_max - log_min);
289-
1.0 + 99.0 * normalized
290-
};
291-
292-
value.round()
289+
to_min + (to_max - to_min) * normalized
290+
}
293291
}
294292

295-
// Map the display value (1-100) back to the actual rate value
296-
fn map_display_to_zoom_rate(display: f64) -> f64 {
297-
if display <= 1.0 {
298-
0.0001
299-
} else if display >= 100.0 {
300-
0.05
293+
// Function to map a value from one range to another using linear scaling
294+
pub fn map_linear_range(value: f64, from_min: f64, from_max: f64, to_min: f64, to_max: f64) -> f64 {
295+
if value <= from_min {
296+
to_min
297+
} else if value >= from_max {
298+
to_max
301299
} else {
302300
// Normalize to 0-1 range
303-
let normalized = (display - 1.0) / 99.0;
301+
let normalized = (value - from_min) / (from_max - from_min);
304302

305-
let log_min = 0.0001_f64.ln();
306-
let log_max = 0.05_f64.ln();
307-
let log_val = log_min + normalized * (log_max - log_min);
308-
309-
// Convert back to actual value
310-
log_val.exp()
303+
// Map to to_min-to_max range
304+
to_min + normalized * (to_max - to_min)
311305
}
312306
}
307+
308+
// Map the actual zoom rate value to display value (1-100)
309+
fn map_zoom_rate_to_display(rate: f64) -> f64 {
310+
map_log_range(rate, 0.0001, 0.05, 1.0, 100.0).round()
311+
}
312+
313+
// Map the display value (1-100) back to the actual zoom rate value
314+
fn map_display_to_zoom_rate(display: f64) -> f64 {
315+
let normalized = map_linear_range(display, 1.0, 100.0, 0.0, 1.0);
316+
317+
let log_min = 0.0001_f64.ln();
318+
let log_max = 0.05_f64.ln();
319+
let log_val = log_min + normalized * (log_max - log_min);
320+
321+
log_val.exp()
322+
}

0 commit comments

Comments
 (0)