diff options
author | 3gg <3gg@shellblade.net> | 2024-07-13 11:44:32 -0700 |
---|---|---|
committer | 3gg <3gg@shellblade.net> | 2024-07-13 11:44:32 -0700 |
commit | 68a3532728b55b73d8bcadb8ccfc1d9396346cd2 (patch) | |
tree | c87a636a36f21024032fc5cb5900982957491f95 /src/render.c | |
parent | a4294e4a94189dffb1fdf99c9a60d87d77272926 (diff) |
Basic table scrollbar rendering.main
Diffstat (limited to 'src/render.c')
-rw-r--r-- | src/render.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/render.c b/src/render.c index 24490c0..b1fd3e8 100644 --- a/src/render.c +++ b/src/render.c | |||
@@ -186,6 +186,8 @@ static void RenderTable(const uiTable* table, RenderState* state) { | |||
186 | uiRect original_subsurface = {0}; | 186 | uiRect original_subsurface = {0}; |
187 | uiPoint original_pen = {0}; | 187 | uiPoint original_pen = {0}; |
188 | 188 | ||
189 | int col_widths_sum = 0; | ||
190 | |||
189 | // Render header. | 191 | // Render header. |
190 | if (table->header) { | 192 | if (table->header) { |
191 | for (int col = 0; col < table->cols; ++col) { | 193 | for (int col = 0; col < table->cols; ++col) { |
@@ -201,6 +203,9 @@ static void RenderTable(const uiTable* table, RenderState* state) { | |||
201 | // Reset the original subsurface and pen for subsequent columns. | 203 | // Reset the original subsurface and pen for subsequent columns. |
202 | PopSubsurface(state, &original_subsurface, &original_pen); | 204 | PopSubsurface(state, &original_subsurface, &original_pen); |
203 | 205 | ||
206 | // Keep track of the sum of column widths to later render the scroll bar. | ||
207 | col_widths_sum += table->widths[col]; | ||
208 | |||
204 | // Next column. | 209 | // Next column. |
205 | state->pen.x += table->widths[col]; | 210 | state->pen.x += table->widths[col]; |
206 | } | 211 | } |
@@ -235,6 +240,23 @@ static void RenderTable(const uiTable* table, RenderState* state) { | |||
235 | state->pen.y += g_ui.font->header.glyph_height; | 240 | state->pen.y += g_ui.font->header.glyph_height; |
236 | } | 241 | } |
237 | state->pen.y = y0; | 242 | state->pen.y = y0; |
243 | |||
244 | // Render scrollbar. | ||
245 | if (table->flags.vertical_overflow) { | ||
246 | state->pen.x = col_widths_sum; | ||
247 | |||
248 | const int y_start = (int)((double)table->offset / (double)table->rows * | ||
249 | (double)table->height); | ||
250 | |||
251 | const int height = (int)((double)table->num_visible_rows / | ||
252 | (double)table->rows * (double)table->height); | ||
253 | |||
254 | FillRect( | ||
255 | &(uiRect){.y = y_start, .width = ScrollBarWidth, .height = height}, | ||
256 | uiPink, state); | ||
257 | |||
258 | state->pen.x = x0; | ||
259 | } | ||
238 | } | 260 | } |
239 | 261 | ||
240 | /// Render a widget. | 262 | /// Render a widget. |