diff options
author | Ian Moffett <ian@osmora.org> | 2025-08-04 01:46:01 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2025-08-04 01:46:01 -0400 |
commit | cf5c010fe47b9df2919ecbf248afe33b37c1263a (patch) | |
tree | e0d04d597f23b352bd73f77bff336f4903e0e1f8 | |
parent | 14b9fc0a5f3dfb22adae90dd61961682eaf50931 (diff) |
libgfx: draw: Add gfx_get_pix() function
Introduce gfx routine to grab the RGB value of a specific pixel at a
specific location on the screen.
Signed-off-by: Ian Moffett <ian@osmora.org>
-rw-r--r-- | lib/libgfx/include/libgfx/draw.h | 1 | ||||
-rw-r--r-- | lib/libgfx/src/draw.c | 28 |
2 files changed, 29 insertions, 0 deletions
diff --git a/lib/libgfx/include/libgfx/draw.h b/lib/libgfx/include/libgfx/draw.h index 9f56f6c..96fe35a 100644 --- a/lib/libgfx/include/libgfx/draw.h +++ b/lib/libgfx/include/libgfx/draw.h @@ -103,6 +103,7 @@ struct gfx_point { int gfx_draw_shape(struct gfx_ctx *ctx, const struct gfx_shape *shape); int gfx_plot_point(struct gfx_ctx *ctx, const struct gfx_point *point); +color_t gfx_get_pix(struct gfx_ctx *ctx, uint32_t x, uint32_t y); __always_inline static inline size_t gfx_io_index(struct gfx_ctx *ctx, scrpos_t x, scrpos_t y) diff --git a/lib/libgfx/src/draw.c b/lib/libgfx/src/draw.c index 9ef8630..784110a 100644 --- a/lib/libgfx/src/draw.c +++ b/lib/libgfx/src/draw.c @@ -129,6 +129,34 @@ gfx_plot_point(struct gfx_ctx *ctx, const struct gfx_point *point) } /* + * Grab the RGB value of a single pixel on + * the scren. + * + * @ctx: Graphics context pointer + * @x: X position to sample + * @y: Y position to sample + */ +color_t +gfx_get_pix(struct gfx_ctx *ctx, uint32_t x, uint32_t y) +{ + const color_t ERROR_COLOR = GFX_BLACK; + uint32_t index; + + /* The 'ctx' argument is required */ + if (ctx == NULL) { + return ERROR_COLOR; + } + + /* Are we within bounds of the screen */ + if (gfx_pixel_bounds(ctx, x, y) < 0) { + return ERROR_COLOR; + } + + index = gfx_io_index(ctx, x, y); + return ctx->io[index]; +} + +/* * Draw a shape onto the screen * * @ctx: libgfx graphics context |