Fix font handling: use const Font* for get_current_font and all GUI font save/restore logic

This commit is contained in:
Adolfo Reyna
2026-01-31 09:45:29 -05:00
parent 76a74477a7
commit 3a1e278c4c
2 changed files with 29 additions and 29 deletions

View File

@@ -45,22 +45,22 @@ void LowLevelGUI::draw_window(LowLevelWindow* window){
renderer->draw_line(close_x + 3, close_y + 3, close_x + close_size - 4, close_y + close_size - 4, true, 1); renderer->draw_line(close_x + 3, close_y + 3, close_x + close_size - 4, close_y + close_size - 4, true, 1);
renderer->draw_line(close_x + close_size - 4, close_y + 3, close_x + 3, close_y + close_size - 4, true, 1); renderer->draw_line(close_x + close_size - 4, close_y + 3, close_x + 3, close_y + close_size - 4, true, 1);
Font original_font = renderer->get_current_font(); const Font* original_font = renderer->get_current_font();
renderer->set_font(current_font); renderer->set_font(current_font);
renderer->draw_string_scaled(window->x + 10, window->y + 3, window->title, 2); renderer->draw_string_scaled(window->x + 10, window->y + 3, window->title, 2);
renderer->set_font(&original_font); renderer->set_font(original_font);
} }
void LowLevelGUI::draw_button(LowLevelWindow* window, int x, int y, const char *label, bool pressed, bool rounded) void LowLevelGUI::draw_button(LowLevelWindow* window, int x, int y, const char *label, bool pressed, bool rounded)
{ {
window = validate_or_create_window(window, renderer); window = validate_or_create_window(window, renderer);
Font original_font = renderer->get_current_font(); const Font* original_font = renderer->get_current_font();
bool original_text_color = renderer->get_current_text_color(); bool original_text_color = renderer->get_current_text_color();
renderer->set_font(current_font); renderer->set_font(current_font);
int text_x = window->x + x + 5; int text_x = window->x + x + 5;
int text_y = window->y + y + 5; int text_y = window->y + y + 5;
int height = renderer->get_current_font().get_char_height() * 2 + 10; int height = renderer->get_current_font()->get_char_height() * 2 + 10;
int width = int(renderer->draw_string_scaled(text_x, text_y, label, 2) * 1) + 30; int width = int(renderer->draw_string_scaled(text_x, text_y, label, 2) * 1) + 30;
if (pressed) if (pressed)
@@ -79,15 +79,15 @@ void LowLevelGUI::draw_button(LowLevelWindow* window, int x, int y, const char *
renderer->set_text_color(!pressed); renderer->set_text_color(!pressed);
renderer->draw_string_scaled(text_x, text_y, label, 2); renderer->draw_string_scaled(text_x, text_y, label, 2);
renderer->set_font(&original_font); renderer->set_font(original_font);
renderer->set_text_color(original_text_color); renderer->set_text_color(original_text_color);
} }
void LowLevelGUI::draw_checkbox(LowLevelWindow* window, int x, int y, const char *label, bool checked) { void LowLevelGUI::draw_checkbox(LowLevelWindow* window, int x, int y, const char *label, bool checked) {
window = validate_or_create_window(window, renderer); window = validate_or_create_window(window, renderer);
Font original_font = renderer->get_current_font(); const Font* original_font = renderer->get_current_font();
renderer->set_font(current_font); renderer->set_font(current_font);
int box_size = renderer->get_current_font().get_char_height() * 2 ; int box_size = renderer->get_current_font()->get_char_height() * 2 ;
int box_x = window->x + x; int box_x = window->x + x;
int box_y = window->y + y; int box_y = window->y + y;
// Draw checkbox square // Draw checkbox square
@@ -101,14 +101,14 @@ void LowLevelGUI::draw_checkbox(LowLevelWindow* window, int x, int y, const char
// Draw label // Draw label
renderer->set_text_color(true); renderer->set_text_color(true);
renderer->draw_string_scaled(box_x + box_size + 5, box_y - 1, label, 2); renderer->draw_string_scaled(box_x + box_size + 5, box_y - 1, label, 2);
renderer->set_font(&original_font); renderer->set_font(original_font);
} }
void LowLevelGUI::draw_radio_button(LowLevelWindow* window, int x, int y, const char *label, bool selected) { void LowLevelGUI::draw_radio_button(LowLevelWindow* window, int x, int y, const char *label, bool selected) {
window = validate_or_create_window(window, renderer); window = validate_or_create_window(window, renderer);
Font original_font = renderer->get_current_font(); const Font* original_font = renderer->get_current_font();
renderer->set_font(current_font); renderer->set_font(current_font);
int radius = renderer->get_current_font().get_char_height(); int radius = renderer->get_current_font()->get_char_height();
int center_x = window->x + x + radius; int center_x = window->x + x + radius;
int center_y = window->y + y + radius; int center_y = window->y + y + radius;
// Draw outer circle // Draw outer circle
@@ -121,7 +121,7 @@ void LowLevelGUI::draw_radio_button(LowLevelWindow* window, int x, int y, const
// Draw label // Draw label
renderer->set_text_color(true); renderer->set_text_color(true);
renderer->draw_string_scaled(center_x + radius + 5, center_y - radius / 2, label, 2); renderer->draw_string_scaled(center_x + radius + 5, center_y - radius / 2, label, 2);
renderer->set_font(&original_font); renderer->set_font(original_font);
} }
@@ -138,7 +138,7 @@ void LowLevelGUI::draw_slider(LowLevelWindow* window, int x, int y, int width, i
renderer->draw_rectangle(handle_x - 6, slider_y - 1, 12, height + 2, true, 1); renderer->draw_rectangle(handle_x - 6, slider_y - 1, 12, height + 2, true, 1);
Font original_font = renderer->get_current_font(); const Font* original_font = renderer->get_current_font();
renderer->set_font(current_font); renderer->set_font(current_font);
// draw current position value label on top of the slider // draw current position value label on top of the slider
char pos_label[10]; char pos_label[10];
@@ -149,7 +149,7 @@ void LowLevelGUI::draw_slider(LowLevelWindow* window, int x, int y, int width, i
renderer->draw_string_scaled(slider_x, window->y + y, label, 2); renderer->draw_string_scaled(slider_x, window->y + y, label, 2);
} }
renderer->set_font(&original_font); renderer->set_font(original_font);
@@ -157,7 +157,7 @@ void LowLevelGUI::draw_slider(LowLevelWindow* window, int x, int y, int width, i
void LowLevelGUI::draw_calendar(LowLevelWindow* window, int x, int y, int month, int year) { void LowLevelGUI::draw_calendar(LowLevelWindow* window, int x, int y, int month, int year) {
window = validate_or_create_window(window, renderer); window = validate_or_create_window(window, renderer);
Font original_font = renderer->get_current_font(); const Font* original_font = renderer->get_current_font();
renderer->set_font(current_font); renderer->set_font(current_font);
// 1. Draw Month and Year Header // 1. Draw Month and Year Header
@@ -209,7 +209,7 @@ void LowLevelGUI::draw_calendar(LowLevelWindow* window, int x, int y, int month,
renderer->draw_string_scaled(cell_x + offset_x, cell_y + 5, day_str, 1); renderer->draw_string_scaled(cell_x + offset_x, cell_y + 5, day_str, 1);
} }
renderer->set_font(&original_font); renderer->set_font(original_font);
} }
void LowLevelGUI::draw_textbox(LowLevelWindow* window, int x, int y, int width, int height, const char* content, bool focused) { void LowLevelGUI::draw_textbox(LowLevelWindow* window, int x, int y, int width, int height, const char* content, bool focused) {
@@ -226,7 +226,7 @@ void LowLevelGUI::draw_textbox(LowLevelWindow* window, int x, int y, int width,
} }
// Draw content text inside the textbox // Draw content text inside the textbox
Font original_font = renderer->get_current_font(); const Font* original_font = renderer->get_current_font();
renderer->set_font(current_font); renderer->set_font(current_font);
renderer->set_text_color(true); renderer->set_text_color(true);
@@ -234,7 +234,7 @@ void LowLevelGUI::draw_textbox(LowLevelWindow* window, int x, int y, int width,
int text_y = box_y + 5; int text_y = box_y + 5;
renderer->draw_string_scaled(text_x, text_y, content, 1); renderer->draw_string_scaled(text_x, text_y, content, 1);
renderer->set_font(&original_font); renderer->set_font(original_font);
} }
void LowLevelGUI::draw_tab(LowLevelWindow* window, int x, int y, int width, int height, const char* label, bool selected) { void LowLevelGUI::draw_tab(LowLevelWindow* window, int x, int y, int width, int height, const char* label, bool selected) {
@@ -249,17 +249,17 @@ void LowLevelGUI::draw_tab(LowLevelWindow* window, int x, int y, int width, int
renderer->draw_rectangle(tab_x - 1, tab_y - 1, width + 2, height + 2, true, 1); renderer->draw_rectangle(tab_x - 1, tab_y - 1, width + 2, height + 2, true, 1);
} }
Font original_font = renderer->get_current_font(); const Font* original_font = renderer->get_current_font();
renderer->set_font(current_font); renderer->set_font(current_font);
renderer->set_text_color(true); renderer->set_text_color(true);
// Center the label within the tab // Center the label within the tab
int text_width = int(renderer->draw_string_scaled(0, 0, label, 1) * 0.75); int text_width = int(renderer->draw_string_scaled(0, 0, label, 1) * 0.75);
int text_x = tab_x + (width - text_width) / 2; int text_x = tab_x + (width - text_width) / 2;
int text_y = tab_y + (height - renderer->get_current_font().get_char_height()) / 2; int text_y = tab_y + (height - renderer->get_current_font()->get_char_height()) / 2;
renderer->draw_string_scaled(text_x, text_y, label, 1); renderer->draw_string_scaled(text_x, text_y, label, 1);
renderer->set_font(&original_font); renderer->set_font(original_font);
} }
void LowLevelGUI::draw_status_bar(LowLevelWindow* window, int x, int y, int width, const char* label, const char* sublabel, int percentage, const char* value_text) { void LowLevelGUI::draw_status_bar(LowLevelWindow* window, int x, int y, int width, const char* label, const char* sublabel, int percentage, const char* value_text) {
@@ -267,7 +267,7 @@ void LowLevelGUI::draw_status_bar(LowLevelWindow* window, int x, int y, int widt
int base_x = window->x + x; int base_x = window->x + x;
int base_y = window->y + y; int base_y = window->y + y;
Font original_font = renderer->get_current_font(); const Font* original_font = renderer->get_current_font();
renderer->set_font(current_font); renderer->set_font(current_font);
// Draw Main Label (e.g., "PANELS") // Draw Main Label (e.g., "PANELS")
@@ -289,7 +289,7 @@ void LowLevelGUI::draw_status_bar(LowLevelWindow* window, int x, int y, int widt
renderer->draw_rounded_rectangle(base_x + 2, bar_y + 2, fill_width - 4, bar_height - 4, 4, true, true); renderer->draw_rounded_rectangle(base_x + 2, bar_y + 2, fill_width - 4, bar_height - 4, 4, true, true);
} }
renderer->set_font(&original_font); renderer->set_font(original_font);
} }
void LowLevelGUI::draw_circular_gauge(LowLevelWindow* window, int x, int y, int width, const char* label, int percentage) { void LowLevelGUI::draw_circular_gauge(LowLevelWindow* window, int x, int y, int width, const char* label, int percentage) {
@@ -301,7 +301,7 @@ void LowLevelGUI::draw_circular_gauge(LowLevelWindow* window, int x, int y, int
// Draw pill-shaped container // Draw pill-shaped container
renderer->draw_rounded_rectangle(base_x, base_y, width, height, height/2, true); renderer->draw_rounded_rectangle(base_x, base_y, width, height, height/2, true);
Font original_font = renderer->get_current_font(); const Font* original_font = renderer->get_current_font();
renderer->set_font(current_font); renderer->set_font(current_font);
// Draw Label // Draw Label
@@ -323,7 +323,7 @@ void LowLevelGUI::draw_circular_gauge(LowLevelWindow* window, int x, int y, int
// Note: If your renderer supports arcs: // Note: If your renderer supports arcs:
// renderer->draw_arc(centerX, centerY, radius, 0, (percentage * 360) / 100); // renderer->draw_arc(centerX, centerY, radius, 0, (percentage * 360) / 100);
renderer->set_font(&original_font); renderer->set_font(original_font);
} }
@@ -335,7 +335,7 @@ void LowLevelGUI::draw_notification(LowLevelWindow* window, int x, int y, int wi
// Draw dark background // Draw dark background
renderer->draw_rounded_rectangle(base_x, base_y, width, 100, 15, true, true); renderer->draw_rounded_rectangle(base_x, base_y, width, 100, 15, true, true);
Font original_font = renderer->get_current_font(); const Font* original_font = renderer->get_current_font();
renderer->set_font(current_font); renderer->set_font(current_font);
renderer->set_text_color(false); // Assume false is white/light on dark renderer->set_text_color(false); // Assume false is white/light on dark
@@ -347,15 +347,15 @@ void LowLevelGUI::draw_notification(LowLevelWindow* window, int x, int y, int wi
renderer->draw_string_scaled(base_x + 15, base_y + 30, message, 2); renderer->draw_string_scaled(base_x + 15, base_y + 30, message, 2);
renderer->set_text_color(true); renderer->set_text_color(true);
renderer->set_font(&original_font); renderer->set_font(original_font);
} }
void LowLevelGUI::draw_large_clock(LowLevelWindow* window, int x, int y, const char* time_str) { void LowLevelGUI::draw_large_clock(LowLevelWindow* window, int x, int y, const char* time_str) {
window = validate_or_create_window(window, renderer); window = validate_or_create_window(window, renderer);
Font original_font = renderer->get_current_font(); const Font* original_font = renderer->get_current_font();
renderer->set_font(current_font); renderer->set_font(current_font);
// Draw the time significantly larger (scale 5 or 6) // Draw the time significantly larger (scale 5 or 6)
renderer->draw_string_scaled(window->x + x, window->y + y, time_str, 6); renderer->draw_string_scaled(window->x + x, window->y + y, time_str, 6);
renderer->set_font(&original_font); renderer->set_font(original_font);
} }

View File

@@ -111,7 +111,7 @@ public:
// Font management // Font management
void set_font(const Font* font); void set_font(const Font* font);
void set_text_color(bool color); void set_text_color(bool color);
Font get_current_font() const { return *current_font; } const Font* get_current_font() const { return current_font; }
bool get_current_text_color() const { return text_color; } bool get_current_text_color() const { return text_color; }
int get_width() const { return V_WIDTH; } int get_width() const { return V_WIDTH; }
int get_height() const { return V_HEIGHT; } int get_height() const { return V_HEIGHT; }