Fix lost font selector
This commit is contained in:
+4
-2
@@ -100,7 +100,8 @@ inline const std::vector<SettingInfo> list = {
|
|||||||
SettingInfo::DynamicEnum(StrId::STR_FONT_FAMILY, {StrId::STR_BOOKERLY, StrId::STR_NOTO_SANS},
|
SettingInfo::DynamicEnum(StrId::STR_FONT_FAMILY, {StrId::STR_BOOKERLY, StrId::STR_NOTO_SANS},
|
||||||
fontFamilyDynamicGetter, fontFamilyDynamicSetter, "fontFamily", StrId::STR_CAT_READER)
|
fontFamilyDynamicGetter, fontFamilyDynamicSetter, "fontFamily", StrId::STR_CAT_READER)
|
||||||
.withSubcategory(StrId::STR_MENU_READER_FONT)
|
.withSubcategory(StrId::STR_MENU_READER_FONT)
|
||||||
.withSubmenu(StrId::STR_MENU_READER_FONT),
|
.withSubmenu(StrId::STR_MENU_READER_FONT)
|
||||||
|
.withSelectorActivity(),
|
||||||
SettingInfo::Enum(StrId::STR_FONT_SIZE, &CrossPointSettings::fontSize,
|
SettingInfo::Enum(StrId::STR_FONT_SIZE, &CrossPointSettings::fontSize,
|
||||||
{StrId::STR_SMALL, StrId::STR_MEDIUM, StrId::STR_LARGE, StrId::STR_X_LARGE, StrId::STR_TINY},
|
{StrId::STR_SMALL, StrId::STR_MEDIUM, StrId::STR_LARGE, StrId::STR_X_LARGE, StrId::STR_TINY},
|
||||||
"fontSize", StrId::STR_CAT_READER)
|
"fontSize", StrId::STR_CAT_READER)
|
||||||
@@ -116,7 +117,8 @@ inline const std::vector<SettingInfo> list = {
|
|||||||
SettingInfo::DynamicEnum(StrId::STR_TXT_FONT_FAMILY, {StrId::STR_BOOKERLY, StrId::STR_NOTO_SANS},
|
SettingInfo::DynamicEnum(StrId::STR_TXT_FONT_FAMILY, {StrId::STR_BOOKERLY, StrId::STR_NOTO_SANS},
|
||||||
txtFontFamilyDynamicGetter, txtFontFamilyDynamicSetter, "txtFontFamily",
|
txtFontFamilyDynamicGetter, txtFontFamilyDynamicSetter, "txtFontFamily",
|
||||||
StrId::STR_CAT_READER)
|
StrId::STR_CAT_READER)
|
||||||
.withSubmenu(StrId::STR_MENU_TXT_FONT),
|
.withSubmenu(StrId::STR_MENU_TXT_FONT)
|
||||||
|
.withSelectorActivity(),
|
||||||
SettingInfo::Enum(StrId::STR_TXT_FONT_SIZE, &CrossPointSettings::txtFontSize,
|
SettingInfo::Enum(StrId::STR_TXT_FONT_SIZE, &CrossPointSettings::txtFontSize,
|
||||||
{StrId::STR_SMALL, StrId::STR_MEDIUM, StrId::STR_LARGE, StrId::STR_X_LARGE, StrId::STR_TINY},
|
{StrId::STR_SMALL, StrId::STR_MEDIUM, StrId::STR_LARGE, StrId::STR_X_LARGE, StrId::STR_TINY},
|
||||||
"txtFontSize", StrId::STR_CAT_READER)
|
"txtFontSize", StrId::STR_CAT_READER)
|
||||||
|
|||||||
@@ -221,9 +221,18 @@ struct SettingInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool isSeparator = false;
|
bool isSeparator = false;
|
||||||
|
bool usesSelectorActivity = false; // Confirm opens a full-screen selector instead of inline cycling
|
||||||
StrId subcategory = StrId::STR_NONE_OPT; // Triggers a separator row on first use and on change
|
StrId subcategory = StrId::STR_NONE_OPT; // Triggers a separator row on first use and on change
|
||||||
StrId submenu = StrId::STR_NONE_OPT; // Routes item into a submenu; hidden from main list
|
StrId submenu = StrId::STR_NONE_OPT; // Routes item into a submenu; hidden from main list
|
||||||
|
|
||||||
|
// Marks this entry as requiring a full-screen selector activity on Confirm
|
||||||
|
// (instead of inline value cycling). The SettingsActivity / SettingsSubmenuActivity
|
||||||
|
// intercept entries with this flag before toggleValue() is called.
|
||||||
|
SettingInfo& withSelectorActivity() {
|
||||||
|
usesSelectorActivity = true;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
// Inserts a separator row in the parent tab when this item's subcategory first appears or changes.
|
// Inserts a separator row in the parent tab when this item's subcategory first appears or changes.
|
||||||
SettingInfo& withSubcategory(StrId sub) {
|
SettingInfo& withSubcategory(StrId sub) {
|
||||||
subcategory = sub;
|
subcategory = sub;
|
||||||
|
|||||||
@@ -278,23 +278,14 @@ void SettingsActivity::toggleCurrentSetting() {
|
|||||||
const auto& setting = (*currentSettings)[selectedSetting];
|
const auto& setting = (*currentSettings)[selectedSetting];
|
||||||
if (setting.isSeparator) return;
|
if (setting.isSeparator) return;
|
||||||
|
|
||||||
if (setting.type == SettingType::ENUM && setting.nameId == StrId::STR_FONT_FAMILY) {
|
if (setting.usesSelectorActivity) {
|
||||||
startActivityForResult(
|
const auto target = (setting.valueGetter == txtFontFamilyDynamicGetter) ? FontSelectionActivity::Target::TXT
|
||||||
std::make_unique<FontSelectionActivity>(renderer, mappedInput, FontSelectionActivity::Target::EPUB),
|
: FontSelectionActivity::Target::EPUB;
|
||||||
[this](const ActivityResult&) {
|
startActivityForResult(std::make_unique<FontSelectionActivity>(renderer, mappedInput, target),
|
||||||
SETTINGS.saveToFile();
|
[this](const ActivityResult&) {
|
||||||
needsHalfRefresh = true;
|
SETTINGS.saveToFile();
|
||||||
});
|
needsHalfRefresh = true;
|
||||||
return;
|
});
|
||||||
}
|
|
||||||
|
|
||||||
if (setting.type == SettingType::ENUM && setting.nameId == StrId::STR_TXT_FONT_FAMILY) {
|
|
||||||
startActivityForResult(
|
|
||||||
std::make_unique<FontSelectionActivity>(renderer, mappedInput, FontSelectionActivity::Target::TXT),
|
|
||||||
[this](const ActivityResult&) {
|
|
||||||
SETTINGS.saveToFile();
|
|
||||||
needsHalfRefresh = true;
|
|
||||||
});
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
#include "CrossPointSettings.h"
|
#include "CrossPointSettings.h"
|
||||||
#include "FontSelectionActivity.h"
|
#include "FontSelectionActivity.h"
|
||||||
#include "MappedInputManager.h"
|
#include "MappedInputManager.h"
|
||||||
|
#include "SdCardFontGlobals.h"
|
||||||
#include "SettingActionDispatch.h"
|
#include "SettingActionDispatch.h"
|
||||||
#include "components/UITheme.h"
|
#include "components/UITheme.h"
|
||||||
#include "fontIds.h"
|
#include "fontIds.h"
|
||||||
@@ -23,26 +24,6 @@ void SettingsSubmenuActivity::onActionSelected(int index) {
|
|||||||
const auto& setting = menuItems[index];
|
const auto& setting = menuItems[index];
|
||||||
if (setting.isSeparator) return;
|
if (setting.isSeparator) return;
|
||||||
|
|
||||||
if (setting.type == SettingType::ENUM && setting.nameId == StrId::STR_FONT_FAMILY) {
|
|
||||||
startActivityForResult(
|
|
||||||
std::make_unique<FontSelectionActivity>(renderer, mappedInput, FontSelectionActivity::Target::EPUB),
|
|
||||||
[this](const ActivityResult&) {
|
|
||||||
SETTINGS.saveToFile();
|
|
||||||
needsHalfRefresh = true;
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (setting.type == SettingType::ENUM && setting.nameId == StrId::STR_TXT_FONT_FAMILY) {
|
|
||||||
startActivityForResult(
|
|
||||||
std::make_unique<FontSelectionActivity>(renderer, mappedInput, FontSelectionActivity::Target::TXT),
|
|
||||||
[this](const ActivityResult&) {
|
|
||||||
SETTINGS.saveToFile();
|
|
||||||
needsHalfRefresh = true;
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (setting.type == SettingType::ACTION) {
|
if (setting.type == SettingType::ACTION) {
|
||||||
MenuResult menuResult;
|
MenuResult menuResult;
|
||||||
if (setting.action != SettingAction::None) {
|
if (setting.action != SettingAction::None) {
|
||||||
@@ -69,6 +50,26 @@ std::string SettingsSubmenuActivity::getItemValueString(int index) const {
|
|||||||
return MenuListActivity::getItemValueString(index);
|
return MenuListActivity::getItemValueString(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SettingsSubmenuActivity::toggleCurrentItem() {
|
||||||
|
if (selectedIndex < 0 || selectedIndex >= static_cast<int>(menuItems.size())) return;
|
||||||
|
const auto& setting = menuItems[selectedIndex];
|
||||||
|
if (setting.isSeparator) return;
|
||||||
|
|
||||||
|
if (setting.usesSelectorActivity) {
|
||||||
|
const auto target = (setting.valueGetter == txtFontFamilyDynamicGetter) ? FontSelectionActivity::Target::TXT
|
||||||
|
: FontSelectionActivity::Target::EPUB;
|
||||||
|
startActivityForResult(std::make_unique<FontSelectionActivity>(renderer, mappedInput, target),
|
||||||
|
[this](const ActivityResult&) {
|
||||||
|
SETTINGS.saveToFile();
|
||||||
|
needsHalfRefresh = true;
|
||||||
|
requestUpdate();
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
MenuListActivity::toggleCurrentItem();
|
||||||
|
}
|
||||||
|
|
||||||
void SettingsSubmenuActivity::onSettingToggled(int /*index*/) { SETTINGS.saveToFile(); }
|
void SettingsSubmenuActivity::onSettingToggled(int /*index*/) { SETTINGS.saveToFile(); }
|
||||||
|
|
||||||
void SettingsSubmenuActivity::render(RenderLock&&) {
|
void SettingsSubmenuActivity::render(RenderLock&&) {
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ class SettingsSubmenuActivity final : public MenuListActivity {
|
|||||||
|
|
||||||
// MenuListActivity overrides
|
// MenuListActivity overrides
|
||||||
void onEnter() override;
|
void onEnter() override;
|
||||||
|
void toggleCurrentItem() override;
|
||||||
void onActionSelected(int index) override;
|
void onActionSelected(int index) override;
|
||||||
void onSettingToggled(int index) override;
|
void onSettingToggled(int index) override;
|
||||||
std::string getItemValueString(int index) const override;
|
std::string getItemValueString(int index) const override;
|
||||||
|
|||||||
Reference in New Issue
Block a user