[Change] Render terminal conte in UI window.
This commit is contained in:
parent
a0c5eab1cf
commit
1bce18e993
@ -68,6 +68,7 @@ int main(int argc, char** argv) {
|
|||||||
|
|
||||||
/* Create terminal. */
|
/* Create terminal. */
|
||||||
Terminal* term = new Terminal();
|
Terminal* term = new Terminal();
|
||||||
|
test_window->set_content(term);
|
||||||
|
|
||||||
bool running = true;
|
bool running = true;
|
||||||
while(running) {
|
while(running) {
|
||||||
@ -83,8 +84,7 @@ int main(int argc, char** argv) {
|
|||||||
glClearColor(0.1f, 0.1f, 0.1, 1.0f);
|
glClearColor(0.1f, 0.1f, 0.1, 1.0f);
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
test_window->render(shape_renderer_instance, txt_render_instance);
|
test_window->render(shape_renderer_instance, txt_render_instance, SCREEN_HEIGHT);
|
||||||
term->render(txt_render_instance);
|
|
||||||
|
|
||||||
/* It's really odd to call it SwapWindow now, rather than SwapBuffer. */
|
/* It's really odd to call it SwapWindow now, rather than SwapBuffer. */
|
||||||
SDL_GL_SwapWindow(window);
|
SDL_GL_SwapWindow(window);
|
||||||
|
|||||||
@ -1,8 +1,9 @@
|
|||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
|
#include <SDL3/SDL.h>
|
||||||
|
#include <GL/glew.h>
|
||||||
|
|
||||||
#include "gfx/txt_renderer.h"
|
#include "gfx/txt_renderer.h"
|
||||||
#include "terminal.h"
|
#include "terminal.h"
|
||||||
#include <SDL3/SDL_events.h>
|
|
||||||
#include <SDL3/SDL_keycode.h>
|
|
||||||
|
|
||||||
Terminal::Terminal(void) {
|
Terminal::Terminal(void) {
|
||||||
/* Placeholder welcome message to history. */
|
/* Placeholder welcome message to history. */
|
||||||
@ -41,17 +42,27 @@ void Terminal::handle_input(SDL_Event* event) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Terminal::render(TextRenderer* renderer) {
|
void Terminal::render(TextRenderer* renderer, int x, int y, int width, int height) {
|
||||||
float white[] = { 1.0f, 1.0f, 1.0f };
|
float white[] = { 1.0f, 1.0f, 1.0f };
|
||||||
float green[] = { 0.2f, 1.0f, 0.2f };
|
float green[] = { 0.2f, 1.0f, 0.2f };
|
||||||
float line_height = 28.0f;
|
float line_height = 20.0f;
|
||||||
|
float padding = 5.0f;
|
||||||
|
|
||||||
|
/* Enable scissor test to clip rendering to the window content area. */
|
||||||
|
glEnable(GL_SCISSOR_TEST);
|
||||||
|
glScissor(x, y, width, height);
|
||||||
|
|
||||||
/* Draw history. */
|
/* Draw history. */
|
||||||
for(size_t i = 0; i < _history.size(); ++i) {
|
for(size_t i = 0; i < _history.size(); ++i) {
|
||||||
renderer->render_text(_history[i].c_str(), 25.0f, 720.0f-50.0f-(i*line_height), 1.0f, white);
|
float y_pos = (y+height) - padding - line_height - (i*line_height);
|
||||||
|
renderer->render_text(_history[i].c_str(), x+padding, y_pos, 1.0f, white);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Draw current input line. */
|
/* Draw current input line. */
|
||||||
std::string prompt = "> " + _input_buffer;
|
std::string prompt = "> " + _input_buffer;
|
||||||
renderer->render_text(prompt.c_str(), 25.0f, 720.0f-50.0f-(_history.size()*line_height), 1.0f, green);
|
float prompt_y_pos = (y+height) - padding - line_height - (_history.size()*line_height);
|
||||||
|
renderer->render_text(prompt.c_str(), x+padding, prompt_y_pos, 1.0f, green);
|
||||||
|
|
||||||
|
/* Disable scissor test. */
|
||||||
|
glDisable(GL_SCISSOR_TEST);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,7 +10,7 @@ public:
|
|||||||
Terminal(void);
|
Terminal(void);
|
||||||
|
|
||||||
void handle_input(SDL_Event* event);
|
void handle_input(SDL_Event* event);
|
||||||
void render(TextRenderer* renderer);
|
void render(TextRenderer* renderer, int x, int y, int width, int height);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void _on_ret_press(void);
|
void _on_ret_press(void);
|
||||||
|
|||||||
@ -6,11 +6,17 @@ UIWindow::UIWindow(const char* title, int x, int y, int width, int height) {
|
|||||||
_title = title;
|
_title = title;
|
||||||
_x = x;
|
_x = x;
|
||||||
_y = y;
|
_y = y;
|
||||||
_width = width;
|
_width = width;
|
||||||
_height = height;
|
_height = height;
|
||||||
|
_content = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UIWindow::render(ShapeRenderer* shape_renderer, TextRenderer* txt_renderer) {
|
void UIWindow::set_content(Terminal* term) {
|
||||||
|
_content = term;
|
||||||
|
}
|
||||||
|
|
||||||
|
void UIWindow::render(ShapeRenderer* shape_renderer, TextRenderer* txt_renderer,
|
||||||
|
int screen_height) {
|
||||||
int title_bar_height = 30;
|
int title_bar_height = 30;
|
||||||
|
|
||||||
/* Define colours. */
|
/* Define colours. */
|
||||||
@ -18,15 +24,24 @@ void UIWindow::render(ShapeRenderer* shape_renderer, TextRenderer* txt_renderer)
|
|||||||
float title_bar_color[] = { 0.15f, 0.15f, 0.2f };
|
float title_bar_color[] = { 0.15f, 0.15f, 0.2f };
|
||||||
float title_text_color[] = { 0.9f, 0.9f, 0.9f };
|
float title_text_color[] = { 0.9f, 0.9f, 0.9f };
|
||||||
|
|
||||||
|
/* Convert top-left coords to bottom-left for OpenGL. */
|
||||||
|
int y_gl = screen_height - _y - _height;
|
||||||
|
|
||||||
/* Draw main window frame/background. */
|
/* Draw main window frame/background. */
|
||||||
shape_renderer->draw_rect(_x, _y, _width, _height, frame_color);
|
shape_renderer->draw_rect(_x, y_gl, _width, _height, frame_color);
|
||||||
|
|
||||||
/* Draw title bar. */
|
/* Draw title bar. */
|
||||||
shape_renderer->draw_rect(_x, _y+_height-title_bar_height, _width,
|
shape_renderer->draw_rect(_x, y_gl+_height-title_bar_height, _width, title_bar_height,
|
||||||
title_bar_height, title_bar_color);
|
title_bar_color);
|
||||||
|
|
||||||
/* Draw title text. */
|
/* Draw title text. */
|
||||||
txt_renderer->render_text(_title.c_str(), _x+5, _y+_height-title_bar_height+8,
|
txt_renderer->render_text(_title.c_str(), _x+5, y_gl+_height-title_bar_height+8,
|
||||||
1.0f, title_text_color);
|
1.0f, title_text_color);
|
||||||
|
|
||||||
|
if(_content) {
|
||||||
|
int content_y_gl = y_gl;
|
||||||
|
int content_height_gl = _height - title_bar_height;
|
||||||
|
_content->render(txt_renderer, _x, content_y_gl, _width, content_height_gl);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -4,15 +4,18 @@
|
|||||||
|
|
||||||
#include "gfx/shape_renderer.h"
|
#include "gfx/shape_renderer.h"
|
||||||
#include "gfx/txt_renderer.h"
|
#include "gfx/txt_renderer.h"
|
||||||
|
#include "terminal.h"
|
||||||
|
|
||||||
class UIWindow {
|
class UIWindow {
|
||||||
public:
|
public:
|
||||||
UIWindow(const char* title, int x, int y, int width, int height);
|
UIWindow(const char* title, int x, int y, int width, int height);
|
||||||
|
|
||||||
void render(ShapeRenderer* shape_renderer, TextRenderer* txt_renderer);
|
void render(ShapeRenderer* shape_renderer, TextRenderer* txt_renderer, int screen_height);
|
||||||
|
void set_content(Terminal* term);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int _x, _y, _width, _height;
|
int _x, _y, _width, _height;
|
||||||
std::string _title;
|
std::string _title;
|
||||||
|
Terminal* _content;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user