Kernel: TTY buffer is resized on font size change
Shell also has better line wrapping. You still can't visually go back to previous line, but atleas we now write from the beginning of the line
This commit is contained in:
		
							parent
							
								
									61ac9833be
								
							
						
					
					
						commit
						4ffc69a6e4
					
				|  | @ -606,7 +606,7 @@ argument_done: | |||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		TTY_PRINT("\e[{}G", m_prompt_length + m_cursor_pos.col + 1); | ||||
| 		TTY_PRINT("\e[{}G", (m_prompt_length + m_cursor_pos.col) % m_tty->width() + 1); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -55,6 +55,28 @@ void TTY::set_cursor_position(uint32_t x, uint32_t y) | |||
| void TTY::set_font(const Kernel::Font& font) | ||||
| { | ||||
| 	m_terminal_driver->set_font(font); | ||||
| 
 | ||||
| 	uint32_t new_width = m_terminal_driver->width(); | ||||
| 	uint32_t new_height = m_terminal_driver->height(); | ||||
| 
 | ||||
| 	if (m_width != new_width || m_height != new_height) | ||||
| 	{ | ||||
| 		Cell* new_buffer = new Cell[new_width * new_height]; | ||||
| 		ASSERT(new_buffer); | ||||
| 
 | ||||
| 		for (uint32_t i = 0; i < new_width * m_height; i++) | ||||
| 			new_buffer[i] = { .foreground = m_foreground, .background = m_background, .character = ' ' }; | ||||
| 
 | ||||
| 		for (uint32_t y = 0; y < BAN::Math::min<uint32_t>(m_height, new_height); y++) | ||||
| 			for (uint32_t x = 0; x < BAN::Math::min<uint32_t>(m_width, new_width); x++) | ||||
| 				new_buffer[y * new_width + x] = m_buffer[y * m_width + x]; | ||||
| 
 | ||||
| 		delete[] m_buffer; | ||||
| 		m_buffer = new_buffer; | ||||
| 		m_width = new_width; | ||||
| 		m_height = new_height; | ||||
| 	} | ||||
| 	 | ||||
| 	for (uint32_t y = 0; y < m_height; y++) | ||||
| 		for (uint32_t x = 0; x < m_width; x++) | ||||
| 			render_from_buffer(x, y); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue