forked from hkc/cc-stuff
Functions to allocate, reallocate, assign palettes
This commit is contained in:
parent
91fc5098eb
commit
26f4511ceb
46
cc-common.c
46
cc-common.c
|
@ -1,5 +1,51 @@
|
|||
#include "cc-common.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
struct palette *cc_alloc_palette(uint8_t count) {
|
||||
struct palette *palette = calloc(1, sizeof(struct palette) + count * sizeof(union color));
|
||||
if (!palette) {
|
||||
return NULL;
|
||||
}
|
||||
uint8_t *count_ptr = (uint8_t*)&palette->count;
|
||||
*count_ptr = count;
|
||||
return palette;
|
||||
}
|
||||
|
||||
struct palette *cc_realloc_palette(struct palette* ptr, uint8_t count) {
|
||||
if (!ptr) {
|
||||
return cc_alloc_palette(count);
|
||||
}
|
||||
struct palette *palette;
|
||||
if (count > ptr->count) {
|
||||
palette = realloc(ptr, sizeof(struct palette) + count * sizeof(union color));
|
||||
if (!palette) {
|
||||
return NULL;
|
||||
}
|
||||
for (int i = palette->count; i < count; i++) {
|
||||
palette->colors[i] = (union color){ .v = 0 };
|
||||
}
|
||||
} else {
|
||||
palette = ptr;
|
||||
}
|
||||
uint8_t *count_ptr = (uint8_t*)&palette->count;
|
||||
*count_ptr = count;
|
||||
return palette;
|
||||
}
|
||||
|
||||
void cc_assign_palette(struct palette *dst, const struct palette *src) {
|
||||
if (!dst || !src) {
|
||||
return;
|
||||
}
|
||||
int count = dst->count;
|
||||
if (count > src->count) {
|
||||
count = src->count;
|
||||
}
|
||||
for (int i = 0; i < count; ++i) {
|
||||
dst->colors[i] = src->colors[i];
|
||||
}
|
||||
}
|
||||
|
||||
const struct palette cc_default_palette = PALETTE(
|
||||
{ { 0xf0, 0xf0, 0xf0, 0xff } },
|
||||
{ { 0xf2, 0xb2, 0x33, 0xff } },
|
||||
|
|
|
@ -19,6 +19,10 @@ struct palette {
|
|||
#define LENGTHOF(...) (sizeof(__VA_ARGS__) / sizeof(*(__VA_ARGS__)))
|
||||
#define PALETTE(...) { .count = LENGTHOF((union color[]){__VA_ARGS__}), .colors = {__VA_ARGS__} }
|
||||
|
||||
struct palette *cc_alloc_palette(uint8_t count);
|
||||
struct palette *cc_realloc_palette(struct palette* ptr, uint8_t count);
|
||||
void cc_assign_palette(struct palette *dst, const struct palette *src);
|
||||
|
||||
const extern GlyphBitmap cc_font_atlas[256];
|
||||
const extern struct palette cc_default_palette, cc_default_gray_palette;
|
||||
|
||||
|
|
Loading…
Reference in New Issue