From 11845e7d9b764a3de00a61041b45665812a92226 Mon Sep 17 00:00:00 2001 From: cody glassman Date: Wed, 25 May 2022 19:07:01 -0700 Subject: [PATCH 1/2] improve layout of postprocessor hud --- apps/openmw/mwgui/postprocessorhud.cpp | 26 ++++++++++-------- apps/openmw/mwgui/postprocessorhud.hpp | 5 ++-- components/fx/widgets.hpp | 2 ++ files/mygui/openmw_postprocessor_hud.layout | 27 +------------------ files/mygui/openmw_postprocessor_hud.skin.xml | 2 +- 5 files changed, 21 insertions(+), 41 deletions(-) diff --git a/apps/openmw/mwgui/postprocessorhud.cpp b/apps/openmw/mwgui/postprocessorhud.cpp index 5e46f1e735..777468e8b0 100644 --- a/apps/openmw/mwgui/postprocessorhud.cpp +++ b/apps/openmw/mwgui/postprocessorhud.cpp @@ -59,7 +59,6 @@ namespace MWGui getWidget(mTabConfiguration, "TabConfiguration"); getWidget(mActiveList, "ActiveList"); getWidget(mInactiveList, "InactiveList"); - getWidget(mModeToggle, "ModeToggle"); getWidget(mConfigLayout, "ConfigLayout"); getWidget(mFilter, "Filter"); getWidget(mButtonActivate, "ButtonActivate"); @@ -78,8 +77,6 @@ namespace MWGui mActiveList->eventListChangePosition += MyGUI::newDelegate(this, &PostProcessorHud::notifyListChangePosition); mInactiveList->eventListChangePosition += MyGUI::newDelegate(this, &PostProcessorHud::notifyListChangePosition); - mModeToggle->eventMouseButtonClick += MyGUI::newDelegate(this, &PostProcessorHud::notifyModeToggle); - mFilter->eventEditTextChange += MyGUI::newDelegate(this, &PostProcessorHud::notifyFilterChanged); mMainWidget->castType()->eventWindowChangeCoord += MyGUI::newDelegate(this, &PostProcessorHud::notifyWindowResize); @@ -91,10 +88,14 @@ namespace MWGui mShaderInfo->setEditReadOnly(true); mShaderInfo->setEditWordWrap(true); mShaderInfo->setEditMultiLine(true); + mShaderInfo->setNeedMouseFocus(false); mConfigLayout->setVisibleVScroll(true); mConfigArea = mConfigLayout->createWidget("", {}, MyGUI::Align::Default); + + mConfigLayout->eventMouseWheel += MyGUI::newDelegate(this, &PostProcessorHud::notifyMouseWheel); + mConfigArea->eventMouseWheel += MyGUI::newDelegate(this, &PostProcessorHud::notifyMouseWheel); } void PostProcessorHud::notifyFilterChanged(MyGUI::EditBox* sender) @@ -225,12 +226,6 @@ namespace MWGui } } - void PostProcessorHud::notifyModeToggle(MyGUI::Widget* sender) - { - Settings::ShaderManager::Mode prev = Settings::ShaderManager::get().getMode(); - toggleMode(prev == Settings::ShaderManager::Mode::Debug ? Settings::ShaderManager::Mode::Normal : Settings::ShaderManager::Mode::Debug); - } - void PostProcessorHud::onOpen() { toggleMode(Settings::ShaderManager::Mode::Debug); @@ -267,6 +262,15 @@ namespace MWGui mConfigLayout->setSize(mConfigLayout->getWidth(), mConfigLayout->getParentSize().height - padding2); } + void PostProcessorHud::notifyMouseWheel(MyGUI::Widget *sender, int rel) + { + int offset = mConfigLayout->getViewOffset().top + rel * 0.3; + if (offset > 0) + mConfigLayout->setViewOffset(MyGUI::IntPoint(0, 0)); + else + mConfigLayout->setViewOffset(MyGUI::IntPoint(0, static_cast(offset))); + } + void PostProcessorHud::select(ListWrapper* list, size_t index) { list->setIndexSelected(index); @@ -277,8 +281,6 @@ namespace MWGui { Settings::ShaderManager::get().setMode(mode); - mModeToggle->setCaptionWithReplacing(mode == Settings::ShaderManager::Mode::Debug ? "#{sOn}" :"#{sOff}"); - MWBase::Environment::get().getWorld()->getPostProcessor()->toggleMode(); if (!isVisible()) @@ -353,6 +355,7 @@ namespace MWGui MyGUI::Button* resetButton = mConfigArea->createWidget("MW_Button", {0,0,0,24}, MyGUI::Align::Default); resetButton->setCaption("Reset all to default"); resetButton->setTextAlign(MyGUI::Align::Center); + resetButton->eventMouseWheel += MyGUI::newDelegate(this, &PostProcessorHud::notifyMouseWheel); resetButton->eventMouseButtonClick += MyGUI::newDelegate(this, &PostProcessorHud::notifyResetButtonClicked); } @@ -366,6 +369,7 @@ namespace MWGui fx::Widgets::UniformBase* uwidget = mConfigArea->createWidget("MW_UniformEdit", {0,0,0,22}, MyGUI::Align::Default); uwidget->init(uniform); + uwidget->getLabel()->eventMouseWheel += MyGUI::newDelegate(this, &PostProcessorHud::notifyMouseWheel); } } diff --git a/apps/openmw/mwgui/postprocessorhud.hpp b/apps/openmw/mwgui/postprocessorhud.hpp index 44baf79b63..116d53c2e0 100644 --- a/apps/openmw/mwgui/postprocessorhud.hpp +++ b/apps/openmw/mwgui/postprocessorhud.hpp @@ -52,8 +52,6 @@ namespace MWGui void updateConfigView(const std::string& name); - void notifyModeToggle(MyGUI::Widget* sender); - void notifyResetButtonClicked(MyGUI::Widget* sender); void notifyListChangePosition(MyGUI::ListBox* sender, size_t index); @@ -68,6 +66,8 @@ namespace MWGui void notifyShaderDownPressed(MyGUI::Widget* sender); + void notifyMouseWheel(MyGUI::Widget *sender, int rel); + enum class Direction { Up, @@ -97,7 +97,6 @@ namespace MWGui MyGUI::Widget* mConfigArea; MyGUI::EditBox* mFilter; - Gui::AutoSizedButton* mModeToggle; Gui::AutoSizedEditBox* mShaderInfo; std::string mOverrideHint; diff --git a/components/fx/widgets.hpp b/components/fx/widgets.hpp index f15e676fb6..ed50e6d4d4 100644 --- a/components/fx/widgets.hpp +++ b/components/fx/widgets.hpp @@ -249,6 +249,8 @@ namespace fx void addItem(EditBase* item); + Gui::AutoSizedTextBox* getLabel() { return mLabel; } + private: void notifyResetClicked(MyGUI::Widget* sender); diff --git a/files/mygui/openmw_postprocessor_hud.layout b/files/mygui/openmw_postprocessor_hud.layout index 1030c83d2c..7a04a2f8b0 100644 --- a/files/mygui/openmw_postprocessor_hud.layout +++ b/files/mygui/openmw_postprocessor_hud.layout @@ -28,7 +28,7 @@ - + @@ -103,31 +103,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/files/mygui/openmw_postprocessor_hud.skin.xml b/files/mygui/openmw_postprocessor_hud.skin.xml index bf3a470b94..ad9a5667be 100644 --- a/files/mygui/openmw_postprocessor_hud.skin.xml +++ b/files/mygui/openmw_postprocessor_hud.skin.xml @@ -59,7 +59,7 @@ - + From 424b828ff86ac49776877786bb4d83323440a757 Mon Sep 17 00:00:00 2001 From: cody glassman Date: Wed, 25 May 2022 19:17:31 -0700 Subject: [PATCH 2/2] add ability to use display names --- components/fx/technique.cpp | 5 +++ components/fx/types.hpp | 1 + components/fx/widgets.cpp | 2 +- .../source/reference/postprocessing/omwfx.rst | 34 ++++++++++--------- 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/components/fx/technique.cpp b/components/fx/technique.cpp index 019744e70d..2b8f37c96f 100644 --- a/components/fx/technique.cpp +++ b/components/fx/technique.cpp @@ -600,6 +600,11 @@ namespace fx expect(); uniform->mHeader = std::get(mToken).value; } + else if (key == "display_name") + { + expect(); + uniform->mDisplayName = std::get(mToken).value; + } else error(Misc::StringUtils::format("unexpected key '%s'", std::string{key})); diff --git a/components/fx/types.hpp b/components/fx/types.hpp index 40eee003f2..ba809cdd9a 100644 --- a/components/fx/types.hpp +++ b/components/fx/types.hpp @@ -103,6 +103,7 @@ namespace fx struct UniformBase { std::string mName; + std::string mDisplayName; std::string mHeader; std::string mTechniqueName; std::string mDescription; diff --git a/components/fx/widgets.cpp b/components/fx/widgets.cpp index 2206fd8c7f..4316e8d7fe 100644 --- a/components/fx/widgets.cpp +++ b/components/fx/widgets.cpp @@ -78,7 +78,7 @@ namespace fx void UniformBase::init(const std::shared_ptr& uniform) { - mLabel->setCaption(uniform->mName); + mLabel->setCaption(uniform->mDisplayName.empty() ? uniform->mName : uniform->mDisplayName); if (uniform->mDescription.empty()) { diff --git a/docs/source/reference/postprocessing/omwfx.rst b/docs/source/reference/postprocessing/omwfx.rst index 188fc9cebb..8e8cab2c5a 100644 --- a/docs/source/reference/postprocessing/omwfx.rst +++ b/docs/source/reference/postprocessing/omwfx.rst @@ -413,24 +413,25 @@ To use the sampler, define the appropriately named `sampler2D` in any of your pa It is possible to define settings for your shaders that can be adjusted by either users or a Lua script. -+-----------------+----------+----------+----------+---------+----------+--------------+---------+ -| Block | default | min | max | static | step | description | header | -+=================+==========+==========+==========+=========+==========+==============+=========+ -|``uniform_bool`` | boolean | x | x | boolean | x | string | string | -+-----------------+----------+----------+----------+---------+----------+--------------+---------+ -|``uniform_float``| float | float | float | boolean | float | string | string | -+-----------------+----------+----------+----------+---------+----------+--------------+---------+ -|``uniform_int`` | integer | integer | integer | boolean | integer | string | string | -+-----------------+----------+----------+----------+---------+----------+--------------+---------+ -|``uniform_vec2`` | vec2 | vec2 | vec2 | boolean | vec2 | string | string | -+-----------------+----------+----------+----------+---------+----------+--------------+---------+ -|``uniform_vec3`` | vec3 | vec3 | vec3 | boolean | vec3 | string | string | -+-----------------+----------+----------+----------+---------+----------+--------------+---------+ -|``uniform_vec4`` | vec4 | vec4 | vec4 | boolean | vec4 | string | string | -+-----------------+----------+----------+----------+---------+----------+--------------+---------+ ++-----------------+----------+----------+----------+---------+----------+--------------+-------------------+---------+ +| Block | default | min | max | static | step | description | display_name | header | ++=================+==========+==========+==========+=========+==========+==============+===================+=========+ +|``uniform_bool`` | boolean | x | x | boolean | x | string | string | string | ++-----------------+----------+----------+----------+---------+----------+--------------+-------------------+---------+ +|``uniform_float``| float | float | float | boolean | float | string | string | string | ++-----------------+----------+----------+----------+---------+----------+--------------+-------------------+---------+ +|``uniform_int`` | integer | integer | integer | boolean | integer | string | string | string | ++-----------------+----------+----------+----------+---------+----------+--------------+-------------------+---------+ +|``uniform_vec2`` | vec2 | vec2 | vec2 | boolean | vec2 | string | string | string | ++-----------------+----------+----------+----------+---------+----------+--------------+-------------------+---------+ +|``uniform_vec3`` | vec3 | vec3 | vec3 | boolean | vec3 | string | string | string | ++-----------------+----------+----------+----------+---------+----------+--------------+-------------------+---------+ +|``uniform_vec4`` | vec4 | vec4 | vec4 | boolean | vec4 | string | string | string | ++-----------------+----------+----------+----------+---------+----------+--------------+-------------------+---------+ The ``description`` field is used to display a toolip when viewed in the in-game HUD. The ``header`` field -field can be used to organize uniforms into groups in the HUD. +field can be used to organize uniforms into groups in the HUD. The ``display_name`` field can be used to create a +more user friendly uniform name for display in the HUD. If you would like a uniform to be adjustable with Lua API you `must` set ``static = false;``. Doing this will also remove the uniform from the players HUD. @@ -580,6 +581,7 @@ desaturation to apply to the scene. Here we setup a new variable of type max = 1.0; step = 0.05; static = true; + display_name = "Desaturation Factor"; description = "Desaturation factor. A value of 1.0 is full grayscale."; }