Handling window minimizing

This commit is contained in:
Dynamitos
2023-12-28 21:42:18 +01:00
parent e18254ec29
commit 4b58ab84be
21 changed files with 109 additions and 76 deletions
+1 -4
View File
@@ -69,16 +69,13 @@ void GameView::render()
Component::Camera cam;
scene->view<Component::Camera>([&cam](Component::Camera& c) {
if (c.mainCamera)
cam = c;
cam = c;
});
renderGraph.render(cam);
}
void GameView::applyArea(URect rect)
{
viewport = graphics->createViewport(owner->getGfxHandle(), ViewportCreateInfo{
.dimensions = rect,
});
renderGraph.updateViewport(viewport);
}
+2 -2
View File
@@ -25,10 +25,10 @@ public:
virtual void prepareRender() override;
virtual void render() override;
virtual void applyArea(URect rect) override;
void reloadGame();
private:
protected:
virtual void applyArea(URect rect) override;
OScene scene;
GameInterface gameInterface;
RenderGraph<
+9 -1
View File
@@ -7,6 +7,7 @@ using namespace Seele;
View::View(Gfx::PGraphics graphics, PWindow window, const ViewportCreateInfo &viewportInfo, std::string name)
: graphics(graphics)
, owner(window)
, createInfo(viewportInfo)
, name(name)
{
viewport = graphics->createViewport(owner->getGfxHandle(), viewportInfo);
@@ -18,7 +19,14 @@ View::~View()
{
}
void View::setFocused()
void View::resize(URect area)
{
createInfo.dimensions = area;
viewport = graphics->createViewport(owner->getGfxHandle(), createInfo);
applyArea(area);
}
void View::setFocused()
{
owner->setFocused(this);
}
+3 -1
View File
@@ -17,14 +17,16 @@ public:
virtual void prepareRender() = 0;
virtual void render() = 0;
virtual void applyArea(URect area) = 0;
void resize(URect area);
void setFocused();
const std::string& getName();
protected:
virtual void applyArea(URect area) = 0;
Gfx::PGraphics graphics;
Gfx::OViewport viewport;
ViewportCreateInfo createInfo;
PWindow owner;
std::string name;
+6 -1
View File
@@ -20,6 +20,11 @@ void Window::addView(PView view)
views.add(view);
}
void Window::pollInputs()
{
gfxHandle->pollInput();
}
void Window::render()
{
gfxHandle->beginFrame();
@@ -61,7 +66,7 @@ void Window::onResize(uint32 width, uint32 height)
for (auto& view : views)
{
// TODO: some sort of layouting algorithm should do this
view->applyArea(URect{
view->resize(URect{
.size = UVector2(width, height),
.offset = UVector2(0, 0),
});
+5
View File
@@ -12,10 +12,15 @@ public:
Window(PWindowManager owner, Gfx::OWindow handle);
~Window();
void addView(PView view);
void pollInputs();
void render();
Gfx::PWindow getGfxHandle();
void setFocused(PView view);
void onResize(uint32 width, uint32 height);
constexpr bool isPaused() const
{
return gfxHandle->isPaused();
}
protected:
PWindowManager owner;
Array<PView> views;
+3
View File
@@ -22,6 +22,9 @@ void WindowManager::render()
{
for (auto& window : windows)
{
window->pollInputs();
if (window->isPaused())
continue;
window->render();
}
}