Beautiful scrollbars
This commit is contained in:
		
							parent
							
								
									ce8b4fae68
								
							
						
					
					
						commit
						e3d891c522
					
				| @ -1,6 +1,7 @@ | |||||||
| #!/usr/bin/env bash | #!/usr/bin/env bash | ||||||
| 
 | 
 | ||||||
|  | echo -en "0" | ||||||
| for i in `seq 1 100`; do | for i in `seq 1 100`; do | ||||||
|     sleep 0.05s |     sleep 0.005s | ||||||
|     echo -en "\n$i" |     echo -en "\n$i" | ||||||
| done | done | ||||||
|  | |||||||
| @ -99,7 +99,7 @@ impl<W: Write> Multiview<W> { | |||||||
|     /// Renders the (x, y) tile.
 |     /// Renders the (x, y) tile.
 | ||||||
|     pub fn render_tile_content(&mut self, (i, j): (u16, u16)) -> String { |     pub fn render_tile_content(&mut self, (i, j): (u16, u16)) -> String { | ||||||
|         let tile = self.tile((i, j)); |         let tile = self.tile((i, j)); | ||||||
|         tile.render_content() |         tile.render_content(self.selected == (i, j)) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /// Renders all the tiles of the multiview.
 |     /// Renders all the tiles of the multiview.
 | ||||||
|  | |||||||
							
								
								
									
										47
									
								
								src/tile.rs
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								src/tile.rs
									
									
									
									
									
								
							| @ -346,7 +346,7 @@ impl Tile { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /// Renders the content of the tile.
 |     /// Renders the content of the tile.
 | ||||||
|     pub fn render_content(&self) -> String { |     pub fn render_content(&self, selected: bool) -> String { | ||||||
|         const DELETE_CHAR: char = ' '; |         const DELETE_CHAR: char = ' '; | ||||||
| 
 | 
 | ||||||
|         let (x, y) = self.inner_position; |         let (x, y) = self.inner_position; | ||||||
| @ -509,6 +509,51 @@ impl Tile { | |||||||
|             buffer.push(spaces); |             buffer.push(spaces); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         // Render scrollbar,thanks @gdamms
 | ||||||
|  |         // I have no idea what this code does, I copied/pasted it from gdamms, and then modified
 | ||||||
|  |         // some stuff so that it would look right
 | ||||||
|  |         if last_line_index > h { | ||||||
|  |             let mut subbuffer = vec![]; | ||||||
|  |             subbuffer.push(format!( | ||||||
|  |                 "{}{}{}{}", | ||||||
|  |                 style::Reset, | ||||||
|  |                 if selected { color::Green.fg_str() } else { "" }, | ||||||
|  |                 cursor::Goto(x + w + 1, y), | ||||||
|  |                 "▲" | ||||||
|  |             )); | ||||||
|  | 
 | ||||||
|  |             let bar_portion = h as f32 / self.stdout.len() as f32; | ||||||
|  |             let bar_nb = f32::max(1.0, (bar_portion * (h) as f32).round()) as u16; | ||||||
|  |             let max_scroll = self.stdout.len() as isize - h as isize - 1; | ||||||
|  | 
 | ||||||
|  |             let (scroll_nb_bottom, scroll_nb_top) = if self.scroll > max_scroll / 2 { | ||||||
|  |                 let scroll_nb_bottom = (self.stdout.len() as isize - self.scroll) as u16 - h; | ||||||
|  |                 let scroll_nb_bottom = scroll_nb_bottom as f32 / self.stdout.len() as f32; | ||||||
|  |                 let scroll_nb_bottom = (scroll_nb_bottom * (h as f32)).ceil() as u16; | ||||||
|  |                 let scroll_nb_top = h - bar_nb - scroll_nb_bottom; | ||||||
|  |                 (scroll_nb_bottom, scroll_nb_top) | ||||||
|  |             } else { | ||||||
|  |                 let scroll_nb_top = self.scroll as f32 / self.stdout.len() as f32; | ||||||
|  |                 let scroll_nb_top = (scroll_nb_top * (h) as f32).ceil() as u16; | ||||||
|  |                 let scroll_nb_bottom = h - bar_nb - scroll_nb_top; | ||||||
|  |                 (scroll_nb_bottom, scroll_nb_top) | ||||||
|  |             }; | ||||||
|  | 
 | ||||||
|  |             for i in 1..=scroll_nb_top { | ||||||
|  |                 subbuffer.push(format!("{}{}", cursor::Goto(x + w + 1, y + i), "│")); | ||||||
|  |             } | ||||||
|  |             for i in scroll_nb_top + 1..=scroll_nb_top + bar_nb { | ||||||
|  |                 subbuffer.push(format!("{}{}", cursor::Goto(x + w + 1, y + i), "█")); | ||||||
|  |             } | ||||||
|  |             for i in scroll_nb_top + bar_nb + 1..=scroll_nb_top + bar_nb + scroll_nb_bottom { | ||||||
|  |                 subbuffer.push(format!("{}{}", cursor::Goto(x + w + 1, y + i), "│")); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             subbuffer.push(format!("{}{}", cursor::Goto(x + w + 1, y + h), "▼")); | ||||||
|  | 
 | ||||||
|  |             buffer.push(subbuffer.join("")); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         buffer.push(format!("{}", style::Reset)); |         buffer.push(format!("{}", style::Reset)); | ||||||
|         buffer.join("") |         buffer.join("") | ||||||
|     } |     } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user