From 668743acc6f32da9c41d814ec15e32b0d0c2dfb6 Mon Sep 17 00:00:00 2001 From: Dave Allie Date: Mon, 5 Jan 2026 20:23:09 +1100 Subject: [PATCH] Use min/max/step struct for value settings --- src/activities/settings/SettingsActivity.cpp | 10 +++++----- src/activities/settings/SettingsActivity.h | 21 ++++++++++++-------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/activities/settings/SettingsActivity.cpp b/src/activities/settings/SettingsActivity.cpp index db2b82c1..67c63904 100644 --- a/src/activities/settings/SettingsActivity.cpp +++ b/src/activities/settings/SettingsActivity.cpp @@ -27,7 +27,7 @@ const SettingInfo settingsList[settingsCount] = { {"Bookerly", "Noto Sans", "Open Dyslexic"}), SettingInfo::Enum("Reader Font Size", &CrossPointSettings::fontSize, {"Small", "Medium", "Large", "X Large"}), SettingInfo::Enum("Reader Line Spacing", &CrossPointSettings::lineSpacing, {"Tight", "Normal", "Wide"}), - SettingInfo::Value("Reader Screen Margin", &CrossPointSettings::screenMargin, 5, 50), + SettingInfo::Value("Reader Screen Margin", &CrossPointSettings::screenMargin, { 5, 50, 5 }), SettingInfo::Enum("Reader Paragraph Alignment", &CrossPointSettings::paragraphAlignment, {"Justify", "Left", "Center", "Right"}), SettingInfo::Enum("Time to Sleep", &CrossPointSettings::sleepTimeout, @@ -53,7 +53,7 @@ void SettingsActivity::onEnter() { updateRequired = true; xTaskCreate(&SettingsActivity::taskTrampoline, "SettingsActivityTask", - 2048, // Stack size + 4096, // Stack size this, // Parameters 1, // Priority &displayTaskHandle // Task handle @@ -125,10 +125,10 @@ void SettingsActivity::toggleCurrentSetting() { // Decreasing would also be nice for large ranges I think but oh well can't have everything const int8_t currentValue = SETTINGS.*(setting.valuePtr); // Wrap to minValue if exceeding setting value boundary - if (currentValue == setting.maxValue) { - SETTINGS.*(setting.valuePtr) = setting.minValue; + if (currentValue + setting.valueRange.step > setting.valueRange.max) { + SETTINGS.*(setting.valuePtr) = setting.valueRange.min; } else { - SETTINGS.*(setting.valuePtr) = currentValue + 1; + SETTINGS.*(setting.valuePtr) = currentValue + setting.valueRange.step; } } else if (setting.type == SettingType::ACTION) { if (std::string(setting.name) == "Check for updates") { diff --git a/src/activities/settings/SettingsActivity.h b/src/activities/settings/SettingsActivity.h index 4c2164a9..4cddacf5 100644 --- a/src/activities/settings/SettingsActivity.h +++ b/src/activities/settings/SettingsActivity.h @@ -20,23 +20,28 @@ struct SettingInfo { uint8_t CrossPointSettings::* valuePtr; // Pointer to member in CrossPointSettings (for TOGGLE/ENUM/VALUE) std::vector enumValues; - // Bounds for VALUE type settings - int8_t minValue; - uint8_t maxValue; + struct ValueRange { + uint8_t min; + uint8_t max; + uint8_t step; + }; + // Bounds/step for VALUE type settings + ValueRange valueRange; + // Static constructors static SettingInfo Toggle(const char* name, uint8_t CrossPointSettings::* ptr) { - return {name, SettingType::TOGGLE, ptr, {}, 0, 0}; + return {name, SettingType::TOGGLE, ptr}; } static SettingInfo Enum(const char* name, uint8_t CrossPointSettings::* ptr, std::vector values) { - return {name, SettingType::ENUM, ptr, std::move(values), 0, 0}; + return {name, SettingType::ENUM, ptr, std::move(values)}; } - static SettingInfo Action(const char* name) { return {name, SettingType::ACTION, nullptr, {}, 0, 0}; } + static SettingInfo Action(const char* name) { return {name, SettingType::ACTION, nullptr}; } - static SettingInfo Value(const char* name, uint8_t CrossPointSettings::* ptr, int8_t minValue, uint8_t maxValue) { - return {name, SettingType::VALUE, ptr, {}, minValue, maxValue}; + static SettingInfo Value(const char* name, uint8_t CrossPointSettings::* ptr, const ValueRange valueRange) { + return {name, SettingType::VALUE, ptr, {}, valueRange}; } };