MCPcopy Create free account
hub / github.com/Moosync/Moosync / Slider

Function Slider

src/components/musicbar_components.rs:412–528  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

410#[tracing::instrument(level = "debug", skip())]
411#[component]
412pub fn Slider() -> impl IntoView {
413 let player_store = use_context::<RwSignal<PlayerStore>>().unwrap();
414 let slider_process: NodeRef<html::Div> = NodeRef::new();
415 let offset_width = RwSignal::new(0f64);
416
417 slider_process.on_load(move |s| {
418 offset_width.set(s.offset_width() as f64);
419 });
420 let (current_time, set_current_time) = create_slice(
421 player_store,
422 |p| p.get_current_time(),
423 move |p, val: f64| {
424 p.force_seek_percent(
425 val / slider_process.get_untracked().unwrap().offset_width() as f64,
426 )
427 },
428 );
429
430 let current_song = create_read_slice(player_store, |p| p.get_current_song());
431 let total_time = RwSignal::new(1f64);
432
433 let is_dragging = RwSignal::new(false);
434
435 let display_time = RwSignal::new(0f64);
436 Effect::new(move || {
437 if !is_dragging.get() {
438 let current_time = current_time.get();
439 display_time.set(current_time);
440 }
441 });
442
443 let _ = use_event_listener(use_document(), mouseup, move |evt| {
444 if is_dragging.get_untracked() {
445 tracing::debug!("dragging stop {}", evt.client_x());
446 set_current_time.set(evt.client_x() as f64);
447 is_dragging.set(false);
448 }
449 });
450
451 let _ = use_event_listener(use_document(), mouseup, move |evt| {
452 if is_dragging.get_untracked() {
453 tracing::debug!("dragging stop {}", evt.client_x());
454 set_current_time.set(evt.client_x() as f64);
455 is_dragging.set(false);
456 }
457 });
458
459 let _ = use_event_listener(use_document(), mousemove, move |evt| {
460 if is_dragging.get() {
461 tracing::info!(
462 "client x: {}, process width: {}",
463 evt.offset_x(),
464 slider_process.get_untracked().unwrap().offset_width(),
465 );
466 display_time.set(
467 (evt.offset_x() as f64
468 / slider_process.get_untracked().unwrap().offset_width() as f64)
469 * total_time.get(),

Callers

nothing calls this directly

Calls 5

setMethod · 0.80
get_current_timeMethod · 0.80
force_seek_percentMethod · 0.80
get_current_songMethod · 0.80
getMethod · 0.80

Tested by

no test coverage detected