Skip to content

Commit 728de5c

Browse files
committed
Merge branch 'viewport-resized-handler' into 'master'
Implement onViewportResized Handler See merge request OpenMW/openmw!5276
2 parents e75866f + 915a634 commit 728de5c

7 files changed

Lines changed: 29 additions & 2 deletions

File tree

apps/openmw/mwbase/luamanager.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ namespace MWBase
9797
virtual void questUpdated(const ESM::RefId& questId, int stage) = 0;
9898
// `arg` is either forwarded from MWGui::pushGuiMode or empty
9999
virtual void uiModeChanged(const MWWorld::Ptr& arg) = 0;
100+
virtual void viewportResized(int width, int height) = 0;
100101
virtual void savePermanentStorage(const std::filesystem::path& userConfigPath) = 0;
101102

102103
// TODO: notify LuaManager about other events

apps/openmw/mwgui/windowmanagerimp.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1357,6 +1357,8 @@ namespace MWGui
13571357
// Re-apply any controller-specific window changes.
13581358
reapplyActiveControllerWindow();
13591359

1360+
MWBase::Environment::get().getLuaManager()->viewportResized(x, y);
1361+
13601362
// TODO: check if any windows are now off-screen and move them back if so
13611363
}
13621364

apps/openmw/mwlua/luamanagerimp.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,18 @@ namespace MWLua
479479
playerScripts->uiModeChanged(argId, false);
480480
}
481481

482+
void LuaManager::viewportResized(int width, int height)
483+
{
484+
if (!mPlayer.isEmpty())
485+
{
486+
PlayerScripts* playerScripts = dynamic_cast<PlayerScripts*>(mPlayer.getRefData().getLuaScripts());
487+
if (playerScripts)
488+
playerScripts->onViewportResized(width, height);
489+
}
490+
491+
mMenuScripts.onViewportResized(width, height);
492+
}
493+
482494
void LuaManager::actorDied(const MWWorld::Ptr& actor)
483495
{
484496
if (actor.isEmpty())

apps/openmw/mwlua/luamanagerimp.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ namespace MWLua
109109
void objectTeleported(const MWWorld::Ptr& ptr) override;
110110
void questUpdated(const ESM::RefId& questId, int stage) override;
111111
void uiModeChanged(const MWWorld::Ptr& arg) override;
112+
void viewportResized(int width, int height) override;
112113
void actorDied(const MWWorld::Ptr& actor) override;
113114
void onDialogueResponse(
114115
const MWWorld::Ptr& actor, const ESM::DialInfo& info, const ESM::Dialogue& record) override;

apps/openmw/mwlua/menuscripts.hpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ namespace MWLua
2424
: LuaUtil::ScriptsContainer(lua, "Menu")
2525
, mInputProcessor(this)
2626
{
27-
registerEngineHandlers({ &mOnFrameHandlers, &mStateChanged, &mConsoleCommandHandlers, &mUiModeChanged });
27+
registerEngineHandlers({ &mOnFrameHandlers, &mStateChanged, &mConsoleCommandHandlers,
28+
&mViewportResizedHandlers, &mUiModeChanged });
2829
}
2930

3031
void processInputEvent(const MWBase::LuaManager::InputEvent& event)
@@ -42,6 +43,8 @@ namespace MWLua
4243
return !mConsoleCommandHandlers.mList.empty();
4344
}
4445

46+
void onViewportResized(int width, int height) { callEngineHandlers(mViewportResizedHandlers, width, height); }
47+
4548
void uiModeChanged() { callEngineHandlers(mUiModeChanged); }
4649

4750
private:
@@ -50,6 +53,7 @@ namespace MWLua
5053
EngineHandlerList mOnFrameHandlers{ "onFrame" };
5154
EngineHandlerList mStateChanged{ "onStateChanged" };
5255
EngineHandlerList mConsoleCommandHandlers{ "onConsoleCommand" };
56+
EngineHandlerList mViewportResizedHandlers{ "onViewportResized" };
5357
EngineHandlerList mUiModeChanged{ "_onUiModeChanged" };
5458
};
5559
}

apps/openmw/mwlua/playerscripts.hpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ namespace MWLua
2020
: LocalScripts(lua, obj)
2121
, mInputProcessor(this)
2222
{
23-
registerEngineHandlers({ &mConsoleCommandHandlers, &mOnFrameHandlers, &mQuestUpdate, &mUiModeChanged });
23+
registerEngineHandlers({ &mConsoleCommandHandlers, &mOnFrameHandlers, &mQuestUpdate,
24+
&mViewportResizedHandlers, &mUiModeChanged });
2425
}
2526

2627
void processInputEvent(const MWBase::LuaManager::InputEvent& event)
@@ -38,6 +39,8 @@ namespace MWLua
3839
return !mConsoleCommandHandlers.mList.empty();
3940
}
4041

42+
void onViewportResized(int width, int height) { callEngineHandlers(mViewportResizedHandlers, width, height); }
43+
4144
// `arg` is either forwarded from MWGui::pushGuiMode or empty
4245
void uiModeChanged(ObjectId arg, bool byLuaAction)
4346
{
@@ -53,6 +56,7 @@ namespace MWLua
5356
EngineHandlerList mConsoleCommandHandlers{ "onConsoleCommand" };
5457
EngineHandlerList mOnFrameHandlers{ "onFrame" };
5558
EngineHandlerList mQuestUpdate{ "onQuestUpdate" };
59+
EngineHandlerList mViewportResizedHandlers{ "onViewportResized" };
5660
EngineHandlerList mUiModeChanged{ "_onUiModeChanged" };
5761
};
5862

docs/source/reference/lua-scripting/engine_handlers.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,9 @@ Engine handler is a function defined by a script, that can be called by the engi
147147
| mode, command, selectedObject)
148148
- | User entered `command` in in-game console. Called if either
149149
| `mode` is not default or `command` starts with prefix `lua`.
150+
* - onViewportResized(width, height)
151+
- | Called when the game viewport is resized.
152+
| Provides the new width and height of the viewport in pixels.
150153
151154
**Only for local scripts attached to a player**
152155

0 commit comments

Comments
 (0)