Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/client/StarClientApplication.cpp5
-rw-r--r--source/frontend/StarGraphicsMenu.cpp35
-rw-r--r--source/frontend/StarGraphicsMenu.hpp1
3 files changed, 32 insertions, 9 deletions
diff --git a/source/client/StarClientApplication.cpp b/source/client/StarClientApplication.cpp
index ed3651c..9b53a29 100644
--- a/source/client/StarClientApplication.cpp
+++ b/source/client/StarClientApplication.cpp
@@ -63,6 +63,7 @@ Json const AdditionalDefaultConfiguration = Json::parseJson(R"JSON(
"antiAliasing" : false,
"zoomLevel" : 3.0,
"cameraSpeedFactor" : 1.0,
+ "interfaceScale" : 0,
"speechBubbles" : true,
"title" : {
@@ -371,7 +372,9 @@ void ClientApplication::render() {
renderer->setMultiSampling(config->get("antiAliasing").optBool().value(false) ? 4 : 0);
renderer->switchEffectConfig("interface");
- if (m_guiContext->windowWidth() >= m_crossoverRes[0] && m_guiContext->windowHeight() >= m_crossoverRes[1])
+ if (auto interfaceScale = config->get("interfaceScale").optUInt().value())
+ m_guiContext->setInterfaceScale(interfaceScale);
+ else if (m_guiContext->windowWidth() >= m_crossoverRes[0] && m_guiContext->windowHeight() >= m_crossoverRes[1])
m_guiContext->setInterfaceScale(m_maxInterfaceScale);
else
m_guiContext->setInterfaceScale(m_minInterfaceScale);
diff --git a/source/frontend/StarGraphicsMenu.cpp b/source/frontend/StarGraphicsMenu.cpp
index a3d78e7..6713c72 100644
--- a/source/frontend/StarGraphicsMenu.cpp
+++ b/source/frontend/StarGraphicsMenu.cpp
@@ -28,6 +28,11 @@ GraphicsMenu::GraphicsMenu() {
m_localChanges.set("fullscreenResolution", jsonFromVec2U(res));
syncGui();
});
+ reader.registerCallback("interfaceScaleSlider", [=](Widget*) {
+ auto interfaceScaleSlider = fetchChild<SliderBarWidget>("interfaceScaleSlider");
+ m_localChanges.set("interfaceScale", (uint64_t)m_interfaceScaleList[interfaceScaleSlider->val()]);
+ syncGui();
+ });
reader.registerCallback("zoomSlider", [=](Widget*) {
auto zoomSlider = fetchChild<SliderBarWidget>("zoomSlider");
m_localChanges.set("zoomLevel", m_zoomList[zoomSlider->val()]);
@@ -103,12 +108,14 @@ GraphicsMenu::GraphicsMenu() {
Json paneLayout = assets->json("/interface/windowconfig/graphicsmenu.config:paneLayout");
+ m_interfaceScaleList = jsonToIntList(assets->json("/interface/windowconfig/graphicsmenu.config:interfaceScaleList"));
m_resList = jsonToVec2UList(assets->json("/interface/windowconfig/graphicsmenu.config:resolutionList"));
m_zoomList = jsonToFloatList(assets->json("/interface/windowconfig/graphicsmenu.config:zoomList"));
m_cameraSpeedList = jsonToFloatList(assets->json("/interface/windowconfig/graphicsmenu.config:cameraSpeedList"));
reader.construct(paneLayout, this);
+ fetchChild<SliderBarWidget>("interfaceScaleSlider")->setRange(0, m_interfaceScaleList.size() - 1, 1);
fetchChild<SliderBarWidget>("resSlider")->setRange(0, m_resList.size() - 1, 1);
fetchChild<SliderBarWidget>("zoomSlider")->setRange(0, m_zoomList.size() - 1, 1);
fetchChild<SliderBarWidget>("cameraSpeedSlider")->setRange(0, m_cameraSpeedList.size() - 1, 1);
@@ -143,6 +150,7 @@ void GraphicsMenu::toggleFullscreen() {
StringList const GraphicsMenu::ConfigKeys = {
"fullscreenResolution",
+ "interfaceScale",
"zoomLevel",
"cameraSpeedFactor",
"speechBubbles",
@@ -180,27 +188,38 @@ void GraphicsMenu::syncGui() {
}
fetchChild<LabelWidget>("resValueLabel")->setText(strf("{}x{}", res[0], res[1]));
+ auto interfaceScaleSlider = fetchChild<SliderBarWidget>("interfaceScaleSlider");
+ auto interfaceScale = m_localChanges.get("interfaceScale").optUInt().value();
+ auto interfaceScaleIt = std::lower_bound(m_interfaceScaleList.begin(), m_interfaceScaleList.end(), interfaceScale);
+ if (interfaceScaleIt != m_interfaceScaleList.end()) {
+ size_t scaleIndex = interfaceScaleIt - m_interfaceScaleList.begin();
+ interfaceScaleSlider->setVal(std::min(scaleIndex, m_interfaceScaleList.size() - 1), false);
+ } else {
+ interfaceScaleSlider->setVal(m_interfaceScaleList.size() - 1);
+ }
+ fetchChild<LabelWidget>("interfaceScaleValueLabel")->setText(interfaceScale ? toString(interfaceScale) : "AUTO");
+
auto zoomSlider = fetchChild<SliderBarWidget>("zoomSlider");
- auto zoomIt = std::lower_bound(m_zoomList.begin(), m_zoomList.end(), m_localChanges.get("zoomLevel").toFloat());
+ auto zoomLevel = m_localChanges.get("zoomLevel").toFloat();
+ auto zoomIt = std::lower_bound(m_zoomList.begin(), m_zoomList.end(), zoomLevel);
if (zoomIt != m_zoomList.end()) {
size_t zoomIndex = zoomIt - m_zoomList.begin();
- zoomIndex = std::min(zoomIndex, m_zoomList.size() - 1);
- zoomSlider->setVal(zoomIndex, false);
+ zoomSlider->setVal(std::min(zoomIndex, m_zoomList.size() - 1), false);
} else {
zoomSlider->setVal(m_zoomList.size() - 1);
}
- fetchChild<LabelWidget>("zoomValueLabel")->setText(strf("{}x", m_localChanges.get("zoomLevel").toFloat()));
+ fetchChild<LabelWidget>("zoomValueLabel")->setText(strf("{}x", zoomLevel));
auto cameraSpeedSlider = fetchChild<SliderBarWidget>("cameraSpeedSlider");
- auto speedIt = std::lower_bound(m_cameraSpeedList.begin(), m_cameraSpeedList.end(), m_localChanges.get("cameraSpeedFactor").toFloat());
+ auto cameraSpeedFactor = m_localChanges.get("cameraSpeedFactor").toFloat();
+ auto speedIt = std::lower_bound(m_cameraSpeedList.begin(), m_cameraSpeedList.end(), cameraSpeedFactor);
if (speedIt != m_cameraSpeedList.end()) {
size_t speedIndex = speedIt - m_cameraSpeedList.begin();
- speedIndex = std::min(speedIndex, m_cameraSpeedList.size() - 1);
- cameraSpeedSlider->setVal(speedIndex, false);
+ cameraSpeedSlider->setVal(std::min(speedIndex, m_cameraSpeedList.size() - 1), false);
} else {
cameraSpeedSlider->setVal(m_cameraSpeedList.size() - 1);
}
- fetchChild<LabelWidget>("cameraSpeedValueLabel")->setText(strf("{}x", m_localChanges.get("cameraSpeedFactor").toFloat()));
+ fetchChild<LabelWidget>("cameraSpeedValueLabel")->setText(strf("{}x", cameraSpeedFactor));
fetchChild<ButtonWidget>("speechBubbleCheckbox")->setChecked(m_localChanges.get("speechBubbles").toBool());
fetchChild<ButtonWidget>("interactiveHighlightCheckbox")->setChecked(m_localChanges.get("interactiveHighlight").toBool());
diff --git a/source/frontend/StarGraphicsMenu.hpp b/source/frontend/StarGraphicsMenu.hpp
index 20db95c..6d03652 100644
--- a/source/frontend/StarGraphicsMenu.hpp
+++ b/source/frontend/StarGraphicsMenu.hpp
@@ -25,6 +25,7 @@ private:
void applyWindowSettings();
List<Vec2U> m_resList;
+ List<int> m_interfaceScaleList;
List<float> m_zoomList;
List<float> m_cameraSpeedList;