Polymorphic Map and threadpool
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
#include "Window.h"
|
||||
#include "WindowManager.h"
|
||||
#include <functional>
|
||||
|
||||
using namespace Seele;
|
||||
|
||||
Window::Window(Gfx::PWindow handle)
|
||||
: gfxHandle(handle)
|
||||
Window::Window(PWindowManager owner, Gfx::PWindow handle)
|
||||
: owner(owner)
|
||||
, gfxHandle(handle)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -20,23 +22,17 @@ void Window::addView(PView view)
|
||||
views.add(windowView);
|
||||
}
|
||||
|
||||
void Window::render()
|
||||
MainJob Window::render()
|
||||
{
|
||||
gfxHandle->beginFrame();
|
||||
for(auto& windowView : views)
|
||||
{
|
||||
windowView->view->beginUpdate();
|
||||
windowView->view->update();
|
||||
{
|
||||
std::unique_lock lock(windowView->workerMutex);
|
||||
windowView->view->commitUpdate();
|
||||
}
|
||||
windowView->updateFinished.raise();
|
||||
{
|
||||
viewWorker(windowView);
|
||||
co_await windowView->updateFinished;
|
||||
{
|
||||
std::unique_lock lock(windowView->workerMutex);
|
||||
windowView->view->prepareRender();
|
||||
}
|
||||
windowView->updateFinished.reset();
|
||||
windowView->view->render();
|
||||
}
|
||||
gfxHandle->endFrame();
|
||||
@@ -59,12 +55,22 @@ void Window::setFocused(PView view)
|
||||
gfxHandle->setMouseButtonCallback(mouseButtonFunction);
|
||||
gfxHandle->setScrollCallback(scrollFunction);
|
||||
gfxHandle->setFileCallback(fileFunction);
|
||||
gfxHandle->setCloseCallback([this](){
|
||||
owner->notifyWindowClosed(this);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
void Window::viewWorker(WindowView* windowView)
|
||||
Job Window::viewWorker(WindowView* windowView)
|
||||
{
|
||||
while(true)
|
||||
{
|
||||
windowView->view->beginUpdate();
|
||||
windowView->view->update();
|
||||
{
|
||||
std::unique_lock lock(windowView->workerMutex);
|
||||
windowView->view->commitUpdate();
|
||||
}
|
||||
windowView->updateFinished.raise();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user