Window resizing works

This commit is contained in:
Dynamitos
2023-11-18 11:04:30 +01:00
parent ec760e8deb
commit 6daaa61641
12 changed files with 92 additions and 50 deletions
+8
View File
@@ -72,6 +72,14 @@ void GameView::render()
renderGraph.render(cam);
}
void GameView::applyArea(URect rect)
{
viewport = graphics->createViewport(owner->getGfxHandle(), ViewportCreateInfo{
.dimensions = rect,
});
renderGraph.updateViewport(viewport);
}
void GameView::reloadGame()
{
gameInterface.reload(AssetRegistry::getInstance());
+1
View File
@@ -25,6 +25,7 @@ public:
virtual void prepareRender() override;
virtual void render() override;
virtual void applyArea(URect rect) override;
void reloadGame();
private:
-5
View File
@@ -18,11 +18,6 @@ View::~View()
{
}
void View::applyArea(URect)
{
}
void View::setFocused()
{
owner->setFocused(this);
+1 -5
View File
@@ -11,17 +11,13 @@ public:
View(Gfx::PGraphics graphics, PWindow window, const ViewportCreateInfo &createInfo, std::string name);
virtual ~View();
// These are called from the view thread, and handle updating game data
virtual void beginUpdate() = 0;
virtual void update() = 0;
// End frame is called with a lock, so it is safe to write to shared memory
virtual void commitUpdate() = 0;
// These are called from the render thread
// prepare render is also locked, so reading from shared memory is also safe
virtual void prepareRender() = 0;
virtual void render() = 0;
void applyArea(URect area);
virtual void applyArea(URect area) = 0;
void setFocused();
const std::string& getName();
+13
View File
@@ -8,6 +8,7 @@ Window::Window(PWindowManager owner, Gfx::OWindow handle)
: owner(owner)
, gfxHandle(std::move(handle))
{
gfxHandle->setResizeCallback([this](uint32 w, uint32 h) {onResize(w, h); });
}
Window::~Window()
@@ -57,3 +58,15 @@ void Window::setFocused(PView view)
owner->notifyWindowClosed(this);
});
}
void Window::onResize(uint32 width, uint32 height)
{
for (auto& view : views)
{
// TODO: some sort of layouting algorithm should do this
view->applyArea(URect{
.size = UVector2(width, height),
.offset = UVector2(0, 0),
});
}
}
+1 -3
View File
@@ -15,13 +15,11 @@ public:
void render();
Gfx::PWindow getGfxHandle();
void setFocused(PView view);
void onResize(uint32 width, uint32 height);
protected:
PWindowManager owner;
Array<PView> views;
Gfx::OWindow gfxHandle;
//void viewWorker(size_t viewIndex);
};
DEFINE_REF(Window)
} // namespace Seele