From 150359e8a02f8077009abfc858cb2ab4a8b80860 Mon Sep 17 00:00:00 2001 From: markmental Date: Sat, 28 Mar 2026 14:55:21 -0400 Subject: [PATCH] Cleaner status bar layout --- src/app.o | Bin 15480 -> 15560 bytes src/main.o | Bin 1824 -> 1824 bytes src/ui.c | 55 +++++++++++++++++++++++++++++------------------------ src/ui.o | Bin 39344 -> 39360 bytes 4 files changed, 30 insertions(+), 25 deletions(-) diff --git a/src/app.o b/src/app.o index 50a7b99ea2d80a16d969e159a8da9953ae9c42a5..0204e55efb4333c092c10559b69bf4e7d853b1dd 100644 GIT binary patch delta 675 zcmY+AO=uHQ5XbjzBW|+6Ky8z56OCfT6qKNqw%ILB0#%nyRr-OnwvBjE=t(@)=CUOq zZ5E+n4uT%kgHrUOEO-z+6h$HxY%bbUXu-nY-2b|X44Z|2W$=KmhAK3}}C z5+zH|dfp0dUA^UExdshEkuLl~R2N^bavV23o0>_@rZTBZuYBPooOh%2ch*RU)aBub zP`URTkUfYYl|+!PH%ubG~*|Iyi{zCa2%nv zjpht%Xsp2HzJN5z+p0yg4m|(`N-efPqeX8!^eL=SI=}0G`rM&O*y#)K!fw;k|Avqy zvovsqkPVRJexk#uoS=Pyo?B3o6Fk=qi$Om`l_+b+lp%5r3JRMkDG5Fqf%d^6V!`O( Fkw27S2 zJ48hTBn34>2W&(n$c(s`I-7s-#4$47-5klM&%zAUG~-AZ7;Q7!U&p8YXWv6PI*gg79Fn)lgZ6 z$q#|D2S6Ht046&fu2;|;sFxL0b{kx;qq#WK0k+Li=EoQrEjBA!x-&91OwP12XEd0+ z(8?ajeh4HdOjfkEXWAe+`J%Mgstatus_mid); - draw_beveled_bar(renderer, - rect, - blend_color(theme->status_top, theme->status_mid, 220), - theme->status_mid, - blend_color(theme->status_bottom, theme->status_mid, 220), - color_with_alpha(theme->gloss, 36), - theme->panel_border); - format_time_compact(clock_text, sizeof(clock_text), now_wall); - draw_text_clipped(renderer, font, clock_text, rect, rect->x + 12, rect->y + 10, text_color); - set_draw_color(renderer, theme->status_divider); - SDL_RenderDrawLine(renderer, rect->x + rect->w / 2, rect->y + 8, rect->x + rect->w / 2, rect->y + rect->h - 8); + fill_three_stop_gradient(renderer, + rect, + blend_color(theme->status_top, theme->status_mid, 220), + theme->status_mid, + blend_color(theme->status_bottom, theme->status_mid, 220)); + stroke_rect(renderer, rect, theme->panel_border); if (selected_channel) { - snprintf(channel_text, sizeof(channel_text), "%s %d", selected_channel->name, selected_channel->number); - draw_text_clipped(renderer, font, channel_text, rect, rect->x + rect->w - 260, rect->y + 10, text_color); + char clock_text[32]; + format_time_compact(clock_text, sizeof(clock_text), now_wall); + snprintf(status_text, sizeof(status_text), "Time %s | Channel %s %d", clock_text, selected_channel->name, selected_channel->number); + } else { + char clock_text[32]; + format_time_compact(clock_text, sizeof(clock_text), now_wall); + snprintf(status_text, sizeof(status_text), "Time %s", clock_text); } + + draw_text_clipped(renderer, font, status_text, rect, rect->x + 10, rect->y + 4, text_color); } static void draw_info_panel(SDL_Renderer *renderer, @@ -847,12 +848,16 @@ void ui_render_guide(SDL_Renderer *renderer, double scale_y = (double) window_height / WINDOW_HEIGHT; int guide_x_start = (int) (GUIDE_X_START * scale_x); int sidebar_width = (int) (GUIDE_SIDEBAR_WIDTH * scale_x); + int mini_status_height = (int) (26 * scale_y); SDL_Rect full = {0, 0, window_width, window_height}; SDL_Rect info_panel = {0, 0, (int) (GUIDE_INFO_WIDTH * scale_x), (int) (GUIDE_INFO_HEIGHT * scale_y)}; SDL_Rect preview = {window_width - (int) (GUIDE_PREVIEW_WIDTH * scale_x), 0, (int) (GUIDE_PREVIEW_WIDTH * scale_x), (int) (GUIDE_PREVIEW_HEIGHT * scale_y)}; - SDL_Rect status_bar = {info_panel.w, 0, window_width - info_panel.w, (int) (GUIDE_STATUS_HEIGHT * scale_y)}; - SDL_Rect header_row = {0, (int) ((GUIDE_GRID_TOP - GUIDE_STATUS_HEIGHT) * scale_y), window_width, (int) (GUIDE_STATUS_HEIGHT * scale_y)}; - SDL_Rect grid = {0, (int) (GUIDE_GRID_TOP * scale_y), window_width, window_height - (int) (GUIDE_GRID_TOP * scale_y) - (int) (GUIDE_FOOTER_HEIGHT * scale_y)}; + int mini_status_y = preview.y + preview.h; + int timeline_header_y = mini_status_y + mini_status_height; + int grid_y = timeline_header_y + (int) (GUIDE_STATUS_HEIGHT * scale_y); + SDL_Rect mini_status_bar = {preview.x, mini_status_y, preview.w, mini_status_height}; + SDL_Rect header_row = {0, timeline_header_y, window_width, (int) (GUIDE_STATUS_HEIGHT * scale_y)}; + SDL_Rect grid = {0, grid_y, window_width, window_height - grid_y - (int) (GUIDE_FOOTER_HEIGHT * scale_y)}; int row_height = grid.h / GUIDE_VISIBLE_ROWS; int timeline_w = window_width - guide_x_start - (int) (20 * scale_x); int start_index = active_channel - 2; @@ -877,7 +882,7 @@ void ui_render_guide(SDL_Renderer *renderer, draw_panel_shadow(renderer, &preview); fill_rect(renderer, &preview, COLOR_BLACK); draw_video(renderer, video_texture, texture_width, texture_height, preview); - draw_status_bar(renderer, fonts->medium, theme, selected_channel, &status_bar, now_wall); + draw_mini_status_bar(renderer, fonts->small, theme, selected_channel, &mini_status_bar, now_wall); if (cache->timeline_label_slot != guide_view_start_time / 60 || cache->timeline_theme != theme) { char label[32]; diff --git a/src/ui.o b/src/ui.o index 304cea0a4264fed77926c7055950d12bf5fd49db..4399d47cbeebaf02395c0a5236f2cdbede556249 100644 GIT binary patch delta 10927 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