[Refactor] Separate MenuBar bg and text rendering.

This commit is contained in:
Ritchie Cunningham 2025-10-14 18:52:47 +01:00
parent 3fbacd4a99
commit 404f65867d
3 changed files with 18 additions and 19 deletions

View File

@ -52,17 +52,20 @@ void Editor::render(const RenderContext& context, int x, int y_screen, int y_gl,
int content_y = y_screen + menu_bar_height; int content_y = y_screen + menu_bar_height;
int content_height = height - menu_bar_height; int content_height = height - menu_bar_height;
/* /* Pass 1: Main Bar Background.*/
* Render editor in two passes to ensure the dropdown context.ui_renderer->begin_shapes();
* menu appears on top of the main text view. _menu_bar->render_bar_bg(context.ui_renderer, x, y_screen, width);
*/ context.ui_renderer->flush_shapes();
/* Pass 1: Main Content. */
context.ui_renderer->begin_text(); /* Pass 2: Main text view. */
_menu_bar->render_bar(context.ui_renderer, x, y_screen, width);
_view->render(context.ui_renderer, x, content_y, width, content_height, context.show_cursor); _view->render(context.ui_renderer, x, content_y, width, content_height, context.show_cursor);
/* Pass 3: Menu bar text and dropdown. */
context.ui_renderer->begin_text();
_menu_bar->render_bar_text(context.ui_renderer, x, y_screen, width);
context.ui_renderer->flush_text(); context.ui_renderer->flush_text();
/* Pass 2: Dropdown Menu. */ /* Pass 4: Dropdown menu. */
context.ui_renderer->begin_text(); context.ui_renderer->begin_text();
_menu_bar->render_dropdown(context.ui_renderer, x, y_screen, width); _menu_bar->render_dropdown(context.ui_renderer, x, y_screen, width);
context.ui_renderer->flush_text(); context.ui_renderer->flush_text();

View File

@ -72,25 +72,20 @@ void MenuBar::handle_event(SDL_Event* event, int window_x, int window_y) {
} }
} }
void MenuBar::render_bar(UIRenderer* ui_renderer, int x, int y, int width) { void MenuBar::render_bar_bg(UIRenderer* ui_renderer, int x, int y, int width) {
const Color bg_color = { 0.15f, 0.17f, 0.19f }; const Color bg_color = { 0.15f, 0.17f, 0.19f };
const Color text_color = { 0.9f, 0.9f, 0.9f };
ui_renderer->begin_shapes();
ui_renderer->begin_text();
ui_renderer->draw_rect(x, y, width, _height, bg_color); ui_renderer->draw_rect(x, y, width, _height, bg_color);
}
void MenuBar::render_bar_text(UIRenderer *ui_renderer, int x, int y, int width) {
const Color text_color = { 0.9f, 0.9f, 0.9f };
int menu_x = x; int menu_x = x;
for(size_t i = 0; i < _menus.size(); ++i) { for(size_t i = 0; i < _menus.size(); ++i) {
int menu_width = 60; int menu_width = 60;
ui_renderer->render_text(_menus[i].label.c_str(), menu_x+10, y+20, text_color); ui_renderer->render_text(_menus[i].label.c_str(), menu_x+10, y+20, text_color);
menu_x += menu_width; menu_x += menu_width;
} }
ui_renderer->flush_shapes();
ui_renderer->flush_text();
} }
void MenuBar::render_dropdown(UIRenderer* ui_renderer, int x, int y, int width ) { void MenuBar::render_dropdown(UIRenderer* ui_renderer, int x, int y, int width ) {

View File

@ -28,7 +28,8 @@ public:
std::function<void()> action); std::function<void()> action);
void handle_event(SDL_Event* event, int window_x, int window_y); void handle_event(SDL_Event* event, int window_x, int window_y);
void render_bar(UIRenderer* ui_renderer, int x, int y, int width); void render_bar_bg(UIRenderer* ui_renderer, int x, int y, int width);
void render_bar_text(UIRenderer* ui_renderer, int x, int y, int width);
void render_dropdown(UIRenderer* ui_renderer, int x, int y, int width); void render_dropdown(UIRenderer* ui_renderer, int x, int y, int width);
int get_height(void) const; int get_height(void) const;