@@ -272,41 +272,51 @@ impl PreferencesDialogMessageHandler {
272
272
} ) ;
273
273
}
274
274
}
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
281
281
} 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 ( ) ;
286
286
287
- // Map to 1-100 range
287
+ // Map to to_min-to_max range
288
288
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
+ }
293
291
}
294
292
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
301
299
} else {
302
300
// Normalize to 0-1 range
303
- let normalized = ( display - 1.0 ) / 99.0 ;
301
+ let normalized = ( value - from_min ) / ( from_max - from_min ) ;
304
302
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)
311
305
}
312
306
}
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