remove PieceTable
This commit is contained in:
1 parent
65468bd2e5
commit
fbca1f995a
7 files changed
+13
-985
No files matched your search
+7
-118
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
Reference in new issue
Block a user