cryptic-clock/src/c/settings.cpp
2025-12-13 19:18:16 +01:00

65 lines
2.7 KiB
C++

#include <@rebble/sdk-c-utils/macros.h>
#include "settings.hpp"
// Built-in GColorFromRGBA doesn't seem to work in C++11 :(
#undef GColorFromRGBA
GColor8 GColorFromRGBA(uint8_t red, uint8_t green, uint8_t blue, uint8_t alpha) {
GColor8 res;
res.a = alpha >> 6;
res.r = red >> 6;
res.g = green >> 6;
res.b = blue >> 6;
return res;
}
namespace settings {
namespace {
GColor backgroundColor = GColorWhite;
GColor digitColor = GColorBlack;
GColor frameColor = GColorBlack;
int time_format_override = 0;
int time_12h_start = 1;
int time_24h_start = 0;
}
void Save() {
persist_write_data(MESSAGE_KEY_BACKGROUND_COLOR, &backgroundColor, sizeof(GColor));
persist_write_data(MESSAGE_KEY_DIGIT_COLOR, &digitColor, sizeof(GColor));
persist_write_data(MESSAGE_KEY_FRAME_COLOR, &frameColor, sizeof(GColor));
persist_write_data(MESSAGE_KEY_TIME_FORMAT_OVERRIDE, &time_format_override, sizeof(int));
persist_write_data(MESSAGE_KEY_12H_START, &time_12h_start, sizeof(int));
persist_write_data(MESSAGE_KEY_24H_START, &time_24h_start, sizeof(int));
}
void Load() {
persist_read_data(MESSAGE_KEY_BACKGROUND_COLOR, &backgroundColor, sizeof(GColor));
persist_read_data(MESSAGE_KEY_DIGIT_COLOR, &digitColor, sizeof(GColor));
persist_read_data(MESSAGE_KEY_FRAME_COLOR, &frameColor, sizeof(GColor));
persist_read_data(MESSAGE_KEY_TIME_FORMAT_OVERRIDE, &time_format_override, sizeof(int));
persist_read_data(MESSAGE_KEY_12H_START, &time_12h_start, sizeof(int));
persist_read_data(MESSAGE_KEY_24H_START, &time_24h_start, sizeof(int));
}
void HandleMsg(DictionaryIterator* iter) {
if (auto tuple = dict_find(iter, MESSAGE_KEY_BACKGROUND_COLOR)) backgroundColor = GColorFromHEX(tuple->value->int32);
if (auto tuple = dict_find(iter, MESSAGE_KEY_DIGIT_COLOR)) digitColor = GColorFromHEX(tuple->value->int32);
if (auto tuple = dict_find(iter, MESSAGE_KEY_FRAME_COLOR)) frameColor = GColorFromHEX(tuple->value->int32);
if (auto tuple = dict_find(iter, MESSAGE_KEY_TIME_FORMAT_OVERRIDE)) time_format_override = tuple->value->int8;
if (auto tuple = dict_find(iter, MESSAGE_KEY_12H_START)) time_12h_start = tuple->value->int8;
if (auto tuple = dict_find(iter, MESSAGE_KEY_24H_START)) time_24h_start = tuple->value->int8;
Save();
}
GColor GetBackgroundColor() {return backgroundColor;}
GColor GetDigitColor() {return digitColor;}
GColor GetFrameColor() {return frameColor;}
int FormatHour(int hour) {
const bool is_24h = time_format_override ? time_format_override == 24 : clock_is_24h_style();
if (is_24h) {
return (hour + 24 - time_24h_start) % 24 + time_24h_start;
} else {
return (hour + 12 - time_12h_start) % 12 + time_12h_start;
}
}
}