Handling window minimizing
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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<
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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),
|
||||
});
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -22,6 +22,9 @@ void WindowManager::render()
|
||||
{
|
||||
for (auto& window : windows)
|
||||
{
|
||||
window->pollInputs();
|
||||
if (window->isPaused())
|
||||
continue;
|
||||
window->render();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user