Files
Seele/src/Engine/Window/Window.cpp
T

77 lines
2.2 KiB
C++
Raw Normal View History

2021-01-19 15:30:00 +01:00
#include "Window.h"
2021-11-01 20:25:16 +01:00
#include "WindowManager.h"
2021-01-19 15:30:00 +01:00
#include <functional>
2021-09-29 22:12:56 +02:00
using namespace Seele;
2021-11-01 20:25:16 +01:00
Window::Window(PWindowManager owner, Gfx::PWindow handle)
: owner(owner)
, gfxHandle(handle)
2021-01-19 15:30:00 +01:00
{
}
2021-09-29 22:12:56 +02:00
Window::~Window()
2021-01-19 15:30:00 +01:00
{
}
2021-09-29 22:12:56 +02:00
void Window::addView(PView view)
2021-01-19 15:30:00 +01:00
{
2021-09-29 22:12:56 +02:00
WindowView* windowView = new WindowView();
windowView->view = view;
2021-10-23 00:22:35 +02:00
//windowView->worker = std::thread(&Window::viewWorker, this, windowView);
2021-09-29 22:12:56 +02:00
views.add(windowView);
2021-01-19 15:30:00 +01:00
}
2021-11-01 20:25:16 +01:00
MainJob Window::render()
2021-01-19 15:30:00 +01:00
{
gfxHandle->beginFrame();
2021-09-29 22:12:56 +02:00
for(auto& windowView : views)
2021-11-01 20:25:16 +01:00
{
viewWorker(windowView);
co_await windowView->updateFinished;
2021-10-23 00:22:35 +02:00
{
std::unique_lock lock(windowView->workerMutex);
windowView->view->prepareRender();
}
2021-10-01 19:55:04 +02:00
windowView->view->render();
2021-01-19 15:30:00 +01:00
}
gfxHandle->endFrame();
}
2021-09-29 22:12:56 +02:00
Gfx::PWindow Window::getGfxHandle()
2021-01-19 15:30:00 +01:00
{
return gfxHandle;
}
void Window::setFocused(PView view)
{
auto keyFunction = std::bind(&View::keyCallback, view.getHandle(), std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
auto mouseMoveFunction = std::bind(&View::mouseMoveCallback, view.getHandle(), std::placeholders::_1, std::placeholders::_2);
auto mouseButtonFunction = std::bind(&View::mouseButtonCallback, view.getHandle(), std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
auto scrollFunction = std::bind(&View::scrollCallback, view.getHandle(), std::placeholders::_1, std::placeholders::_2);
auto fileFunction = std::bind(&View::fileCallback, view.getHandle(), std::placeholders::_1, std::placeholders::_2);
gfxHandle->setKeyCallback(keyFunction);
gfxHandle->setMouseMoveCallback(mouseMoveFunction);
gfxHandle->setMouseButtonCallback(mouseButtonFunction);
gfxHandle->setScrollCallback(scrollFunction);
gfxHandle->setFileCallback(fileFunction);
2021-11-01 20:25:16 +01:00
gfxHandle->setCloseCallback([this](){
owner->notifyWindowClosed(this);
});
2021-01-19 15:30:00 +01:00
}
2021-09-29 22:12:56 +02:00
2021-11-01 20:25:16 +01:00
Job Window::viewWorker(WindowView* windowView)
2021-09-29 22:12:56 +02:00
{
while(true)
{
2021-11-01 20:25:16 +01:00
windowView->view->beginUpdate();
windowView->view->update();
{
std::unique_lock lock(windowView->workerMutex);
windowView->view->commitUpdate();
}
windowView->updateFinished.raise();
2021-09-29 22:12:56 +02:00
}
}