#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; } } }