2022-03-30 21:18:42 +02:00
|
|
|
#include "Window.hpp"
|
|
|
|
#include "Compositor.hpp"
|
|
|
|
|
2022-04-23 14:16:02 +02:00
|
|
|
CWindow::CWindow() {
|
2022-05-05 14:02:30 +02:00
|
|
|
m_vRealPosition.create(AVARTYPE_VECTOR, &g_pConfigManager->getConfigValuePtr("animations:windows_speed")->floatValue, &g_pConfigManager->getConfigValuePtr("animations:windows")->intValue, &g_pConfigManager->getConfigValuePtr("animations:windows_curve")->strValue, (void*) this, AVARDAMAGE_ENTIRE);
|
|
|
|
m_vRealSize.create(AVARTYPE_VECTOR, &g_pConfigManager->getConfigValuePtr("animations:windows_speed")->floatValue, &g_pConfigManager->getConfigValuePtr("animations:windows")->intValue, &g_pConfigManager->getConfigValuePtr("animations:windows_curve")->strValue, (void*)this, AVARDAMAGE_ENTIRE);
|
|
|
|
m_cRealBorderColor.create(AVARTYPE_COLOR, &g_pConfigManager->getConfigValuePtr("animations:borders_speed")->floatValue, &g_pConfigManager->getConfigValuePtr("animations:borders")->intValue, &g_pConfigManager->getConfigValuePtr("animations:borders_curve")->strValue, (void*)this, AVARDAMAGE_BORDER);
|
|
|
|
m_fAlpha.create(AVARTYPE_FLOAT, &g_pConfigManager->getConfigValuePtr("animations:fadein_speed")->floatValue, &g_pConfigManager->getConfigValuePtr("animations:fadein")->intValue, &g_pConfigManager->getConfigValuePtr("animations:fadein_curve")->strValue, (void*)this, AVARDAMAGE_ENTIRE);
|
2022-04-23 14:16:02 +02:00
|
|
|
}
|
|
|
|
|
2022-03-30 21:18:42 +02:00
|
|
|
CWindow::~CWindow() {
|
2022-04-02 18:57:09 +02:00
|
|
|
if (g_pCompositor->isWindowActive(this)) {
|
2022-03-30 21:18:42 +02:00
|
|
|
g_pCompositor->m_pLastFocus = nullptr;
|
2022-04-02 18:57:09 +02:00
|
|
|
g_pCompositor->m_pLastWindow = nullptr;
|
|
|
|
}
|
2022-05-30 14:55:42 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
wlr_box CWindow::getFullWindowBoundingBox() {
|
|
|
|
|
|
|
|
SWindowDecorationExtents maxExtents;
|
|
|
|
|
|
|
|
for (auto& wd : m_dWindowDecorations) {
|
|
|
|
|
|
|
|
const auto EXTENTS = wd->getWindowDecorationExtents();
|
|
|
|
|
|
|
|
if (EXTENTS.topLeft.x > maxExtents.topLeft.x)
|
|
|
|
maxExtents.topLeft.x = EXTENTS.topLeft.x;
|
|
|
|
|
|
|
|
if (EXTENTS.topLeft.y > maxExtents.topLeft.y)
|
|
|
|
maxExtents.topLeft.y = EXTENTS.topLeft.y;
|
|
|
|
|
|
|
|
if (EXTENTS.bottomRight.x > maxExtents.bottomRight.x)
|
|
|
|
maxExtents.bottomRight.x = EXTENTS.bottomRight.x;
|
|
|
|
|
|
|
|
if (EXTENTS.bottomRight.y > maxExtents.bottomRight.y)
|
|
|
|
maxExtents.bottomRight.y = EXTENTS.bottomRight.y;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Add extents to the real base BB and return
|
|
|
|
wlr_box finalBox = {m_vRealPosition.vec().x - maxExtents.topLeft.x,
|
|
|
|
m_vRealPosition.vec().y - maxExtents.topLeft.y,
|
|
|
|
m_vRealSize.vec().x + maxExtents.topLeft.x + maxExtents.bottomRight.x,
|
|
|
|
m_vRealSize.vec().y + maxExtents.topLeft.y + maxExtents.bottomRight.y};
|
|
|
|
|
|
|
|
return finalBox;
|
2022-06-23 20:39:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
wlr_box CWindow::getWindowIdealBoundingBoxIgnoreReserved() {
|
|
|
|
|
|
|
|
const auto PMONITOR = g_pCompositor->getMonitorFromID(m_iMonitorID);
|
|
|
|
|
|
|
|
auto POS = m_vPosition;
|
|
|
|
auto SIZE = m_vSize;
|
|
|
|
|
|
|
|
if (DELTALESSTHAN(POS.y - PMONITOR->vecPosition.y, PMONITOR->vecReservedTopLeft.y, 1)) {
|
|
|
|
POS.y = PMONITOR->vecPosition.y;
|
|
|
|
SIZE.y += PMONITOR->vecReservedTopLeft.y;
|
|
|
|
}
|
|
|
|
if (DELTALESSTHAN(POS.x - PMONITOR->vecPosition.x, PMONITOR->vecReservedTopLeft.x, 1)) {
|
|
|
|
POS.x = PMONITOR->vecPosition.x;
|
|
|
|
SIZE.x += PMONITOR->vecReservedTopLeft.x;
|
|
|
|
}
|
|
|
|
if (DELTALESSTHAN(POS.x + SIZE.x - PMONITOR->vecPosition.x, PMONITOR->vecSize.x - PMONITOR->vecReservedBottomRight.x, 1)) {
|
|
|
|
SIZE.x += PMONITOR->vecReservedBottomRight.x;
|
|
|
|
}
|
|
|
|
if (DELTALESSTHAN(POS.y + SIZE.y - PMONITOR->vecPosition.y, PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y, 1)) {
|
|
|
|
SIZE.y += PMONITOR->vecReservedBottomRight.y;
|
|
|
|
}
|
|
|
|
|
|
|
|
return wlr_box{(int)POS.x, (int)POS.y, (int)SIZE.x, (int)SIZE.y};
|
2022-03-30 21:18:42 +02:00
|
|
|
}
|