Wrap lines

This commit is contained in:
Josh Holtrop 2016-07-24 20:35:01 -04:00
parent 10a0b33dbe
commit 31422709e8
2 changed files with 19 additions and 3 deletions

View File

@ -247,6 +247,9 @@ void Window::resize()
glViewport(0, 0, m_width, m_height);
m_programs.text->use();
m_programs.text->set_viewport_size(m_width, m_height);
m_chars_per_line = m_width / m_font.get_advance();
if (m_chars_per_line < 1)
m_chars_per_line = 1;
}
void Window::redraw()
@ -258,21 +261,33 @@ void Window::redraw()
int advance = m_font.get_advance();
int line_height = m_font.get_line_height();
int x = 0;
int y = m_height - line_height;
for (PieceTable::PieceDescriptor * pd = m_start_piece;
pd != m_buffer->piece_table->end_descriptor;
pd = pd->next)
{
int x = 0;
for (int i = 0, len = pd->length; i < len; i++)
{
uint8_t c = pd->start[i];
auto g = m_font.get_glyph(c);
m_programs.text->set_position(x, y);
g->render();
x += advance;
if ((i + 1) % m_chars_per_line == 0)
{
y -= line_height;
x = 0;
}
else
{
x += advance;
}
}
if (pd->eol())
{
y -= line_height;
x = 0;
}
y -= line_height;
if (y + line_height < 0)
{
break;

View File

@ -29,6 +29,7 @@ protected:
} m_programs;
Font m_font;
int m_chars_per_line;
std::shared_ptr<Buffer> m_buffer;