Initial popup window.
This commit is contained in:
parent
f16dd7c0d9
commit
70220fc6e9
22 changed files with 253 additions and 15 deletions
|
@ -4,6 +4,8 @@
|
|||
|
||||
#include "AbstractApp.h"
|
||||
|
||||
class AbstractUIInterface;
|
||||
|
||||
class AbstractDesktopApp
|
||||
{
|
||||
public:
|
||||
|
@ -11,6 +13,8 @@ public:
|
|||
virtual ~AbstractDesktopApp() = default;
|
||||
|
||||
virtual AbstractApp* getMainApplication() const = 0;
|
||||
|
||||
virtual AbstractUIInterface* getUiInterface() const = 0;
|
||||
};
|
||||
|
||||
using AbstractDesktopAppPtr = std::shared_ptr<AbstractDesktopApp>;
|
||||
|
|
|
@ -1,17 +1,20 @@
|
|||
#include "DesktopManager.h"
|
||||
|
||||
#include "AbstractDesktopApp.h"
|
||||
#include "AbstractUiInterface.h"
|
||||
|
||||
#include "FileLogger.h"
|
||||
#include "Widget.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
DesktopManager::DesktopManager(AbstractDesktopApp* application)
|
||||
: mScreens(),
|
||||
mWindowManager(WindowManager::Create()),
|
||||
mKeyboard(Keyboard::Create()),
|
||||
mUiApplication(application),
|
||||
mEventManager(EventManager::Create())
|
||||
{
|
||||
|
||||
mWindowManager = WindowManager::Create(this);
|
||||
}
|
||||
|
||||
DesktopManager::~DesktopManager()
|
||||
|
@ -115,6 +118,16 @@ WindowManager* DesktopManager::getWindowManager() const
|
|||
return mWindowManager.get();
|
||||
}
|
||||
|
||||
void DesktopManager::addWindow(mt::Window* window)
|
||||
{
|
||||
if (auto ui_interface = mUiApplication->getUiInterface())
|
||||
{
|
||||
std::cout << "Adding popup window" << std::endl;
|
||||
ui_interface->addWindow(window);
|
||||
ui_interface->showWindow(window);
|
||||
}
|
||||
}
|
||||
|
||||
void DesktopManager::onLoopIteration()
|
||||
{
|
||||
auto defaultScreen = getDefaultScreen();
|
||||
|
|
|
@ -51,6 +51,8 @@ public:
|
|||
|
||||
void onLoopIteration();
|
||||
|
||||
void addWindow(mt::Window* window);
|
||||
|
||||
private:
|
||||
std::vector<ScreenPtr> mScreens;
|
||||
WindowManagerUPtr mWindowManager;
|
||||
|
|
|
@ -1,9 +1,13 @@
|
|||
#include "WindowManager.h"
|
||||
|
||||
#include "DesktopManager.h"
|
||||
#include "Widget.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
WindowManager::WindowManager()
|
||||
: mWindows()
|
||||
WindowManager::WindowManager(DesktopManager* desktopManager)
|
||||
: mWindows(),
|
||||
mDesktopManager(desktopManager)
|
||||
{
|
||||
addWindow(mt::Window::Create());
|
||||
}
|
||||
|
@ -13,9 +17,9 @@ WindowManager::~WindowManager()
|
|||
|
||||
}
|
||||
|
||||
std::unique_ptr<WindowManager> WindowManager::Create()
|
||||
std::unique_ptr<WindowManager> WindowManager::Create(DesktopManager* desktopManager)
|
||||
{
|
||||
return std::make_unique<WindowManager>();
|
||||
return std::make_unique<WindowManager>(desktopManager);
|
||||
}
|
||||
|
||||
void WindowManager::onPaintEvent(const PaintEvent* event)
|
||||
|
@ -40,9 +44,25 @@ void WindowManager::onKeyboardEvent(const KeyboardEvent* event)
|
|||
|
||||
void WindowManager::addWindow(WindowUPtr window)
|
||||
{
|
||||
auto popup_handler = [this](mt::Window* parent, std::unique_ptr<Widget> popup){
|
||||
onAddPopupWindow(parent, std::move(popup));
|
||||
};
|
||||
window->setPopupHandler(popup_handler);
|
||||
mWindows.push_back(std::move(window));
|
||||
}
|
||||
|
||||
void WindowManager::onAddPopupWindow(mt::Window* parent, std::unique_ptr<Widget> widget)
|
||||
{
|
||||
auto popup = mt::Window::Create();
|
||||
popup->setWidget(std::move(widget));
|
||||
popup->setParent(parent);
|
||||
|
||||
auto popup_raw = popup.get();
|
||||
addWindow(std::move(popup));
|
||||
|
||||
mDesktopManager->addWindow(popup_raw);
|
||||
}
|
||||
|
||||
void WindowManager::clearPlatformWindows()
|
||||
{
|
||||
for (auto& window : mWindows)
|
||||
|
|
|
@ -9,14 +9,17 @@
|
|||
#include "ResizeEvent.h"
|
||||
#include "KeyboardEvent.h"
|
||||
|
||||
class Widget;
|
||||
class DesktopManager;
|
||||
|
||||
class WindowManager
|
||||
{
|
||||
public:
|
||||
WindowManager();
|
||||
WindowManager(DesktopManager* desktopManager);
|
||||
|
||||
~WindowManager();
|
||||
|
||||
static std::unique_ptr<WindowManager> Create();
|
||||
static std::unique_ptr<WindowManager> Create(DesktopManager* desktopManager);
|
||||
|
||||
void addWindow(WindowUPtr window);
|
||||
|
||||
|
@ -44,8 +47,11 @@ public:
|
|||
|
||||
void onLoopIteration(mt::Screen* screen);
|
||||
|
||||
void onAddPopupWindow(mt::Window* parent, std::unique_ptr<Widget> widget);
|
||||
|
||||
private:
|
||||
std::vector<WindowUPtr> mWindows;
|
||||
DesktopManager* mDesktopManager{nullptr};
|
||||
};
|
||||
|
||||
using WindowManagerUPtr = std::unique_ptr<WindowManager>;
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include "NullUiInterface.h"
|
||||
|
||||
#include "FontsManager.h"
|
||||
#include "Widget.h"
|
||||
|
||||
std::unique_ptr<AbstractUIInterface> UiInterfaceFactory::create(DesktopManager* desktopManager, Backend backend)
|
||||
{
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include "Screen.h"
|
||||
#include "XcbScreen.h"
|
||||
#include "Color.h"
|
||||
#include "Widget.h"
|
||||
#include "UiEvent.h"
|
||||
#include "XcbKeyboard.h"
|
||||
#include "XcbWindow.h"
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include "XcbWindow.h"
|
||||
|
||||
#include "Window.h"
|
||||
#include "Widget.h"
|
||||
#include "XcbScreen.h"
|
||||
#include "XcbImage.h"
|
||||
#include "Screen.h"
|
||||
|
@ -40,10 +41,17 @@ void XcbWindow::add(mt::Window* window, xcb_connection_t* connection, mt::Screen
|
|||
const auto hwnd = xcb_generate_id(connection);
|
||||
const uint32_t mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK;
|
||||
const uint32_t values[2] = {xcb_screen->GetNativeScreen()->white_pixel, eventMask};
|
||||
|
||||
xcb_window_t parent_hwnd = xcb_screen->GetNativeScreen()->root;
|
||||
if (auto parent = window->getParent())
|
||||
{
|
||||
parent_hwnd = dynamic_cast<XcbWindow*>(parent->getPlatformWindow())->getHandle();
|
||||
}
|
||||
|
||||
xcb_create_window (connection, /* connection */
|
||||
XCB_COPY_FROM_PARENT, /* depth */
|
||||
hwnd, /* window Id */
|
||||
xcb_screen->GetNativeScreen()->root, /* parent window */
|
||||
parent_hwnd, /* parent window */
|
||||
0, 0, /* x, y */
|
||||
window->getWidth(), window->getHeight(), /* width, height */
|
||||
10, /* border_width */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue