1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-11-28 08:48:48 +02:00

Added separate borderless & exclusive fullscreen options

This commit is contained in:
Ivan Savenko 2023-05-15 19:44:02 +03:00
parent f2dfd6de42
commit d18b240d6d
10 changed files with 58 additions and 43 deletions

View File

@ -46,8 +46,10 @@
"vcmi.systemOptions.otherGroup" : "Other Settings", // unused right now
"vcmi.systemOptions.townsGroup" : "Town Screen",
"vcmi.systemOptions.fullscreenButton.hover" : "Fullscreen",
"vcmi.systemOptions.fullscreenButton.help" : "{Fullscreen}\n\nIf selected, VCMI will run in fullscreen mode, otherwise it will run in windowed mode",
"vcmi.systemOptions.fullscreenBorderless.hover" : "Fullscreen (borderless)",
"vcmi.systemOptions.fullscreenBorderless.help" : "{Borderless Fullscreen}\n\nIf selected, VCMI will run in borderless fullscreen mode. In this mode, game will always use same resolution as desktop, ignoring selected resolution.",
"vcmi.systemOptions.fullscreenExclusive.hover" : "Fullscreen (exclusive)",
"vcmi.systemOptions.fullscreenExclusive.help" : "{Fullscreen}\n\nIf selected, VCMI will run in exclusive fullscreen mode. In this mode, game will change resolution of monitor to selected resolution.",
"vcmi.systemOptions.resolutionButton.hover" : "Resolution: %wx%h",
"vcmi.systemOptions.resolutionButton.help" : "{Select Resolution}\n\nChange in-game screen resolution.",
"vcmi.systemOptions.resolutionMenu.hover" : "Select Resolution",

View File

@ -46,8 +46,6 @@
"vcmi.systemOptions.otherGroup" : "Andere Einstellungen", // unused right now
"vcmi.systemOptions.townsGroup" : "Stadt-Bildschirm",
"vcmi.systemOptions.fullscreenButton.hover" : "Vollbild",
"vcmi.systemOptions.fullscreenButton.help" : "{Vollbild}\n\n Wenn ausgewählt wird VCMI im Vollbildmodus laufen, ansonsten im Fenstermodus",
"vcmi.systemOptions.resolutionButton.hover" : "Auflösung: %wx%h",
"vcmi.systemOptions.resolutionButton.help" : "{Wähle Auflösung}\n\n Ändert die Spielauflösung. Spielneustart ist erforderlich um neue Auflösung zu übernehmen.",
"vcmi.systemOptions.resolutionMenu.hover" : "Wähle Auflösung",

View File

@ -37,13 +37,10 @@
"vcmi.systemOptions.otherGroup" : "Inne ustawienia", // unused right now
"vcmi.systemOptions.townsGroup" : "Ekran miasta",
"vcmi.systemOptions.fullscreenButton.hover" : "Pełny ekran",
"vcmi.systemOptions.fullscreenButton.help" : "{Pełny ekran}\n\n Po wybraniu VCMI uruchomi się w trybie pełnoekranowym, w przeciwnym wypadku uruchomi się w oknie",
"vcmi.systemOptions.resolutionButton.hover" : "Rozdzielczość: %wx%h",
"vcmi.systemOptions.resolutionButton.help" : "{Wybierz rozdzielczość}\n\n Zmień rozdzielczość ekranu w grze. Restart gry jest wymagany, by zmiany zostały uwzględnione.",
"vcmi.systemOptions.resolutionMenu.hover" : "Wybierz rozdzielczość",
"vcmi.systemOptions.resolutionMenu.help" : "Zmień rozdzielczość ekranu w grze.",
"vcmi.systemOptions.fullscreenFailed" : "{Pełny ekran}\n\n Nieudane przełączenie w tryb pełnoekranowy! Obecna rozdzielczość nie jest wspierana przez wyświetlacz!",
"vcmi.systemOptions.framerateButton.hover" : "Pokaż FPS",
"vcmi.systemOptions.framerateButton.help" : "{Pokaż FPS}\n\n Przełącza widoczność licznika klatek na sekundę (FPS) w rogu okna gry.",

View File

@ -37,13 +37,10 @@
"vcmi.systemOptions.otherGroup" : "Иное", // unused right now
"vcmi.systemOptions.townsGroup" : "Экран города",
"vcmi.systemOptions.fullscreenButton.hover" : "Полный экран",
"vcmi.systemOptions.fullscreenButton.help" : "{Полный экран}\n\n Если выбрано, то VCMI будет работать в полноэкранном режиме, если нет - в окне",
"vcmi.systemOptions.resolutionButton.hover" : "Разрешение %wx%h",
"vcmi.systemOptions.resolutionButton.help" : "{Разрешение экрана}\n\n Изменение разрешения экрана. Для применения нового разрешения требуется перезапуск игры.",
"vcmi.systemOptions.resolutionMenu.hover" : "Выбрать разрешения экрана",
"vcmi.systemOptions.resolutionMenu.help" : "Изменение разрешения экрана в игре.",
"vcmi.systemOptions.fullscreenFailed" : "{Полный экран}\n\n Невозможно переключиться в полноэкранный режим - выбранное разрешение не поддерживается дисплеем!",
"vcmi.systemOptions.framerateButton.hover" : "Показывать частоту кадров",
"vcmi.systemOptions.framerateButton.help" : "{Показывать частоту кадров}\n\n Включить счетчик частоты кадров в углу игрового клиента",

View File

@ -46,13 +46,10 @@
"vcmi.systemOptions.otherGroup" : "Otras configuraciones", // actualmente no utilizada
"vcmi.systemOptions.townsGroup" : "Pantalla de la ciudad",
"vcmi.systemOptions.fullscreenButton.hover" : "Pantalla completa",
"vcmi.systemOptions.fullscreenButton.help" : "{Pantalla completa}\n\n Si se selecciona, VCMI se ejecutará en modo de pantalla completa, de lo contrario se ejecutará en ventana",
"vcmi.systemOptions.resolutionButton.hover" : "Resolución: %wx%h",
"vcmi.systemOptions.resolutionButton.help" : "{Seleccionar resolución}\n\n Cambia la resolución de la pantalla del juego. Se requiere reiniciar el juego para aplicar la nueva resolución.",
"vcmi.systemOptions.resolutionMenu.hover" : "Seleccionar resolución",
"vcmi.systemOptions.resolutionMenu.help" : "Cambia la resolución de la pantalla del juego.",
"vcmi.systemOptions.fullscreenFailed" : "{Pantalla completa}\n\n ¡Fallo al cambiar a modo de pantalla completa! ¡La resolución actual no es compatible con la pantalla!",
"vcmi.systemOptions.framerateButton.hover" : "Mostrar FPS",
"vcmi.systemOptions.framerateButton.help" : "{Mostrar FPS}\n\n Muestra el contador de Frames Por Segundo en la esquina de la ventana del juego.",

View File

@ -38,15 +38,18 @@
"vcmi.systemOptions.otherGroup" : "Інші налаштування",
"vcmi.systemOptions.townsGroup" : "Екран міста",
"vcmi.adventureOptions.infoBarPick.help" : "{Повідомлення у панелі статусу}\n\nЗа можливості, повідомлення про відвідування об'єктів карти пригод будуть відображені у панелі статусу замість окремого вікна",
"vcmi.adventureOptions.infoBarPick.hover" : "Повідомлення у панелі статусу",
"vcmi.systemOptions.fullscreenBorderless.hover" : "На весь екран (безрамкове вікно)",
"vcmi.systemOptions.fullscreenBorderless.help" : "{На весь екран (безрамкове вікно)}\n\nЯкщо обрано, VCMI працюватиме у режимі безрамкового вікна на весь екран. У цьому режимі гра завжди використовує ту саму роздільну здатність, що й робочий стіл, ігноруючи вибрану роздільну здатність",
"vcmi.systemOptions.fullscreenExclusive.hover" : "На весь екран (ексклюзивний режим)",
"vcmi.systemOptions.fullscreenExclusive.help" : "{На весь екран (ексклюзивний режим)}\n\nnЯкщо вибрано, VCMI працюватиме у ексклюзивному повноекранному режимі. У цьому режимі гра змінюватиме роздільну здатність монітора на вибрану роздільну здатність",
"vcmi.adventureOptions.infoBarPick.help" : "{Повідомлення у панелі статусу}\n\nЗа можливості, повідомлення про відвідування об'єктів карти пригод будуть відображені у панелі статусу замість окремого вікна",
"vcmi.adventureOptions.infoBarPick.hover" : "Повідомлення у панелі статусу",
"vcmi.systemOptions.fullscreenButton.hover" : "Повноекранний режим",
"vcmi.systemOptions.fullscreenButton.help" : "{Повноекранний режим}\n\n Якщо обрано, VCMI буде запускатися в режимі на весь екран, інакше — віконний режим",
"vcmi.systemOptions.resolutionButton.hover" : "Роздільна здатність: %wx%h",
"vcmi.systemOptions.resolutionButton.help" : "{Роздільна здатність}\n\n Зміна розширення екрану в грі. Аби зміни набули чинності необхідно перезавантажити гру.",
"vcmi.systemOptions.resolutionMenu.hover" : "Обрати роздільну здатність",
"vcmi.systemOptions.resolutionMenu.help" : "Змінити роздільну здатність екрану в грі.",
"vcmi.systemOptions.fullscreenFailed" : "{Повноекранний режим}\n\n Не вдалося перейти в повноекранний режим! Поточна роздільна здатність не підтримується дисплеєм!",
"vcmi.systemOptions.framerateButton.hover" : "Лічильник кадрів",
"vcmi.systemOptions.framerateButton.help" : "{Лічильник кадрів}\n\n Перемикає видимість лічильника кадрів на секунду у кутку ігрового вікна",

View File

@ -297,7 +297,8 @@ std::shared_ptr<CToggleGroup> InterfaceObjectConfigurable::buildToggleGroup(cons
for(const auto & item : config["items"].Vector())
{
itemIdx = item["index"].isNull() ? itemIdx + 1 : item["index"].Integer();
group->addToggle(itemIdx, std::dynamic_pointer_cast<CToggleBase>(buildWidget(item)));
auto newToggle = std::dynamic_pointer_cast<CToggleButton>(buildWidget(item));
group->addToggle(itemIdx, newToggle);
}
}
if(!config["selected"].isNull())

View File

@ -102,9 +102,13 @@ GeneralOptionsTab::GeneralOptionsTab()
targetLabel->setText(std::to_string(value) + "%");
});
//settings that do not belong to base game:
addCallback("fullscreenChanged", [this](bool value)
addCallback("fullscreenBorderlessChanged", [this](bool value)
{
setFullscreenMode(value);
setFullscreenMode(value, false);
});
addCallback("fullscreenExclusiveChanged", [this](bool value)
{
setFullscreenMode(value, true);
});
addCallback("setGameResolution", [this](int dummyValue)
{
@ -135,7 +139,8 @@ GeneralOptionsTab::GeneralOptionsTab()
const auto & currentResolution = settings["video"]["resolution"];
std::shared_ptr<CLabel> resolutionLabel = widget<CLabel>("resolutionLabel");
resolutionLabel->setText(resolutionToLabelString(currentResolution["width"].Integer(), currentResolution["height"].Integer()));
if (resolutionLabel)
resolutionLabel->setText(resolutionToLabelString(currentResolution["width"].Integer(), currentResolution["height"].Integer()));
std::shared_ptr<CLabel> scalingLabel = widget<CLabel>("scalingLabel");
scalingLabel->setText(scalingToLabelString(currentResolution["scaling"].Integer()));
@ -143,12 +148,13 @@ GeneralOptionsTab::GeneralOptionsTab()
std::shared_ptr<CToggleButton> spellbookAnimationCheckbox = widget<CToggleButton>("spellbookAnimationCheckbox");
spellbookAnimationCheckbox->setSelected(settings["video"]["spellbookAnimation"].Bool());
std::shared_ptr<CToggleButton> fullscreenCheckbox = widget<CToggleButton>("fullscreenCheckbox");
fullscreenCheckbox->setSelected(settings["video"]["fullscreen"].Bool());
onFullscreenChanged([&](const JsonNode &newState) //used when pressing F4 etc. to change fullscreen checkbox state
{
widget<CToggleButton>("fullscreenCheckbox")->setSelected(newState.Bool());
});
std::shared_ptr<CToggleButton> fullscreenBorderlessCheckbox = widget<CToggleButton>("fullscreenBorderlessCheckbox");
if (fullscreenBorderlessCheckbox)
fullscreenBorderlessCheckbox->setSelected(settings["video"]["fullscreen"].Bool() && !settings["video"]["realFullscreen"].Bool());
std::shared_ptr<CToggleButton> fullscreenExclusiveCheckbox = widget<CToggleButton>("fullscreenExclusiveCheckbox");
if (fullscreenExclusiveCheckbox)
fullscreenExclusiveCheckbox->setSelected(settings["video"]["fullscreen"].Bool() && settings["video"]["realFullscreen"].Bool());
std::shared_ptr<CToggleButton> framerateCheckbox = widget<CToggleButton>("framerateCheckbox");
framerateCheckbox->setSelected(settings["video"]["showfps"].Bool());
@ -170,16 +176,6 @@ GeneralOptionsTab::GeneralOptionsTab()
std::shared_ptr<CLabel> soundVolumeLabel = widget<CLabel>("soundValueLabel");
soundVolumeLabel->setText(std::to_string(CCS->soundh->getVolume()) + "%");
#ifdef VCMI_MOBILE
// On mobile platforms, VCMI always uses OS screen resolutions
// Players can control UI size via "Interface Scaling" option instead
std::shared_ptr<CButton> resolutionButton = widget<CButton>("resolutionButton");
resolutionButton->disable();
resolutionLabel->disable();
fullscreenCheckbox->block(true);
#endif
}
void GeneralOptionsTab::selectGameResolution()
@ -224,9 +220,19 @@ void GeneralOptionsTab::setGameResolution(int index)
widget<CLabel>("resolutionLabel")->setText(resolutionToLabelString(resolution.x, resolution.y));
}
void GeneralOptionsTab::setFullscreenMode(bool on)
void GeneralOptionsTab::setFullscreenMode(bool on, bool exclusive)
{
setBoolSetting("video", "realFullscreen", exclusive);
setBoolSetting("video", "fullscreen", on);
std::shared_ptr<CToggleButton> fullscreenExclusiveCheckbox = widget<CToggleButton>("fullscreenExclusiveCheckbox");
std::shared_ptr<CToggleButton> fullscreenBorderlessCheckbox = widget<CToggleButton>("fullscreenBorderlessCheckbox");
if (fullscreenBorderlessCheckbox)
fullscreenBorderlessCheckbox->setSelected(on && !exclusive);
if (fullscreenExclusiveCheckbox)
fullscreenExclusiveCheckbox->setSelected(on && exclusive);
}
void GeneralOptionsTab::selectGameScaling()

View File

@ -21,7 +21,7 @@ private:
std::vector<Point> supportedResolutions;
std::vector<int> supportedScaling;
void setFullscreenMode( bool on);
void setFullscreenMode( bool on, bool exclusive);
void selectGameResolution();
void setGameResolution(int index);

View File

@ -32,14 +32,20 @@
"items" : [
{
"name": "resolutionLabel",
"text": "vcmi.systemOptions.resolutionButton.hover"
"text": "vcmi.systemOptions.resolutionButton.hover",
"created" : "desktop"
},
{
"name": "scalingLabel",
"text": "vcmi.systemOptions.scalingButton.hover"
},
{
"text": "vcmi.systemOptions.fullscreenButton.hover"
"text": "vcmi.systemOptions.fullscreenBorderless.hover",
"created" : "desktop"
},
{
"text": "vcmi.systemOptions.fullscreenExclusive.hover",
"created" : "desktop"
},
{
"text": "vcmi.systemOptions.framerateButton.hover"
@ -59,6 +65,7 @@
"type": "buttonGear",
"help": "vcmi.systemOptions.resolutionButton",
"callback": "setGameResolution",
"created" : "desktop"
},
{
"name": "scalingButton",
@ -67,9 +74,16 @@
"callback": "setGameScaling",
},
{
"name": "fullscreenCheckbox",
"help": "vcmi.systemOptions.fullscreenButton",
"callback": "fullscreenChanged"
"name": "fullscreenBorderlessCheckbox",
"help": "vcmi.systemOptions.fullscreenBorderless",
"callback": "fullscreenBorderlessChanged"
"created" : "desktop"
},
{
"name": "fullscreenExclusiveCheckbox",
"help": "vcmi.systemOptions.fullscreenExclusive",
"callback": "fullscreenExclusiveChanged"
"created" : "desktop"
},
{
"name": "framerateCheckbox",