From 40bf80d9ba8eedb4c5bf53c2c67641c84e6ce7c5 Mon Sep 17 00:00:00 2001 From: Quinn Date: Thu, 13 Feb 2025 22:11:01 +0100 Subject: [PATCH] add colour headers back --- src/window/colour/colour32.h | 42 ++++++++++++++++++++++++++++ src/window/colour/colour8.h | 53 ++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 src/window/colour/colour32.h create mode 100644 src/window/colour/colour8.h diff --git a/src/window/colour/colour32.h b/src/window/colour/colour32.h new file mode 100644 index 0000000..dbe25fe --- /dev/null +++ b/src/window/colour/colour32.h @@ -0,0 +1,42 @@ +#pragma once +#include + +#include "SDL_render.h" + +// stores colour in a rgba format, each channel being a 8 bits wide. +typedef union { + uint32_t packed; + struct { + uint8_t a; + uint8_t b; + uint8_t g; + uint8_t r; + }; +} colour32; + +#define COLOUR32_BLACK ((colour32){0x000000FF}) +#define COLOUR32_RED ((colour32){0xFF0000FF}) +#define COLOUR32_YELLOW ((colour32){0xFFFF00FF}) +#define COLOUR32_ORANGE ((colour32){0xFF6D00FF}) +#define COLOUR32_GREEN ((colour32){0x00FF00FF}) +#define COLOUR32_CYAN ((colour32){0x00FFFFFF}) +#define COLOUR32_BLUE ((colour32){0x0000FFFF}) +#define COLOUR32_MAGENTA ((colour32){0xFF00FFFF}) +#define COLOUR32_WHITE ((colour32){0xFFFFFFFF}) + +// sets the render colour to a colour32 value +static inline void set_colour32(SDL_Renderer* const renderer, colour32 const c) { + (void)SDL_SetRenderDrawColor(renderer, c.r, c.g, c.b, c.a); +} + +// american macros: +#define color32 colour32 +#define COLOR32_BLACK COLOUR32_BLACK +#define COLOR32_RED COLOUR32_RED +#define COLOR32_YELLOW COLOUR32_YELLOW +#define COLOR32_ORANGE COLOUR32_ORANGE +#define COLOR32_GREEN COLOUR32_GREEN +#define COLOR32_CYAN COLOUR32_CYAN +#define COLOR32_BLUE COLOUR32_BLUE +#define COLOR32_MAGENTA COLOUR32_MAGENTA +#define COLOR32_WHITE COLOUR32_WHITE diff --git a/src/window/colour/colour8.h b/src/window/colour/colour8.h new file mode 100644 index 0000000..b3a8678 --- /dev/null +++ b/src/window/colour/colour8.h @@ -0,0 +1,53 @@ +#pragma once +#include + +#include "SDL_render.h" + +// stores colour in a rrrgggbb format, which maps exactly to 8 bits +typedef uint8_t colour8; + +/* rrrg ggbb */ +#define COLOUR8_BLACK ((colour8)0x00) // 0000 0000 +#define COLOUR8_RED ((colour8)0xE0) // 1110 0000 +#define COLOUR8_YELLOW ((colour8)0xFC) // 1111 1100 +#define COLOUR8_ORANGE ((colour8)0xEC) // 1111 1100 +#define COLOUR8_GREEN ((colour8)0x1C) // 0001 1100 +#define COLOUR8_CYAN ((colour8)0x1F) // 0001 1111 +#define COLOUR8_BLUE ((colour8)0x03) // 0000 0011 +#define COLOUR8_MAGENTA ((colour8)0xE3) // 1110 0011 +#define COLOUR8_WHITE ((colour8)0xFF) // 1111 1111 + +// gets the red channel in 32 bit colour space +static inline uint8_t colour8_red32(colour8 const colour) { + return (colour >> 5) * (255 / 7); +} + +// gets the green channel in 32 bit colour space +static inline uint8_t colour8_green32(colour8 const colour) { + return ((colour >> 2) & 7) * (255 / 7); +} + +// gets the blue channel in 32 bit colour space +static inline uint8_t colour8_blue32(colour8 const colour) { + return (colour & 3) * (255 / 3); +} + +// sets the render colour to a colour8 value +static inline void set_colour8(SDL_Renderer* const renderer, colour8 const c) { + (void)SDL_SetRenderDrawColor(renderer, colour8_red32(c), colour8_green32(c), colour8_blue32(c), 0xFF); +} + +// american macros: +#define color8 colour8 +#define color8_red32 colour8_red32 +#define color8_green32 colour8_green32 +#define color8_blue32 colour8_blue32 +#define COLOR8_BLACK COLOUR8_BLACK +#define COLOR8_RED COLOUR8_RED +#define COLOR8_YELLOW COLOUR8_YELLOW +#define COLOR8_ORANGE COLOUR8_ORANGE +#define COLOR8_GREEN COLOUR8_GREEN +#define COLOR8_CYAN COLOUR8_CYAN +#define COLOR8_BLUE COLOUR8_BLUE +#define COLOR8_MAGENTA COLOUR8_MAGENTA +#define COLOR8_WHITE COLOUR8_WHITE