65 lines
2.7 KiB
C++
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;
|
|
}
|
|
}
|
|
} |