diff --git a/src/core/Buffer.h b/src/core/Buffer.h index 97bea65..0574f12 100644 --- a/src/core/Buffer.h +++ b/src/core/Buffer.h @@ -23,6 +23,8 @@ public: auto crbegin() const { return m_lines.crbegin(); } auto crend() const { return m_lines.crend(); } + int get_num_lines() { return m_lines.size(); } + protected: LinesType m_lines; /* TODO: delete this */ diff --git a/src/gui/Window.cc b/src/gui/Window.cc index 4999f63..f35760b 100644 --- a/src/gui/Window.cc +++ b/src/gui/Window.cc @@ -111,6 +111,7 @@ bool Window::create(std::shared_ptr buffer) m_programs.text->set_color(1.0, 1.0, 1.0, 1.0); m_buffer = buffer; + m_line = 0; resize(); @@ -149,6 +150,20 @@ void Window::handle_event(SDL_Event & event) case SDLK_ESCAPE: m_exit_requested = true; break; + case SDLK_j: + if (m_line < m_buffer->get_num_lines() - 1) + { + m_line++; + redraw(); + } + break; + case SDLK_k: + if (m_line > 0) + { + m_line--; + redraw(); + } + break; } break; @@ -185,8 +200,13 @@ void Window::redraw() int advance = m_font.get_advance(); int line_height = m_font.get_line_height(); int y = m_height - line_height; + int line_number = 0; for (auto line = m_buffer->cbegin(); line != m_buffer->cend(); line++) { + if (line_number++ < m_line) + { + continue; + } int x = 0; for (int i = 0, len = (*line)->size(); i < len; i++) { diff --git a/src/gui/Window.h b/src/gui/Window.h index 9dd482a..fe20f0e 100644 --- a/src/gui/Window.h +++ b/src/gui/Window.h @@ -29,6 +29,8 @@ protected: Font m_font; std::shared_ptr m_buffer; + + int m_line; }; #endif