diff options
author | ClementTsang <clementjhtsang@gmail.com> | 2020-01-11 16:28:21 -0500 |
---|---|---|
committer | ClementTsang <clementjhtsang@gmail.com> | 2020-01-11 16:28:21 -0500 |
commit | 4e54c2c25d6bc3c168a09fbeb8c1c6186196159f (patch) | |
tree | 469407b7a493d5cf0e6c3d6d0c91d54d708e989a | |
parent | 86c8ce68e75cd5289a2210efa770d2a94a237700 (diff) |
Rewrote scroll to be a bit more simple and less buggy
-rw-r--r-- | src/canvas.rs | 64 |
1 files changed, 31 insertions, 33 deletions
diff --git a/src/canvas.rs b/src/canvas.rs index c2ca1836..04df6dcb 100644 --- a/src/canvas.rs +++ b/src/canvas.rs @@ -403,12 +403,12 @@ fn draw_cpu_legend<B: backend::Backend>( ) { let cpu_data: &[ConvertedCpuData] = &(app_state.canvas_data.cpu_data); - let num_rows = i64::from(draw_loc.height) - 4; + let num_rows = i64::from(draw_loc.height) - 5; let start_position = get_start_position( num_rows, &(app_state.scroll_direction), &mut app_state.previous_cpu_table_position, - &mut app_state.currently_selected_cpu_table_position, + app_state.currently_selected_cpu_table_position, ); let sliced_cpu_data = (&cpu_data[start_position as usize..]).to_vec(); @@ -665,12 +665,12 @@ fn draw_temp_table<B: backend::Backend>( ) { let temp_sensor_data: &[Vec<String>] = &(app_state.canvas_data.temp_sensor_data); - let num_rows = i64::from(draw_loc.height) - 4; + let num_rows = i64::from(draw_loc.height) - 5; let start_position = get_start_position( num_rows, &(app_state.scroll_direction), &mut app_state.previous_temp_position, - &mut app_state.currently_selected_temperature_position, + app_state.currently_selected_temperature_position, ); let sliced_vec: Vec<Vec<String>> = (&temp_sensor_data[start_position as usize..]).to_vec(); @@ -730,12 +730,12 @@ fn draw_disk_table<B: backend::Backend>( f: &mut Frame<B>, app_state: &mut app::App, draw_loc: Rect, ) { let disk_data: &[Vec<String>] = &(app_state.canvas_data.disk_data); - let num_rows = i64::from(draw_loc.height) - 4; + let num_rows = i64::from(draw_loc.height) - 5; let start_position = get_start_position( num_rows, &(app_state.scroll_direction), &mut app_state.previous_disk_position, - &mut app_state.currently_selected_disk_position, + app_state.currently_selected_disk_position, ); let sliced_vec: Vec<Vec<String>> = (&disk_data[start_position as usize..]).to_vec(); @@ -811,13 +811,13 @@ fn draw_processes_table<B: backend::Backend>( // * Show/hide elements based on scroll position // As such, we use a process_counter to know when we've hit the process we've currently scrolled to. We also need to move the list - we can // do so by hiding some elements! - let num_rows = i64::from(draw_loc.height) - 4; + let num_rows = i64::from(draw_loc.height) - 5; let start_position = get_start_position( num_rows, &(app_state.scroll_direction), &mut app_state.previous_process_position, - &mut app_state.currently_selected_process_position, + app_state.currently_selected_process_position, ); let sliced_vec: Vec<ConvertedProcessData> = (&process_data[start_position as usize..]).to_vec(); @@ -971,40 +971,38 @@ fn get_variable_intrinsic_widths( } fn get_start_position( - num_rows: i64, scroll_direction: &app::ScrollDirection, previous_position: &mut i64, - currently_selected_position: &mut i64, + num_rows: i64, scroll_direction: &app::ScrollDirection, previously_scrolled_position: &mut i64, + currently_selected_position: i64, ) -> i64 { - debug!("Scroll direction: {:?}", scroll_direction); - debug!( - "Prev: {}, curr: {}", - *previous_position, *currently_selected_position - ); match scroll_direction { app::ScrollDirection::DOWN => { - if *currently_selected_position < num_rows { - 0 - } else if *currently_selected_position - num_rows < *previous_position { - *previous_position + // If, using previous_scrolled_position, we can see the element (so within that and + num_rows) + // just reuse the current previously scrolled position + + // Else if the current position past the last element visible in the list, omit + // until we can see that element + + // Else, if it is not past the last element visible, do not omit anything + + if currently_selected_position < *previously_scrolled_position + num_rows { + *previously_scrolled_position + } else if currently_selected_position >= num_rows { + *previously_scrolled_position = currently_selected_position - num_rows; + currently_selected_position - num_rows } else { - *previous_position = *currently_selected_position - num_rows + 1; - *previous_position + 0 } } app::ScrollDirection::UP => { - if *currently_selected_position == 0 { - *previous_position = 0; - return *previous_position; - } + // If it's past the first element, then show from that element downwards - if *currently_selected_position == *previous_position - 1 { - *previous_position = if *previous_position > 0 { - *previous_position - 1 - } else { - 0 - }; - *previous_position + // Else, don't change what our start position is from whatever it is set to! + + if currently_selected_position <= *previously_scrolled_position { + *previously_scrolled_position = currently_selected_position; + currently_selected_position } else { - *previous_position + *previously_scrolled_position } } } |