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 + 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->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)
{
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();
renderer->set_font(current_font);
int text_x = window->x + x + 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;
if (pressed)
@@ -79,15 +79,15 @@ void LowLevelGUI::draw_button(LowLevelWindow* window, int x, int y, const char *
renderer->set_text_color(!pressed);
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);
}
void LowLevelGUI::draw_checkbox(LowLevelWindow* window, int x, int y, const char *label, bool checked) {
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);
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_y = window->y + y;
// Draw checkbox square
@@ -101,14 +101,14 @@ void LowLevelGUI::draw_checkbox(LowLevelWindow* window, int x, int y, const char
// Draw label
renderer->set_text_color(true);
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) {
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);
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_y = window->y + y + radius;
// Draw outer circle
@@ -121,7 +121,7 @@ void LowLevelGUI::draw_radio_button(LowLevelWindow* window, int x, int y, const
// Draw label
renderer->set_text_color(true);
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);
Font original_font = renderer->get_current_font();
const Font* original_font = renderer->get_current_font();
renderer->set_font(current_font);
// draw current position value label on top of the slider
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->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) {
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);
// 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->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) {
@@ -226,7 +226,7 @@ void LowLevelGUI::draw_textbox(LowLevelWindow* window, int x, int y, int width,
}
// 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_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;
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) {
@@ -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);
}
Font original_font = renderer->get_current_font();
const Font* original_font = renderer->get_current_font();
renderer->set_font(current_font);
renderer->set_text_color(true);
// Center the label within the tab
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_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->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) {
@@ -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_y = window->y + y;
Font original_font = renderer->get_current_font();
const Font* original_font = renderer->get_current_font();
renderer->set_font(current_font);
// 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->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) {
@@ -301,7 +301,7 @@ void LowLevelGUI::draw_circular_gauge(LowLevelWindow* window, int x, int y, int
// Draw pill-shaped container
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);
// Draw Label
@@ -323,7 +323,7 @@ void LowLevelGUI::draw_circular_gauge(LowLevelWindow* window, int x, int y, int
// Note: If your renderer supports arcs:
// 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
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_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->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) {
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);
// Draw the time significantly larger (scale 5 or 6)
renderer->draw_string_scaled(window->x + x, window->y + y, time_str, 6);
renderer->set_font(&original_font);
renderer->set_font(original_font);
}