[Fix] Correct terminal auto-scroll
This commit is contained in:
		
							parent
							
								
									caa482a7a0
								
							
						
					
					
						commit
						8d9cd9a777
					
				@ -75,16 +75,6 @@ void Terminal::_on_ret_press(void) {
 | 
			
		||||
 | 
			
		||||
  _history.push_back(_prompt + "> " + command);
 | 
			
		||||
  _network->send(command);
 | 
			
		||||
 | 
			
		||||
  /* TODO: Ugly hack. Refactor to pass window height
 | 
			
		||||
   * We need the window height to know if we should
 | 
			
		||||
   * auto-scroll, but we don't have it here.
 | 
			
		||||
   * Assume the height of 500 for now.
 | 
			
		||||
   */
 | 
			
		||||
  int visible_lines = (500-5.0f)/20.0f; /* Subtract padding. */
 | 
			
		||||
  if((int)_history.size()+1 > visible_lines) {
 | 
			
		||||
    _scroll_offset = (_history.size()+1) - visible_lines+1;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Terminal::handle_input(SDL_Event* event, int window_x, int window_y, int window_gl_y) {
 | 
			
		||||
@ -117,6 +107,15 @@ void Terminal::render(const RenderContext& context, int x, int y_screen, int y_g
 | 
			
		||||
  float line_height = 20.0f;
 | 
			
		||||
  float padding     = 5.0f;
 | 
			
		||||
 | 
			
		||||
  /*
 | 
			
		||||
   * Auto-scroll to bottom if the user has not manually scrolled up.
 | 
			
		||||
   * Ensures input line is always visible after submitting a command.
 | 
			
		||||
   */
 | 
			
		||||
  int visible_lines = (height-padding) / line_height;
 | 
			
		||||
  int max_scroll_offset = (_history.size() + 1) - visible_lines;
 | 
			
		||||
  if(max_scroll_offset < 0) max_scroll_offset = 0;
 | 
			
		||||
  if(_scroll_offset >= max_scroll_offset - 1) _scroll_offset = max_scroll_offset;
 | 
			
		||||
 | 
			
		||||
  context.ui_renderer->begin_text();
 | 
			
		||||
 | 
			
		||||
  /* Enable scissor test to clip rendering to the window content area. */
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user