diff --git a/loader/include/Geode/ui/OverlayManager.hpp b/loader/include/Geode/ui/OverlayManager.hpp index beb638531..c7e873312 100644 --- a/loader/include/Geode/ui/OverlayManager.hpp +++ b/loader/include/Geode/ui/OverlayManager.hpp @@ -5,6 +5,8 @@ namespace geode { class GEODE_DLL OverlayManager final : public cocos2d::CCNode { + protected: + bool init() override; public: static OverlayManager* get(); }; diff --git a/loader/include/Geode/ui/WindowResizeEvent.hpp b/loader/include/Geode/ui/WindowResizeEvent.hpp new file mode 100644 index 000000000..9b5d5cf5f --- /dev/null +++ b/loader/include/Geode/ui/WindowResizeEvent.hpp @@ -0,0 +1,9 @@ +#pragma once + +#include "../loader/Event.hpp" + +namespace geode { + class WindowResizeEvent final : public Event { + using Event::Event; + }; +} diff --git a/loader/src/hooks/WindowResize.cpp b/loader/src/hooks/WindowResize.cpp new file mode 100644 index 000000000..3f2b0db11 --- /dev/null +++ b/loader/src/hooks/WindowResize.cpp @@ -0,0 +1,12 @@ +#include +#include +#include + +using namespace geode::prelude; + +class $modify(CCEGLViewProtocol) { + void setFrameSize(float width, float height) override { + CCEGLViewProtocol::setFrameSize(width, height); + WindowResizeEvent().send(CCDirector::get()->getWinSize()); + } +}; \ No newline at end of file diff --git a/loader/src/ui/nodes/OverlayManager.cpp b/loader/src/ui/nodes/OverlayManager.cpp index e7b19f5c6..ce31ebe2e 100644 --- a/loader/src/ui/nodes/OverlayManager.cpp +++ b/loader/src/ui/nodes/OverlayManager.cpp @@ -1,13 +1,26 @@ +#include "Geode/ui/WindowResizeEvent.hpp" #include #include #include using namespace geode::prelude; +bool OverlayManager::init() { + if (!CCNode::init()) return false; + this->setContentSize(CCDirector::get()->getWinSize()); + this->setLayout(AnchorLayout::create()); + this->addEventListener(WindowResizeEvent(), [this](const CCSize& size){ + setContentSize(size); + updateLayout(); + }, 0); + return true; +} + OverlayManager* OverlayManager::get() { static OverlayManager* inst = nullptr; if (!inst) { inst = new OverlayManager(); + inst->init(); inst->onEnter(); } return inst;