From d8fcbcd428c47d1de02b2395fc01ada094eeddcd Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sun, 10 Jul 2016 17:24:00 -0400 Subject: [PATCH] render a file's contents --- src/gui/Window.cc | 30 +++++++++++++++++++++--------- src/gui/Window.h | 5 ++++- src/jes.cc | 8 +++++++- 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/gui/Window.cc b/src/gui/Window.cc index e294f04..4999f63 100644 --- a/src/gui/Window.cc +++ b/src/gui/Window.cc @@ -65,7 +65,7 @@ static bool Initialize_OpenGL() * @retval true The Window was created successfully. * @retval false There was an error while creating the Window. */ -bool Window::create() +bool Window::create(std::shared_ptr buffer) { if (!Initialize_SDL()) { @@ -110,6 +110,8 @@ bool Window::create() m_programs.text->set_texture(0); m_programs.text->set_color(1.0, 1.0, 1.0, 1.0); + m_buffer = buffer; + resize(); return true; @@ -179,16 +181,26 @@ void Window::redraw() glClear(GL_COLOR_BUFFER_BIT); m_programs.text->use(); - static const char msg[] = "Welcome to " APPNAME " pre-pre-pre-alpha!!"; + int advance = m_font.get_advance(); - int x = 0; - int y = m_height - FONT_SIZE; - for (int i = 0, len = strlen(msg); i < len; i++) + int line_height = m_font.get_line_height(); + int y = m_height - line_height; + for (auto line = m_buffer->cbegin(); line != m_buffer->cend(); line++) { - m_programs.text->set_position(x, y); - auto g = m_font.get_glyph(msg[i]); - g->render(); - x += advance; + int x = 0; + for (int i = 0, len = (*line)->size(); i < len; i++) + { + uint8_t c = (**line)[i]; + auto g = m_font.get_glyph(c); + m_programs.text->set_position(x, y); + g->render(); + x += advance; + } + y -= line_height; + if (y + line_height < 0) + { + break; + } } SDL_GL_SwapWindow(m_window); diff --git a/src/gui/Window.h b/src/gui/Window.h index 135d4e1..9dd482a 100644 --- a/src/gui/Window.h +++ b/src/gui/Window.h @@ -4,11 +4,12 @@ #include #include "TextProgram.h" #include "Font.h" +#include "Buffer.h" class Window { public: - bool create(); + bool create(std::shared_ptr buffer); void run_event_loop(); protected: @@ -26,6 +27,8 @@ protected: } m_programs; Font m_font; + + std::shared_ptr m_buffer; }; #endif diff --git a/src/jes.cc b/src/jes.cc index a93b649..2160bdc 100644 --- a/src/jes.cc +++ b/src/jes.cc @@ -1,13 +1,19 @@ #include #include "Window.h" #include "Runtime.h" +#include int main(int argc, char * argv[]) { Runtime::init(argv[0], APPNAME); + std::shared_ptr b = std::make_shared(); + if (argc > 1) + { + b->load_from_file(argv[1]); + } Window w; - if (!w.create()) + if (!w.create(b)) { std::cerr << "Error creating window." << std::endl; return 1;