diff --git a/src/client/GuiApplication.cpp b/src/client/GuiApplication.cpp index 2c21c78..87739c7 100644 --- a/src/client/GuiApplication.cpp +++ b/src/client/GuiApplication.cpp @@ -87,15 +87,15 @@ void GuiApplication::Run() bool useOpenGl = false; XcbInterface window_interface; window_interface.SetUseOpenGl(useOpenGl); - window_interface.Initialize(mDesktopManager.get()); - window_interface.AddWindow(mainWindow, mDesktopManager.get()); - window_interface.ShowWindow(mainWindow); + window_interface.initialize(mDesktopManager.get()); + window_interface.addWindow(mainWindow, mDesktopManager.get()); + window_interface.showWindow(mainWindow); if (useOpenGl) { window_interface.CreateOpenGlDrawable(mainWindow); } - window_interface.Loop(mDesktopManager.get()); - window_interface.ShutDown(); + window_interface.loop(mDesktopManager.get()); + window_interface.shutDown(); #else mDesktopManager->SetKeyboard(Keyboard::Create()); diff --git a/src/windows/CMakeLists.txt b/src/windows/CMakeLists.txt index 1f89e2c..2a25282 100644 --- a/src/windows/CMakeLists.txt +++ b/src/windows/CMakeLists.txt @@ -74,6 +74,7 @@ add_library(windows SHARED ${windows_LIB_INCLUDES} ${platform_INCLUDES}) target_include_directories(windows PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/managers" + "${CMAKE_CURRENT_SOURCE_DIR}/ui_interfaces" "${CMAKE_CURRENT_SOURCE_DIR}/ui_interfaces/x11" "${CMAKE_CURRENT_SOURCE_DIR}/ui_interfaces/wayland" "${CMAKE_CURRENT_SOURCE_DIR}/ui_interfaces/win32" diff --git a/src/windows/ui_interfaces/AbstractUiInterface.h b/src/windows/ui_interfaces/AbstractUiInterface.h new file mode 100644 index 0000000..4a99534 --- /dev/null +++ b/src/windows/ui_interfaces/AbstractUiInterface.h @@ -0,0 +1,23 @@ +#pragma once + +class DesktopManager; +namespace mt +{ + class Window; +} + +class AbstractUIInterface +{ +public: + virtual ~AbstractUIInterface() = default; + + virtual void initialize(DesktopManager* desktopManager) = 0; + + virtual void loop(DesktopManager* desktopManager) = 0; + + virtual void shutDown() = 0; + + virtual void showWindow(mt::Window* window) = 0; + + virtual void addWindow(mt::Window* window, DesktopManager* desktopManager) = 0; +}; diff --git a/src/windows/ui_interfaces/wayland/WaylandWindowInterface.cpp b/src/windows/ui_interfaces/wayland/WaylandWindowInterface.cpp index c236181..a8f5631 100644 --- a/src/windows/ui_interfaces/wayland/WaylandWindowInterface.cpp +++ b/src/windows/ui_interfaces/wayland/WaylandWindowInterface.cpp @@ -32,7 +32,6 @@ void WaylandWindowInterface::registryHandleGlobalEvent(void *data, struct wl_reg else if (strcmp(interface, wl_seat_interface.name) == 0) { thisClass->setSeat(static_cast(wl_registry_bind(registry, name, &wl_seat_interface, 5))); - } } @@ -54,7 +53,7 @@ WaylandWindowInterface::~WaylandWindowInterface() } -void WaylandWindowInterface::connect() +void WaylandWindowInterface::initialize(DesktopManager* desktopManager) { mDisplay = wl_display_connect(nullptr); @@ -107,13 +106,13 @@ void WaylandWindowInterface::doXdgPong(uint32_t serial) xdg_wm_base_pong(mXdgBase, serial); } -void WaylandWindowInterface::addWindow(mt::Window* window) +void WaylandWindowInterface::addWindow(mt::Window* window, DesktopManager* desktopManager) { auto surface = std::make_unique(window); mSurfaces.push_back(std::move(surface)); } -void WaylandWindowInterface::mapWindow(mt::Window* window) +void WaylandWindowInterface::showWindow(mt::Window* window) { if (mSurfaces.empty()) { @@ -123,7 +122,7 @@ void WaylandWindowInterface::mapWindow(mt::Window* window) mSurfaces[0]->initialize(mCompositor, mXdgBase, mBuffer); } -void WaylandWindowInterface::disconnect() +void WaylandWindowInterface::shutDown() { if (mDisplay) { @@ -131,7 +130,7 @@ void WaylandWindowInterface::disconnect() } } -void WaylandWindowInterface::run() +void WaylandWindowInterface::loop(DesktopManager* desktopManager) { while (wl_display_dispatch(mDisplay) != -1) { diff --git a/src/windows/ui_interfaces/wayland/WaylandWindowInterface.h b/src/windows/ui_interfaces/wayland/WaylandWindowInterface.h index 5666d60..1b8cafb 100644 --- a/src/windows/ui_interfaces/wayland/WaylandWindowInterface.h +++ b/src/windows/ui_interfaces/wayland/WaylandWindowInterface.h @@ -2,6 +2,7 @@ #include "Window.h" #include "SharedMemory.h" +#include "AbstractUiInterface.h" #include "wayland-client.h" #include "xdg-shell-client-protocol.h" @@ -13,7 +14,7 @@ class WaylandSurface; class WaylandBuffer; class WaylandSeatInterface; -class WaylandWindowInterface +class WaylandWindowInterface : public AbstractUIInterface { public: @@ -21,15 +22,15 @@ public: ~WaylandWindowInterface(); - void connect(); + void loop(DesktopManager* desktopManager) override; - void disconnect(); + void addWindow(mt::Window* window, DesktopManager* desktopManager) override; - void run(); + void showWindow(mt::Window* window) override; - void addWindow(mt::Window* window); + void initialize(DesktopManager* desktopManager) override; - void mapWindow(mt::Window* window); + void shutDown() override; private: static void registryHandleGlobalEvent(void *data, struct wl_registry *registry, uint32_t name, const char *interface, uint32_t version); diff --git a/src/windows/ui_interfaces/x11/XcbInterface.cpp b/src/windows/ui_interfaces/x11/XcbInterface.cpp index 516a3ea..be4f1e7 100644 --- a/src/windows/ui_interfaces/x11/XcbInterface.cpp +++ b/src/windows/ui_interfaces/x11/XcbInterface.cpp @@ -41,7 +41,7 @@ void XcbInterface::SetUseOpenGl(bool use) mUseOpenGl = use; } -void XcbInterface::Initialize(DesktopManager* desktopManager) +void XcbInterface::initialize(DesktopManager* desktopManager) { Connect(); UpdateScreen(desktopManager); @@ -149,7 +149,7 @@ void XcbInterface::MapWindow(mt::Window* window) mXcbWindowInterface->Map(window, mConnection); } -void XcbInterface::ShowWindow(mt::Window* window) +void XcbInterface::showWindow(mt::Window* window) { mXcbWindowInterface->Show(window, mConnection); } @@ -162,7 +162,7 @@ uint32_t XcbInterface::GetEventMask() XCB_EVENT_MASK_EXPOSURE; } -void XcbInterface::AddWindow(mt::Window* window, DesktopManager* desktopManager) +void XcbInterface::addWindow(mt::Window* window, DesktopManager* desktopManager) { auto screen = desktopManager->GetDefaultScreen(); mXcbWindowInterface->Add(window, mConnection, screen, GetEventMask()); @@ -195,7 +195,7 @@ void XcbInterface::OnExposeEvent(xcb_expose_event_t* event, DesktopManager* desk } } -void XcbInterface::Loop(DesktopManager* desktopManager) +void XcbInterface::loop(DesktopManager* desktopManager) { if (!mConnection) { @@ -264,7 +264,7 @@ void XcbInterface::onEventsDispatched(DesktopManager* desktopManager) } } -void XcbInterface::ShutDown() +void XcbInterface::shutDown() { if (!mConnection) { diff --git a/src/windows/ui_interfaces/x11/XcbInterface.h b/src/windows/ui_interfaces/x11/XcbInterface.h index bb2fab7..71be0a3 100644 --- a/src/windows/ui_interfaces/x11/XcbInterface.h +++ b/src/windows/ui_interfaces/x11/XcbInterface.h @@ -1,6 +1,6 @@ #pragma once -#include "Window.h" +#include "AbstractUiInterface.h" #include #include @@ -19,7 +19,12 @@ struct xcb_connection_t; struct xcb_expose_event_t; struct _XDisplay; -class XcbInterface +namespace mt +{ + class Window; +} + +class XcbInterface : public AbstractUIInterface { public: XcbInterface(); @@ -28,15 +33,15 @@ public: void SetUseOpenGl(bool use); - void Initialize(DesktopManager* desktopManager); + void initialize(DesktopManager* desktopManager) override; - void Loop(DesktopManager* desktopManager); + void loop(DesktopManager* desktopManager) override; - void ShutDown(); + void shutDown() override; - void ShowWindow(mt::Window* window); + void showWindow(mt::Window* window) override; - void AddWindow(mt::Window* window, DesktopManager* desktopManager); + void addWindow(mt::Window* window, DesktopManager* desktopManager) override; void CreateOpenGlDrawable(mt::Window* window); diff --git a/test/graphics/TestOpenGlRendering.cpp b/test/graphics/TestOpenGlRendering.cpp index 036e46a..04e3436 100644 --- a/test/graphics/TestOpenGlRendering.cpp +++ b/test/graphics/TestOpenGlRendering.cpp @@ -21,12 +21,12 @@ public: bool useOpenGl = true; XcbInterface window_interface; window_interface.SetUseOpenGl(true); - window_interface.Initialize(desktopManager.get()); - window_interface.AddWindow(mainWindow, desktopManager.get()); - window_interface.ShowWindow(mainWindow); + window_interface.initialize(desktopManager.get()); + window_interface.addWindow(mainWindow, desktopManager.get()); + window_interface.showWindow(mainWindow); window_interface.CreateOpenGlDrawable(mainWindow); - window_interface.Loop(desktopManager.get()); - window_interface.ShutDown(); + window_interface.loop(desktopManager.get()); + window_interface.shutDown(); return true; } diff --git a/test/windows/TestWaylandWindow.cpp b/test/windows/TestWaylandWindow.cpp index d45395e..e665b62 100644 --- a/test/windows/TestWaylandWindow.cpp +++ b/test/windows/TestWaylandWindow.cpp @@ -3,22 +3,26 @@ #include "Window.h" #include "FileLogger.h" +#include "DesktopManager.h" + int main() { FileLogger::GetInstance().Open(); + auto desktop_manager = std::make_unique(); + WaylandWindowInterface window_interface; - window_interface.connect(); + window_interface.initialize(desktop_manager.get()); auto window = mt::Window::Create(); window->SetSize(800, 600); - window_interface.addWindow(window.get()); + window_interface.addWindow(window.get(), desktop_manager.get()); - window_interface.mapWindow(window.get()); + window_interface.showWindow(window.get()); - window_interface.run(); + window_interface.loop(desktop_manager.get()); - window_interface.disconnect(); + window_interface.shutDown(); return 0; }