1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-10-28 06:56:41 +00:00

Support either two- or three- column layouts for cyrillic journal indices

This commit is contained in:
Andrew Lanzone 2025-07-06 22:51:31 -07:00
parent fdc392435f
commit 952abf5557
2 changed files with 31 additions and 56 deletions

View file

@ -218,6 +218,18 @@ namespace
} }
} }
// Latin = 26 (13 + 13)
mIndexRowCount = 13;
bool isRussian = (mEncoding == ToUTF8::WINDOWS_1251);
if (isRussian)
{
// This should match the logic in createCyrillicJournalIndex
if (Settings::gui().mFontSize < 18)
mIndexRowCount = 15; // Cyrillic = 30 (15 + 15)
else
mIndexRowCount = 10; // Cyrillic = 30 (10 + 10 + 10)
}
mControllerButtons.a = "#{sSelect}"; mControllerButtons.a = "#{sSelect}";
mControllerButtons.x = "#{OMWEngine:JournalQuests}"; mControllerButtons.x = "#{OMWEngine:JournalQuests}";
mControllerButtons.y = "#{sTopics}"; mControllerButtons.y = "#{sTopics}";
@ -701,21 +713,8 @@ namespace
void setIndexControllerFocus(bool focused) void setIndexControllerFocus(bool focused)
{ {
int col, row; int col = mSelectedIndex / mIndexRowCount;
bool isRussian = (mEncoding == ToUTF8::WINDOWS_1251); int row = mSelectedIndex % mIndexRowCount;
if (isRussian)
{
// Cyrillic = 30 (10 + 10 + 10)
col = mSelectedIndex / 10;
row = mSelectedIndex % 10;
}
else
{
// Latin = 26 (13 + 13)
col = mSelectedIndex / 13;
row = mSelectedIndex % 13;
}
mTopicIndexBook->setColour(col, row, 0, focused ? MWGui::journalHeaderColour : MyGUI::Colour::Black); mTopicIndexBook->setColour(col, row, 0, focused ? MWGui::journalHeaderColour : MyGUI::Colour::Black);
} }
@ -831,28 +830,13 @@ namespace
else if (mOptionsMode) else if (mOptionsMode)
{ {
setIndexControllerFocus(false); setIndexControllerFocus(false);
if (isRussian) if (mSelectedIndex % mIndexRowCount == 0)
{ {
// Cyrillic = 30 (10 + 10 + 10) int col = mSelectedIndex / mIndexRowCount;
if (mSelectedIndex == 0) mSelectedIndex = (col * mIndexRowCount) + mIndexRowCount - 1;
mSelectedIndex = 9;
else if (mSelectedIndex == 10)
mSelectedIndex = 19;
else if (mSelectedIndex == 20)
mSelectedIndex = 29;
else
mSelectedIndex--;
} }
else else
{ mSelectedIndex--;
// Latin = 26 (13 + 13)
if (mSelectedIndex == 0)
mSelectedIndex = 12;
else if (mSelectedIndex == 13)
mSelectedIndex = 25;
else
mSelectedIndex--;
}
setIndexControllerFocus(true); setIndexControllerFocus(true);
setText(PageOneNum, 1); // Redraw the list setText(PageOneNum, 1); // Redraw the list
} }
@ -871,28 +855,13 @@ namespace
else if (mOptionsMode) else if (mOptionsMode)
{ {
setIndexControllerFocus(false); setIndexControllerFocus(false);
if (isRussian) if (mSelectedIndex % mIndexRowCount == mIndexRowCount - 1)
{ {
// Cyrillic = 30 (10 + 10 + 10) int col = mSelectedIndex / mIndexRowCount;
if (mSelectedIndex == 9) mSelectedIndex = col * mIndexRowCount;
mSelectedIndex = 0;
else if (mSelectedIndex == 19)
mSelectedIndex = 10;
else if (mSelectedIndex == 29)
mSelectedIndex = 20;
else
mSelectedIndex++;
} }
else else
{ mSelectedIndex++;
// Latin = 26 (13 + 13)
if (mSelectedIndex == 12)
mSelectedIndex = 0;
else if (mSelectedIndex == 25)
mSelectedIndex = 13;
else
mSelectedIndex++;
}
setIndexControllerFocus(true); setIndexControllerFocus(true);
setText(PageOneNum, 1); // Redraw the list setText(PageOneNum, 1); // Redraw the list
} }
@ -908,7 +877,11 @@ namespace
if (isRussian) if (isRussian)
{ {
// Cyrillic = 30 (10 + 10 + 10) // Cyrillic = 30 (10 + 10 + 10)
mSelectedIndex = (mSelectedIndex + 20) % 30; if (mIndexRowCount == 10)
mSelectedIndex = (mSelectedIndex + 20) % 30;
// or Cyrillic = 30 (15 + 15)
else
mSelectedIndex = (mSelectedIndex + 15) % 30;
} }
else else
{ {
@ -929,8 +902,8 @@ namespace
setIndexControllerFocus(false); setIndexControllerFocus(false);
if (isRussian) if (isRussian)
{ {
// Cyrillic = 30 (10 + 10 + 10) // Cyrillic = 30 (10 + 10 + 10) or (15 + 15)
mSelectedIndex = (mSelectedIndex + 10) % 30; mSelectedIndex = (mSelectedIndex + mIndexRowCount) % 30;
} }
else else
{ {

View file

@ -32,6 +32,8 @@ namespace MWGui
std::string_view getWindowIdForLua() const override { return "Journal"; } std::string_view getWindowIdForLua() const override { return "Journal"; }
size_t mIndexRowCount;
std::vector<MyGUI::Button*> mButtons; std::vector<MyGUI::Button*> mButtons;
size_t mSelectedQuest = 0; size_t mSelectedQuest = 0;
size_t mSelectedIndex = 0; size_t mSelectedIndex = 0;