ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_ui.h
Go to the documentation of this file.
1
34
35#pragma once
36
37#ifdef __cplusplus
38extern "C" {
39#endif
40
41#include <stdint.h>
42
43#include "ra8_err.h"
44
45/* ===========================================================================
46 * Compile-time limits
47 * ===========================================================================
48 */
49
54typedef enum : uint16_t {
57
58/* ===========================================================================
59 * Geometry + hit-testing
60 * ===========================================================================
61 */
62
72typedef struct {
73 int32_t x;
74 int32_t y;
75 int32_t w;
76 int32_t h;
78
83typedef struct {
85 uint16_t action_id;
86 uint16_t reserved;
88
112bool ra8_ui_rect_contains(const ra8_ui_rect_t* r, int32_t px, int32_t py);
113
142[[nodiscard]] ra8_err_t ra8_ui_hit_test(const ra8_ui_target_t* targets,
143 uint16_t count,
144 int32_t px,
145 int32_t py,
146 uint16_t* out_action,
147 bool* out_hit);
148
149/* ===========================================================================
150 * Screen-stack navigation
151 * ===========================================================================
152 */
153
163typedef struct {
165 uint8_t depth;
166 uint8_t reserved[3];
168
187[[nodiscard]] ra8_err_t ra8_ui_nav_init(ra8_ui_nav_t* nav, uint16_t root_screen);
188
209[[nodiscard]] ra8_err_t ra8_ui_nav_push(ra8_ui_nav_t* nav, uint16_t screen);
210
232[[nodiscard]] ra8_err_t ra8_ui_nav_pop(ra8_ui_nav_t* nav, uint16_t* out_screen);
233
253[[nodiscard]] ra8_err_t ra8_ui_nav_replace(ra8_ui_nav_t* nav, uint16_t screen);
254
274[[nodiscard]] ra8_err_t ra8_ui_nav_top(const ra8_ui_nav_t* nav, uint16_t* out_screen);
275
276/* ===========================================================================
277 * Paging
278 * ===========================================================================
279 */
280
285typedef struct {
286 uint16_t current;
287 uint16_t total;
289
309[[nodiscard]] ra8_err_t ra8_ui_pager_init(ra8_ui_pager_t* p, uint16_t total);
310
329[[nodiscard]] ra8_err_t ra8_ui_pager_next(ra8_ui_pager_t* p, bool* out_changed);
330
349[[nodiscard]] ra8_err_t ra8_ui_pager_prev(ra8_ui_pager_t* p, bool* out_changed);
350
370[[nodiscard]] ra8_err_t ra8_ui_pager_goto(ra8_ui_pager_t* p, uint16_t page, bool* out_changed);
371
372#ifdef __cplusplus
373}
374#endif
Error Code Definitions for ra8-firmware.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546
ra8_ui_limits_t
Static-allocation caps for the interaction core.
Definition ra8_ui.h:54
@ k_ra8_ui_nav_max_depth
Max screen-stack depth.
Definition ra8_ui.h:55
ra8_err_t ra8_ui_nav_init(ra8_ui_nav_t *nav, uint16_t root_screen)
Initialise a navigation stack with a root screen.
Definition ra8_ui.c:71
ra8_err_t ra8_ui_nav_push(ra8_ui_nav_t *nav, uint16_t screen)
Push a new screen onto the stack.
Definition ra8_ui.c:79
ra8_err_t ra8_ui_nav_replace(ra8_ui_nav_t *nav, uint16_t screen)
Replace the top screen in place (no depth change).
Definition ra8_ui.c:105
ra8_err_t ra8_ui_pager_init(ra8_ui_pager_t *p, uint16_t total)
Initialise a pager over total pages at page 0.
Definition ra8_ui.c:131
ra8_err_t ra8_ui_pager_next(ra8_ui_pager_t *p, bool *out_changed)
Advance to the next page, clamping at the last page.
Definition ra8_ui.c:142
ra8_err_t ra8_ui_nav_pop(ra8_ui_nav_t *nav, uint16_t *out_screen)
Pop the top screen, revealing the one beneath.
Definition ra8_ui.c:93
bool ra8_ui_rect_contains(const ra8_ui_rect_t *r, int32_t px, int32_t py)
Test whether a point lies inside a rectangle.
Definition ra8_ui.c:34
ra8_err_t ra8_ui_nav_top(const ra8_ui_nav_t *nav, uint16_t *out_screen)
Read the current (top) screen id.
Definition ra8_ui.c:115
ra8_err_t ra8_ui_pager_prev(ra8_ui_pager_t *p, bool *out_changed)
Step to the previous page, clamping at page 0.
Definition ra8_ui.c:155
ra8_err_t ra8_ui_hit_test(const ra8_ui_target_t *targets, uint16_t count, int32_t px, int32_t py, uint16_t *out_action, bool *out_hit)
Find the first tap target containing a point.
Definition ra8_ui.c:42
ra8_err_t ra8_ui_pager_goto(ra8_ui_pager_t *p, uint16_t page, bool *out_changed)
Jump to an absolute page, clamping into [0, total-1].
Definition ra8_ui.c:168
Fixed-depth screen-id stack (caller-owned).
Definition ra8_ui.h:163
uint8_t depth
Occupied slots (1..max).
Definition ra8_ui.h:165
uint8_t reserved[3]
Padding.
Definition ra8_ui.h:166
uint16_t stack[k_ra8_ui_nav_max_depth]
Screen-id stack.
Definition ra8_ui.h:164
Clamped (current, total) page cursor.
Definition ra8_ui.h:285
uint16_t current
Current 0-based page index.
Definition ra8_ui.h:286
uint16_t total
Total page count (>= 1).
Definition ra8_ui.h:287
Axis-aligned rectangle in framebuffer pixel coordinates.
Definition ra8_ui.h:72
int32_t w
Width (pixels, >= 0).
Definition ra8_ui.h:75
int32_t h
Height (pixels, >= 0).
Definition ra8_ui.h:76
int32_t x
Left edge (pixels).
Definition ra8_ui.h:73
int32_t y
Top edge (pixels).
Definition ra8_ui.h:74
One tap target: a rectangle bound to an opaque action id.
Definition ra8_ui.h:83
ra8_ui_rect_t rect
Hit rectangle.
Definition ra8_ui.h:84
uint16_t action_id
Caller-defined action for this rect.
Definition ra8_ui.h:85
uint16_t reserved
Padding to 4-byte align.
Definition ra8_ui.h:86