#include "gui_list_table.h" bool table_render_item(gui_table_t *table_state, void *state, renderer_t *renderer, font_t *font, int16_t beg_x, int16_t beg_y, display_pixel_t color) { uint16_t offset = beg_x; char tmp[MAX_COLUMN_CHARS]; for (int i = 0; i < table_state->columns_count; i++) { char *data = table_state->get_data(state, i, tmp); renderer_write_string(renderer, offset, beg_y, 0, font, data, color); offset += table_state->columns_widths[i]; } return true; } bool table_update_widths(gui_table_t *table, font_t *font, void *arr, uint64_t item_size, uint32_t items_count) { char tmp[MAX_COLUMN_CHARS]; for (int i = 0; i < table->columns_count; i++) { uint16_t max_size = font_measure_text(font, table->columns_names[i]).x; for (int j = 0; j < items_count; j++) { char *data = browser_get_column_data(arr + item_size * j, i, tmp); if (data == NULL) { continue; } uint16_t current_size = font_measure_text(font, data).x; if (current_size > max_size) { max_size = current_size; } } table->columns_widths[i] = max_size + 50; } return true; }