remove PieceTable

This commit is contained in:
josh committed 2016-11-01 21:44:01 -04:00
1 parent 65468bd2e5
commit fbca1f995a
7 files changed
+13 -985

No files matched your search

+7 -118
View File
@@ -144,10 +144,9 @@ bool Window::create(std::shared_ptr<Buffer> buffer)
glVertexAttribPointer(0, 2, GL_INT, GL_FALSE, 0, 0);
m_buffer = buffer;
m_cursor = m_buffer->piece_table->add_cursor();
m_cursor_row = 0;
m_scroll_offset = 5;
m_target_column = m_cursor->column;
m_target_column = 0u; /* TODO: fix */
glClearColor (0.0, 0.0, 0.0, 0.0);
@@ -250,6 +249,7 @@ void Window::handle_keysym(uint32_t keysym)
void Window::handle_keyval(uint32_t keyval)
{
#if 0
if (m_buffer->piece_table->in_insert_mode())
{
if (keyval == '\033')
@@ -263,6 +263,7 @@ void Window::handle_keyval(uint32_t keyval)
redraw();
}
else
#endif
{
switch (keyval)
{
@@ -287,27 +288,13 @@ void Window::handle_keyval(uint32_t keyval)
case 'l':
cursor_move(CURSOR_RIGHT);
break;
case 'p':
insertion_test();
break;
case 'u':
m_buffer->piece_table->undo();
redraw();
break;
case 'i':
m_buffer->piece_table->begin_insert(*m_cursor, true);
redraw();
break;
case 'a':
m_buffer->piece_table->begin_insert(*m_cursor, false);
redraw();
break;
}
}
}
void Window::cursor_move(int which)
{
#if 0
bool moved = false;
int current_row_offset = m_cursor->column / m_columns;
int row_offset = 0;
@@ -374,6 +361,7 @@ void Window::cursor_move(int which)
update_cursor_row(m_cursor_row + row_offset);
redraw();
}
#endif
}
void Window::update_cursor_row(int cursor_row)
@@ -381,103 +369,8 @@ void Window::update_cursor_row(int cursor_row)
m_cursor_row = std::max(m_scroll_offset, std::min(m_rows - m_scroll_offset - 1, cursor_row));
}
std::pair<int, PieceTable::Cursor> Window::calculate_start_position()
{
m_cursor_row = std::min(m_cursor_row, m_rows - 1);
int row = m_cursor_row - m_cursor->column / m_columns;
PieceTable::Cursor cursor = *m_cursor;
cursor.go_start_of_line();
while (row > 0)
{
if (cursor.check_go_up(1, 0u))
{
PieceTable::Cursor c = cursor;
c.go_end_of_line(false);
row -= c.column / m_columns + 1;
}
else
{
m_cursor_row -= row;
row = 0;
}
}
return std::pair<int, PieceTable::Cursor>(row, cursor);
}
void Window::draw_buffer()
{
auto start_position = calculate_start_position();
int row = start_position.first;
PieceTable::Cursor cursor = start_position.second;
int last_vertical_crosshair_row = -1;
int crosshair_row_offset = m_cursor->column / m_columns;
int crosshair_screen_column = m_cursor->column % m_columns;
for (;;)
{
if ((last_vertical_crosshair_row < row) &&
(cursor.column >= m_cursor->column))
{
int crosshair_screen_row = row + crosshair_row_offset;
if ((crosshair_screen_row >= 0) &&
(crosshair_screen_row < m_rows))
{
draw_crosshair(crosshair_screen_column, crosshair_screen_row);
}
last_vertical_crosshair_row = row;
}
int row_offset = cursor.column / m_columns;
int screen_row = row + row_offset;
if (screen_row >= m_rows)
break;
int screen_column = cursor.column % m_columns;
if (screen_row >= 0)
{
if (cursor.line == m_cursor->line)
draw_crosshair(screen_column, screen_row);
if (cursor == *m_cursor)
draw_cursor(screen_column, screen_row, m_buffer->piece_table->in_insert_mode());
uint32_t character = *cursor;
if ((character != 0xFFFFFFFFu) &&
(character != ' ') &&
(character != '\t') &&
(character != '\n'))
draw_buffer_character(screen_column, screen_row, character);
}
bool eol = !cursor.check_go_right(1, true);
bool draw_insert_mode_cursor = false;
if (!eol && *cursor == PieceTable::INTERNAL_EOL)
{
if ((cursor == *m_cursor) && m_buffer->piece_table->in_insert_mode())
{
row_offset = cursor.column / m_columns;
screen_row = row + row_offset;
screen_column = cursor.column % m_columns;
draw_insert_mode_cursor = true;
}
eol = true;
}
if (eol)
{
bool last_row = !cursor.check_go_down(1, 0);
if (last_vertical_crosshair_row < row)
{
int crosshair_screen_row = row + crosshair_row_offset;
if (crosshair_screen_row == screen_row)
{
draw_crosshair(crosshair_screen_column, crosshair_screen_row);
}
last_vertical_crosshair_row = row;
}
if (draw_insert_mode_cursor)
{
draw_cursor(screen_column, screen_row, true);
}
if (last_row)
break;
row = screen_row + 1;
}
}
}
void Window::draw_buffer_character(int screen_column, int screen_row, uint32_t character)
@@ -562,6 +455,7 @@ void Window::draw_status_bar()
{
draw_rect(0, m_font.get_line_height(), m_width, 1, 0.5, 0.5, 0.5, 1.0);
draw_rect(0, 0, m_width, m_font.get_line_height(), 0.0, 0.0, 0.0, 1.0);
#if 0
char cursor_position[20];
sprintf(cursor_position, "%d, %d", m_cursor->line + 1, m_cursor->column + 1u);
int cursor_position_length = strlen(cursor_position);
@@ -571,12 +465,7 @@ void Window::draw_status_bar()
draw_character(x, 0, cursor_position[i]);
x += m_font.get_advance();
}
}
void Window::insertion_test()
{
m_buffer->piece_table->insertion_test(*m_cursor);
redraw();
#endif
}
uint32_t Window::get_keyval(SDL_Keycode keysym)
-4
View File
@@ -44,14 +44,12 @@ protected:
void handle_keysym(uint32_t keysym);
void handle_keyval(uint32_t keyval);
void cursor_move(int which);
std::pair<int, PieceTable::Cursor> calculate_start_position();
void draw_buffer();
void draw_buffer_character(int screen_column, int screen_row, uint32_t character);
void draw_character(int x, int y, uint32_t character);
void update_cursor_row(int cursor_row);
void draw_rect(int x, int y, int width, int height, float r, float g, float b, float a);
void draw_status_bar();
void insertion_test();
uint32_t get_keyval(SDL_Keycode keysym);
uint32_t get_shifted(uint32_t keysym);
@@ -80,8 +78,6 @@ protected:
std::shared_ptr<glcxx::Array> m_rect_array;
std::shared_ptr<glcxx::Buffer> m_rect_buffer;
std::shared_ptr<PieceTable::Cursor> m_cursor;
Uint16 m_keymod;
};