Fix font handling: use const Font* for get_current_font and all GUI font save/restore logic
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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; }
|
||||||
|
|||||||
Reference in New Issue
Block a user