Cleaning window managers for consistency.
This commit is contained in:
parent
5d984aa61d
commit
392a2b7889
28 changed files with 452 additions and 325 deletions
|
@ -15,23 +15,20 @@
|
|||
#include "XcbWindow.h"
|
||||
#include "XcbLayerInterface.h"
|
||||
#include "XcbEventInterface.h"
|
||||
#include "GlxInterface.h"
|
||||
#include "XcbGlInterface.h"
|
||||
#include "FileLogger.h"
|
||||
|
||||
|
||||
XcbInterface::XcbInterface(DesktopManager* desktopManager, bool useHardware)
|
||||
: AbstractUIInterface(desktopManager, useHardware),
|
||||
mConnection(nullptr),
|
||||
mX11Display(),
|
||||
mGlxInterface(),
|
||||
mXcbEventInterface(XcbEventInterface::Create())
|
||||
mEventInterface(XcbEventInterface::Create())
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
XcbInterface::~XcbInterface()
|
||||
{
|
||||
|
||||
shutDown();
|
||||
}
|
||||
|
||||
void XcbInterface::initialize()
|
||||
|
@ -41,9 +38,17 @@ void XcbInterface::initialize()
|
|||
createGraphicsContext();
|
||||
if (mUseHardwareRendering)
|
||||
{
|
||||
initializeOpenGl();
|
||||
initializeHardwareRendering();
|
||||
}
|
||||
mDesktopManager->SetKeyboard(XcbKeyboard::Create());
|
||||
|
||||
const auto num_windows = mDesktopManager->GetWindowManager()->getNumWindows();
|
||||
for(std::size_t idx=0; idx< num_windows; idx++)
|
||||
{
|
||||
addWindow(mDesktopManager->GetWindowManager()->getWindow(idx));
|
||||
}
|
||||
|
||||
mDesktopManager->GetWindowManager()->GetMainWindow()->show();
|
||||
}
|
||||
|
||||
void XcbInterface::connect()
|
||||
|
@ -94,31 +99,10 @@ void XcbInterface::updateScreen()
|
|||
mDesktopManager->AddScreen(std::move(screen));
|
||||
}
|
||||
|
||||
void XcbInterface::initializeOpenGl()
|
||||
void XcbInterface::initializeHardwareRendering()
|
||||
{
|
||||
mGlxInterface = GlxInterface::Create();
|
||||
const auto default_screen = DefaultScreen(mX11Display);
|
||||
mGlxInterface->SetupContext(mX11Display, default_screen);
|
||||
}
|
||||
|
||||
void XcbInterface::createOpenGlDrawable(mt::Window* window)
|
||||
{
|
||||
if (!mUseHardwareRendering or !window or !window->GetPlatformWindow())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
auto xcb_window = dynamic_cast<XcbWindow*>(window->GetPlatformWindow());
|
||||
if (!xcb_window)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mGlxInterface->SetupWindow(mX11Display, xcb_window->getHandle()))
|
||||
{
|
||||
MLOG_ERROR("Failed to set up OpenGL Drawable");
|
||||
xcb_destroy_window(mConnection, xcb_window->getHandle());
|
||||
}
|
||||
mGlInterface = XcbGlInterface::Create(mX11Display, default_screen);
|
||||
}
|
||||
|
||||
void XcbInterface::createGraphicsContext()
|
||||
|
@ -149,11 +133,6 @@ void XcbInterface::mapWindow(mt::Window* window)
|
|||
void XcbInterface::showWindow(mt::Window* window)
|
||||
{
|
||||
window->show();
|
||||
|
||||
if (mUseHardwareRendering)
|
||||
{
|
||||
createOpenGlDrawable(window);
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t XcbInterface::getEventMask()
|
||||
|
@ -167,7 +146,7 @@ uint32_t XcbInterface::getEventMask()
|
|||
void XcbInterface::addWindow(mt::Window* window)
|
||||
{
|
||||
auto screen = mDesktopManager->GetDefaultScreen();
|
||||
XcbWindow::add(window, mConnection, screen, getEventMask());
|
||||
XcbWindow::add(window, mConnection, screen, getEventMask(), mGlInterface.get());
|
||||
}
|
||||
|
||||
void XcbInterface::onPaint()
|
||||
|
@ -182,27 +161,16 @@ void XcbInterface::onPaint()
|
|||
|
||||
void XcbInterface::onExposeEvent(xcb_expose_event_t* event)
|
||||
{
|
||||
// Update the window
|
||||
if (mUseHardwareRendering)
|
||||
{
|
||||
mGlxInterface->Draw();
|
||||
mGlxInterface->SwapBuffers(mX11Display);
|
||||
}
|
||||
else
|
||||
{
|
||||
//auto window = mWindows[event->window];
|
||||
//window->SetSize(event->width, event->height);
|
||||
onPaint();
|
||||
xcb_flush(mConnection);
|
||||
}
|
||||
//auto window = mWindows[event->window];
|
||||
//window->SetSize(event->width, event->height);
|
||||
|
||||
onPaint();
|
||||
}
|
||||
|
||||
void XcbInterface::loop()
|
||||
{
|
||||
if (!mConnection)
|
||||
{
|
||||
return;
|
||||
}
|
||||
initialize();
|
||||
|
||||
xcb_generic_event_t *event;
|
||||
while ((event = xcb_wait_for_event(mConnection)))
|
||||
{
|
||||
|
@ -215,25 +183,25 @@ void XcbInterface::loop()
|
|||
}
|
||||
case XCB_KEY_PRESS: {
|
||||
auto kp = reinterpret_cast<xcb_key_press_event_t*>(event);
|
||||
auto ui_event = mXcbEventInterface->ConvertKeyPress(kp, mDesktopManager->GetKeyboard());
|
||||
auto ui_event = mEventInterface->ConvertKeyPress(kp, mDesktopManager->GetKeyboard());
|
||||
mDesktopManager->OnUiEvent(std::move(ui_event));
|
||||
break;
|
||||
}
|
||||
case XCB_KEY_RELEASE: {
|
||||
auto kr = reinterpret_cast<xcb_key_release_event_t*>(event);
|
||||
auto ui_event = mXcbEventInterface->ConvertKeyRelease(kr, mDesktopManager->GetKeyboard());
|
||||
auto ui_event = mEventInterface->ConvertKeyRelease(kr, mDesktopManager->GetKeyboard());
|
||||
mDesktopManager->OnUiEvent(std::move(ui_event));
|
||||
break;
|
||||
}
|
||||
case XCB_BUTTON_PRESS: {
|
||||
auto press = reinterpret_cast<xcb_button_press_event_t*>(event);
|
||||
auto ui_event = mXcbEventInterface->ConvertButtonPress(press);
|
||||
auto ui_event = mEventInterface->ConvertButtonPress(press);
|
||||
mDesktopManager->OnUiEvent(std::move(ui_event));
|
||||
break;
|
||||
}
|
||||
case XCB_BUTTON_RELEASE: {
|
||||
auto release = reinterpret_cast<xcb_button_release_event_t*>(event);
|
||||
auto ui_event = mXcbEventInterface->ConvertButtonRelease(release);
|
||||
auto ui_event = mEventInterface->ConvertButtonRelease(release);
|
||||
mDesktopManager->OnUiEvent(std::move(ui_event));
|
||||
break;
|
||||
}
|
||||
|
@ -244,16 +212,6 @@ void XcbInterface::loop()
|
|||
onEventsDispatched();
|
||||
free(event);
|
||||
}
|
||||
onLoopCompleted();
|
||||
}
|
||||
|
||||
void XcbInterface::onLoopCompleted()
|
||||
{
|
||||
if (mUseHardwareRendering)
|
||||
{
|
||||
mGlxInterface->DestroyWindow(mX11Display);
|
||||
mGlxInterface->DestroyContext(mX11Display);
|
||||
}
|
||||
}
|
||||
|
||||
void XcbInterface::onEventsDispatched()
|
||||
|
@ -268,6 +226,8 @@ void XcbInterface::onEventsDispatched()
|
|||
|
||||
void XcbInterface::shutDown()
|
||||
{
|
||||
mDesktopManager->GetWindowManager()->clearPlatformWindows();
|
||||
|
||||
if (!mConnection)
|
||||
{
|
||||
return;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue