mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-22 15:45:59 +01:00
animations: Refactor AnimatedVariable (#4911)
* animation: Refactor AnimatedVariable This commit decomposes the AnimatedVariable class into a base class with the common attribute to all variable types and a templated derived type containing strongly typed info on the type being animated. Access to the typed version is perfomed using the visitor pattern. A utility is provided to build a visitor on the fly using lambdas. Adding a new type to be animated should just be a matter of adding the typed in the list defined by the ANIMABLE_TYPES macro The size of the commit is justified by the API change in the AnimatedVariable class. No more vec(), fl() or col() method but a unified value() method. * animation: Remove visitor pattern * animation: Fix coding style * animation: Fix coding style
This commit is contained in:
parent
f115ba94d2
commit
b2c3440477
37 changed files with 491 additions and 589 deletions
|
@ -843,7 +843,8 @@ wlr_surface* CCompositor::vectorWindowToSurface(const Vector2D& pos, CWindow* pW
|
||||||
wlr_xdg_surface_get_geometry(pWindow->m_uSurface.xdg, geom.pWlr());
|
wlr_xdg_surface_get_geometry(pWindow->m_uSurface.xdg, geom.pWlr());
|
||||||
geom.applyFromWlr();
|
geom.applyFromWlr();
|
||||||
|
|
||||||
const auto PFOUND = wlr_xdg_surface_surface_at(PSURFACE, pos.x - pWindow->m_vRealPosition.vec().x + geom.x, pos.y - pWindow->m_vRealPosition.vec().y + geom.y, &subx, &suby);
|
const auto PFOUND =
|
||||||
|
wlr_xdg_surface_surface_at(PSURFACE, pos.x - pWindow->m_vRealPosition.value().x + geom.x, pos.y - pWindow->m_vRealPosition.value().y + geom.y, &subx, &suby);
|
||||||
|
|
||||||
if (PFOUND) {
|
if (PFOUND) {
|
||||||
sl.x = subx;
|
sl.x = subx;
|
||||||
|
@ -851,8 +852,8 @@ wlr_surface* CCompositor::vectorWindowToSurface(const Vector2D& pos, CWindow* pW
|
||||||
return PFOUND;
|
return PFOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
sl.x = pos.x - pWindow->m_vRealPosition.vec().x;
|
sl.x = pos.x - pWindow->m_vRealPosition.value().x;
|
||||||
sl.y = pos.y - pWindow->m_vRealPosition.vec().y;
|
sl.y = pos.y - pWindow->m_vRealPosition.value().y;
|
||||||
|
|
||||||
sl.x += geom.x;
|
sl.x += geom.x;
|
||||||
sl.y += geom.y;
|
sl.y += geom.y;
|
||||||
|
@ -865,7 +866,7 @@ Vector2D CCompositor::vectorToSurfaceLocal(const Vector2D& vec, CWindow* pWindow
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
if (pWindow->m_bIsX11)
|
if (pWindow->m_bIsX11)
|
||||||
return vec - pWindow->m_vRealPosition.goalv();
|
return vec - pWindow->m_vRealPosition.goal();
|
||||||
|
|
||||||
const auto PSURFACE = pWindow->m_uSurface.xdg;
|
const auto PSURFACE = pWindow->m_uSurface.xdg;
|
||||||
|
|
||||||
|
@ -887,9 +888,9 @@ Vector2D CCompositor::vectorToSurfaceLocal(const Vector2D& vec, CWindow* pWindow
|
||||||
geom.applyFromWlr();
|
geom.applyFromWlr();
|
||||||
|
|
||||||
if (std::get<1>(iterData) == -1337 && std::get<2>(iterData) == -1337)
|
if (std::get<1>(iterData) == -1337 && std::get<2>(iterData) == -1337)
|
||||||
return vec - pWindow->m_vRealPosition.goalv();
|
return vec - pWindow->m_vRealPosition.goal();
|
||||||
|
|
||||||
return vec - pWindow->m_vRealPosition.goalv() - Vector2D{std::get<1>(iterData), std::get<2>(iterData)} + Vector2D{geom.x, geom.y};
|
return vec - pWindow->m_vRealPosition.goal() - Vector2D{std::get<1>(iterData), std::get<2>(iterData)} + Vector2D{geom.x, geom.y};
|
||||||
}
|
}
|
||||||
|
|
||||||
CMonitor* CCompositor::getMonitorFromOutput(wlr_output* out) {
|
CMonitor* CCompositor::getMonitorFromOutput(wlr_output* out) {
|
||||||
|
@ -1123,7 +1124,7 @@ bool CCompositor::windowValidMapped(CWindow* pWindow) {
|
||||||
wlr_surface* CCompositor::vectorToLayerSurface(const Vector2D& pos, std::vector<std::unique_ptr<SLayerSurface>>* layerSurfaces, Vector2D* sCoords,
|
wlr_surface* CCompositor::vectorToLayerSurface(const Vector2D& pos, std::vector<std::unique_ptr<SLayerSurface>>* layerSurfaces, Vector2D* sCoords,
|
||||||
SLayerSurface** ppLayerSurfaceFound) {
|
SLayerSurface** ppLayerSurfaceFound) {
|
||||||
for (auto& ls : *layerSurfaces | std::views::reverse) {
|
for (auto& ls : *layerSurfaces | std::views::reverse) {
|
||||||
if (ls->fadingOut || !ls->layerSurface || (ls->layerSurface && !ls->layerSurface->surface->mapped) || ls->alpha.fl() == 0.f)
|
if (ls->fadingOut || !ls->layerSurface || (ls->layerSurface && !ls->layerSurface->surface->mapped) || ls->alpha.value() == 0.f)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
auto SURFACEAT = wlr_layer_surface_v1_surface_at(ls->layerSurface, pos.x - ls->geometry.x, pos.y - ls->geometry.y, &sCoords->x, &sCoords->y);
|
auto SURFACEAT = wlr_layer_surface_v1_surface_at(ls->layerSurface, pos.x - ls->geometry.x, pos.y - ls->geometry.y, &sCoords->x, &sCoords->y);
|
||||||
|
@ -1241,7 +1242,7 @@ void CCompositor::sanityCheckWorkspaces() {
|
||||||
if (!isWorkspaceVisible(WORKSPACE->m_iID)) {
|
if (!isWorkspaceVisible(WORKSPACE->m_iID)) {
|
||||||
|
|
||||||
if (WORKSPACE->m_bIsSpecialWorkspace) {
|
if (WORKSPACE->m_bIsSpecialWorkspace) {
|
||||||
if (WORKSPACE->m_fAlpha.fl() > 0.f /* don't abruptly end the fadeout */) {
|
if (WORKSPACE->m_fAlpha.value() > 0.f /* don't abruptly end the fadeout */) {
|
||||||
++it;
|
++it;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -1422,7 +1423,7 @@ void CCompositor::cleanupFadingOut(const int& monid) {
|
||||||
|
|
||||||
bool valid = windowExists(w);
|
bool valid = windowExists(w);
|
||||||
|
|
||||||
if (!valid || !w->m_bFadingOut || w->m_fAlpha.fl() == 0.f) {
|
if (!valid || !w->m_bFadingOut || w->m_fAlpha.value() == 0.f) {
|
||||||
if (valid && !w->m_bReadyToDelete)
|
if (valid && !w->m_bReadyToDelete)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -2014,7 +2015,7 @@ void CCompositor::swapActiveWorkspaces(CMonitor* pMonitorA, CMonitor* pMonitorB)
|
||||||
|
|
||||||
// additionally, move floating and fs windows manually
|
// additionally, move floating and fs windows manually
|
||||||
if (w->m_bIsFloating)
|
if (w->m_bIsFloating)
|
||||||
w->m_vRealPosition = w->m_vRealPosition.vec() - pMonitorA->vecPosition + pMonitorB->vecPosition;
|
w->m_vRealPosition = w->m_vRealPosition.value() - pMonitorA->vecPosition + pMonitorB->vecPosition;
|
||||||
|
|
||||||
if (w->m_bIsFullscreen) {
|
if (w->m_bIsFullscreen) {
|
||||||
w->m_vRealPosition = pMonitorB->vecPosition;
|
w->m_vRealPosition = pMonitorB->vecPosition;
|
||||||
|
@ -2039,7 +2040,7 @@ void CCompositor::swapActiveWorkspaces(CMonitor* pMonitorA, CMonitor* pMonitorB)
|
||||||
|
|
||||||
// additionally, move floating and fs windows manually
|
// additionally, move floating and fs windows manually
|
||||||
if (w->m_bIsFloating)
|
if (w->m_bIsFloating)
|
||||||
w->m_vRealPosition = w->m_vRealPosition.vec() - pMonitorB->vecPosition + pMonitorA->vecPosition;
|
w->m_vRealPosition = w->m_vRealPosition.value() - pMonitorB->vecPosition + pMonitorA->vecPosition;
|
||||||
|
|
||||||
if (w->m_bIsFullscreen) {
|
if (w->m_bIsFullscreen) {
|
||||||
w->m_vRealPosition = pMonitorA->vecPosition;
|
w->m_vRealPosition = pMonitorA->vecPosition;
|
||||||
|
@ -2206,14 +2207,14 @@ void CCompositor::moveWorkspaceToMonitor(CWorkspace* pWorkspace, CMonitor* pMoni
|
||||||
if (w->m_bIsMapped && !w->isHidden()) {
|
if (w->m_bIsMapped && !w->isHidden()) {
|
||||||
if (POLDMON) {
|
if (POLDMON) {
|
||||||
if (w->m_bIsFloating)
|
if (w->m_bIsFloating)
|
||||||
w->m_vRealPosition = w->m_vRealPosition.vec() - POLDMON->vecPosition + pMonitor->vecPosition;
|
w->m_vRealPosition = w->m_vRealPosition.value() - POLDMON->vecPosition + pMonitor->vecPosition;
|
||||||
|
|
||||||
if (w->m_bIsFullscreen) {
|
if (w->m_bIsFullscreen) {
|
||||||
w->m_vRealPosition = pMonitor->vecPosition;
|
w->m_vRealPosition = pMonitor->vecPosition;
|
||||||
w->m_vRealSize = pMonitor->vecSize;
|
w->m_vRealSize = pMonitor->vecSize;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
w->m_vRealPosition = Vector2D{(int)w->m_vRealPosition.goalv().x % (int)pMonitor->vecSize.x, (int)w->m_vRealPosition.goalv().y % (int)pMonitor->vecSize.y};
|
w->m_vRealPosition = Vector2D{(int)w->m_vRealPosition.goal().x % (int)pMonitor->vecSize.x, (int)w->m_vRealPosition.goal().y % (int)pMonitor->vecSize.y};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2330,7 +2331,7 @@ void CCompositor::setWindowFullscreen(CWindow* pWindow, bool on, eFullscreenMode
|
||||||
}
|
}
|
||||||
updateFullscreenFadeOnWorkspace(PWORKSPACE);
|
updateFullscreenFadeOnWorkspace(PWORKSPACE);
|
||||||
|
|
||||||
g_pXWaylandManager->setWindowSize(pWindow, pWindow->m_vRealSize.goalv(), true);
|
g_pXWaylandManager->setWindowSize(pWindow, pWindow->m_vRealSize.goal(), true);
|
||||||
|
|
||||||
forceReportSizesToWindowsOnWorkspace(pWindow->m_iWorkspaceID);
|
forceReportSizesToWindowsOnWorkspace(pWindow->m_iWorkspaceID);
|
||||||
|
|
||||||
|
@ -2569,7 +2570,7 @@ Vector2D CCompositor::parseWindowVectorArgsRelative(const std::string& args, con
|
||||||
void CCompositor::forceReportSizesToWindowsOnWorkspace(const int& wid) {
|
void CCompositor::forceReportSizesToWindowsOnWorkspace(const int& wid) {
|
||||||
for (auto& w : m_vWindows) {
|
for (auto& w : m_vWindows) {
|
||||||
if (w->m_iWorkspaceID == wid && w->m_bIsMapped && !w->isHidden()) {
|
if (w->m_iWorkspaceID == wid && w->m_bIsMapped && !w->isHidden()) {
|
||||||
g_pXWaylandManager->setWindowSize(w.get(), w->m_vRealSize.vec(), true);
|
g_pXWaylandManager->setWindowSize(w.get(), w->m_vRealSize.value(), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2670,7 +2671,7 @@ void CCompositor::moveWindowToWorkspaceSafe(CWindow* pWindow, CWorkspace* pWorks
|
||||||
g_pLayoutManager->getCurrentLayout()->onWindowCreatedTiling(pWindow);
|
g_pLayoutManager->getCurrentLayout()->onWindowCreatedTiling(pWindow);
|
||||||
} else {
|
} else {
|
||||||
const auto PWINDOWMONITOR = g_pCompositor->getMonitorFromID(pWindow->m_iMonitorID);
|
const auto PWINDOWMONITOR = g_pCompositor->getMonitorFromID(pWindow->m_iMonitorID);
|
||||||
const auto POSTOMON = pWindow->m_vRealPosition.goalv() - PWINDOWMONITOR->vecPosition;
|
const auto POSTOMON = pWindow->m_vRealPosition.goal() - PWINDOWMONITOR->vecPosition;
|
||||||
|
|
||||||
const auto PWORKSPACEMONITOR = g_pCompositor->getMonitorFromID(pWorkspace->m_iMonitorID);
|
const auto PWORKSPACEMONITOR = g_pCompositor->getMonitorFromID(pWorkspace->m_iMonitorID);
|
||||||
|
|
||||||
|
|
|
@ -5,14 +5,14 @@
|
||||||
#include "render/decorations/CHyprBorderDecoration.hpp"
|
#include "render/decorations/CHyprBorderDecoration.hpp"
|
||||||
|
|
||||||
CWindow::CWindow() {
|
CWindow::CWindow() {
|
||||||
m_vRealPosition.create(AVARTYPE_VECTOR, g_pConfigManager->getAnimationPropertyConfig("windowsIn"), (void*)this, AVARDAMAGE_ENTIRE);
|
m_vRealPosition.create(g_pConfigManager->getAnimationPropertyConfig("windowsIn"), (void*)this, AVARDAMAGE_ENTIRE);
|
||||||
m_vRealSize.create(AVARTYPE_VECTOR, g_pConfigManager->getAnimationPropertyConfig("windowsIn"), (void*)this, AVARDAMAGE_ENTIRE);
|
m_vRealSize.create(g_pConfigManager->getAnimationPropertyConfig("windowsIn"), (void*)this, AVARDAMAGE_ENTIRE);
|
||||||
m_fBorderFadeAnimationProgress.create(AVARTYPE_FLOAT, g_pConfigManager->getAnimationPropertyConfig("border"), (void*)this, AVARDAMAGE_BORDER);
|
m_fBorderFadeAnimationProgress.create(g_pConfigManager->getAnimationPropertyConfig("border"), (void*)this, AVARDAMAGE_BORDER);
|
||||||
m_fBorderAngleAnimationProgress.create(AVARTYPE_FLOAT, g_pConfigManager->getAnimationPropertyConfig("borderangle"), (void*)this, AVARDAMAGE_BORDER);
|
m_fBorderAngleAnimationProgress.create(g_pConfigManager->getAnimationPropertyConfig("borderangle"), (void*)this, AVARDAMAGE_BORDER);
|
||||||
m_fAlpha.create(AVARTYPE_FLOAT, g_pConfigManager->getAnimationPropertyConfig("fadeIn"), (void*)this, AVARDAMAGE_ENTIRE);
|
m_fAlpha.create(g_pConfigManager->getAnimationPropertyConfig("fadeIn"), (void*)this, AVARDAMAGE_ENTIRE);
|
||||||
m_fActiveInactiveAlpha.create(AVARTYPE_FLOAT, g_pConfigManager->getAnimationPropertyConfig("fadeSwitch"), (void*)this, AVARDAMAGE_ENTIRE);
|
m_fActiveInactiveAlpha.create(g_pConfigManager->getAnimationPropertyConfig("fadeSwitch"), (void*)this, AVARDAMAGE_ENTIRE);
|
||||||
m_cRealShadowColor.create(AVARTYPE_COLOR, g_pConfigManager->getAnimationPropertyConfig("fadeShadow"), (void*)this, AVARDAMAGE_SHADOW);
|
m_cRealShadowColor.create(g_pConfigManager->getAnimationPropertyConfig("fadeShadow"), (void*)this, AVARDAMAGE_SHADOW);
|
||||||
m_fDimPercent.create(AVARTYPE_FLOAT, g_pConfigManager->getAnimationPropertyConfig("fadeDim"), (void*)this, AVARDAMAGE_ENTIRE);
|
m_fDimPercent.create(g_pConfigManager->getAnimationPropertyConfig("fadeDim"), (void*)this, AVARDAMAGE_ENTIRE);
|
||||||
|
|
||||||
addWindowDeco(std::make_unique<CHyprDropShadowDecoration>(this));
|
addWindowDeco(std::make_unique<CHyprDropShadowDecoration>(this));
|
||||||
addWindowDeco(std::make_unique<CHyprBorderDecoration>(this));
|
addWindowDeco(std::make_unique<CHyprBorderDecoration>(this));
|
||||||
|
@ -39,8 +39,8 @@ SWindowDecorationExtents CWindow::getFullWindowExtents() {
|
||||||
|
|
||||||
if (m_sAdditionalConfigData.dimAround) {
|
if (m_sAdditionalConfigData.dimAround) {
|
||||||
const auto PMONITOR = g_pCompositor->getMonitorFromID(m_iMonitorID);
|
const auto PMONITOR = g_pCompositor->getMonitorFromID(m_iMonitorID);
|
||||||
return {{m_vRealPosition.vec().x - PMONITOR->vecPosition.x, m_vRealPosition.vec().y - PMONITOR->vecPosition.y},
|
return {{m_vRealPosition.value().x - PMONITOR->vecPosition.x, m_vRealPosition.value().y - PMONITOR->vecPosition.y},
|
||||||
{PMONITOR->vecSize.x - (m_vRealPosition.vec().x - PMONITOR->vecPosition.x), PMONITOR->vecSize.y - (m_vRealPosition.vec().y - PMONITOR->vecPosition.y)}};
|
{PMONITOR->vecSize.x - (m_vRealPosition.value().x - PMONITOR->vecPosition.x), PMONITOR->vecSize.y - (m_vRealPosition.value().y - PMONITOR->vecPosition.y)}};
|
||||||
}
|
}
|
||||||
|
|
||||||
SWindowDecorationExtents maxExtents = {{BORDERSIZE + 2, BORDERSIZE + 2}, {BORDERSIZE + 2, BORDERSIZE + 2}};
|
SWindowDecorationExtents maxExtents = {{BORDERSIZE + 2, BORDERSIZE + 2}, {BORDERSIZE + 2, BORDERSIZE + 2}};
|
||||||
|
@ -101,8 +101,8 @@ CBox CWindow::getFullWindowBoundingBox() {
|
||||||
|
|
||||||
auto maxExtents = getFullWindowExtents();
|
auto maxExtents = getFullWindowExtents();
|
||||||
|
|
||||||
CBox finalBox = {m_vRealPosition.vec().x - maxExtents.topLeft.x, m_vRealPosition.vec().y - maxExtents.topLeft.y,
|
CBox finalBox = {m_vRealPosition.value().x - maxExtents.topLeft.x, m_vRealPosition.value().y - maxExtents.topLeft.y,
|
||||||
m_vRealSize.vec().x + maxExtents.topLeft.x + maxExtents.bottomRight.x, m_vRealSize.vec().y + maxExtents.topLeft.y + maxExtents.bottomRight.y};
|
m_vRealSize.value().x + maxExtents.topLeft.x + maxExtents.bottomRight.x, m_vRealSize.value().y + maxExtents.topLeft.y + maxExtents.bottomRight.y};
|
||||||
|
|
||||||
return finalBox;
|
return finalBox;
|
||||||
}
|
}
|
||||||
|
@ -154,14 +154,14 @@ CBox CWindow::getWindowBoxUnified(uint64_t properties) {
|
||||||
if (properties & FULL_EXTENTS)
|
if (properties & FULL_EXTENTS)
|
||||||
EXTENTS.addExtents(g_pDecorationPositioner->getWindowDecorationExtents(this, false));
|
EXTENTS.addExtents(g_pDecorationPositioner->getWindowDecorationExtents(this, false));
|
||||||
|
|
||||||
CBox box = {m_vRealPosition.vec().x, m_vRealPosition.vec().y, m_vRealSize.vec().x, m_vRealSize.vec().y};
|
CBox box = {m_vRealPosition.value().x, m_vRealPosition.value().y, m_vRealSize.value().x, m_vRealSize.value().y};
|
||||||
box.addExtents(EXTENTS);
|
box.addExtents(EXTENTS);
|
||||||
|
|
||||||
return box;
|
return box;
|
||||||
}
|
}
|
||||||
|
|
||||||
CBox CWindow::getWindowMainSurfaceBox() {
|
CBox CWindow::getWindowMainSurfaceBox() {
|
||||||
return {m_vRealPosition.vec().x, m_vRealPosition.vec().y, m_vRealSize.vec().x, m_vRealSize.vec().y};
|
return {m_vRealPosition.value().x, m_vRealPosition.value().y, m_vRealSize.value().x, m_vRealSize.value().y};
|
||||||
}
|
}
|
||||||
|
|
||||||
SWindowDecorationExtents CWindow::getFullWindowReservedArea() {
|
SWindowDecorationExtents CWindow::getFullWindowReservedArea() {
|
||||||
|
@ -392,7 +392,7 @@ void CWindow::moveToWorkspace(int workspaceID) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// update xwayland coords
|
// update xwayland coords
|
||||||
g_pXWaylandManager->setWindowSize(this, m_vRealSize.vec());
|
g_pXWaylandManager->setWindowSize(this, m_vRealSize.value());
|
||||||
|
|
||||||
if (g_pCompositor->isWorkspaceSpecial(OLDWORKSPACE) && g_pCompositor->getWindowsOnWorkspace(OLDWORKSPACE) == 0 && **PCLOSEONLASTSPECIAL) {
|
if (g_pCompositor->isWorkspaceSpecial(OLDWORKSPACE) && g_pCompositor->getWindowsOnWorkspace(OLDWORKSPACE) == 0 && **PCLOSEONLASTSPECIAL) {
|
||||||
const auto PWS = g_pCompositor->getWorkspaceByID(OLDWORKSPACE);
|
const auto PWS = g_pCompositor->getWorkspaceByID(OLDWORKSPACE);
|
||||||
|
@ -433,7 +433,7 @@ void CWindow::removeDecorationByType(eDecorationType type) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void unregisterVar(void* ptr) {
|
void unregisterVar(void* ptr) {
|
||||||
((CAnimatedVariable*)ptr)->unregister();
|
((CBaseAnimatedVariable*)ptr)->unregister();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CWindow::onUnmap() {
|
void CWindow::onUnmap() {
|
||||||
|
@ -530,7 +530,7 @@ void CWindow::onMap() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void CWindow::onBorderAngleAnimEnd(void* ptr) {
|
void CWindow::onBorderAngleAnimEnd(void* ptr) {
|
||||||
const auto PANIMVAR = (CAnimatedVariable*)ptr;
|
const auto PANIMVAR = (CAnimatedVariable<float>*)ptr;
|
||||||
|
|
||||||
const std::string STYLE = PANIMVAR->getConfig()->pValues->internalStyle;
|
const std::string STYLE = PANIMVAR->getConfig()->pValues->internalStyle;
|
||||||
|
|
||||||
|
@ -727,10 +727,10 @@ bool CWindow::isInCurvedCorner(double x, double y) {
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// (x0, y0), (x0, y1), ... are the center point of rounding at each corner
|
// (x0, y0), (x0, y1), ... are the center point of rounding at each corner
|
||||||
double x0 = m_vRealPosition.vec().x + ROUNDING;
|
double x0 = m_vRealPosition.value().x + ROUNDING;
|
||||||
double y0 = m_vRealPosition.vec().y + ROUNDING;
|
double y0 = m_vRealPosition.value().y + ROUNDING;
|
||||||
double x1 = m_vRealPosition.vec().x + m_vRealSize.vec().x - ROUNDING;
|
double x1 = m_vRealPosition.value().x + m_vRealSize.value().x - ROUNDING;
|
||||||
double y1 = m_vRealPosition.vec().y + m_vRealSize.vec().y - ROUNDING;
|
double y1 = m_vRealPosition.value().y + m_vRealSize.value().y - ROUNDING;
|
||||||
|
|
||||||
if (x < x0 && y < y0) {
|
if (x < x0 && y < y0) {
|
||||||
return Vector2D{x0, y0}.distance(Vector2D{x, y}) > (double)ROUNDING;
|
return Vector2D{x0, y0}.distance(Vector2D{x, y}) > (double)ROUNDING;
|
||||||
|
@ -763,7 +763,7 @@ bool CWindow::hasPopupAt(const Vector2D& pos) {
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
wlr_surface* resultSurf = nullptr;
|
wlr_surface* resultSurf = nullptr;
|
||||||
Vector2D origin = m_vRealPosition.vec();
|
Vector2D origin = m_vRealPosition.value();
|
||||||
SExtensionFindingData data = {origin, pos, &resultSurf};
|
SExtensionFindingData data = {origin, pos, &resultSurf};
|
||||||
wlr_xdg_surface_for_each_popup_surface(m_uSurface.xdg, findExtensionForVector2D, &data);
|
wlr_xdg_surface_for_each_popup_surface(m_uSurface.xdg, findExtensionForVector2D, &data);
|
||||||
|
|
||||||
|
@ -902,8 +902,8 @@ void CWindow::setGroupCurrent(CWindow* pWindow) {
|
||||||
const bool FULLSCREEN = PCURRENT->m_bIsFullscreen;
|
const bool FULLSCREEN = PCURRENT->m_bIsFullscreen;
|
||||||
const auto WORKSPACE = g_pCompositor->getWorkspaceByID(PCURRENT->m_iWorkspaceID);
|
const auto WORKSPACE = g_pCompositor->getWorkspaceByID(PCURRENT->m_iWorkspaceID);
|
||||||
|
|
||||||
const auto PWINDOWSIZE = PCURRENT->m_vRealSize.goalv();
|
const auto PWINDOWSIZE = PCURRENT->m_vRealSize.goal();
|
||||||
const auto PWINDOWPOS = PCURRENT->m_vRealPosition.goalv();
|
const auto PWINDOWPOS = PCURRENT->m_vRealPosition.goal();
|
||||||
|
|
||||||
const auto CURRENTISFOCUS = PCURRENT == g_pCompositor->m_pLastWindow;
|
const auto CURRENTISFOCUS = PCURRENT == g_pCompositor->m_pLastWindow;
|
||||||
|
|
||||||
|
@ -997,19 +997,19 @@ void CWindow::updateGroupOutputs() {
|
||||||
curr->m_iMonitorID = m_iMonitorID;
|
curr->m_iMonitorID = m_iMonitorID;
|
||||||
curr->moveToWorkspace(m_iWorkspaceID);
|
curr->moveToWorkspace(m_iWorkspaceID);
|
||||||
|
|
||||||
curr->m_vRealPosition = m_vRealPosition.goalv();
|
curr->m_vRealPosition = m_vRealPosition.goal();
|
||||||
curr->m_vRealSize = m_vRealSize.goalv();
|
curr->m_vRealSize = m_vRealSize.goal();
|
||||||
|
|
||||||
curr = curr->m_sGroupData.pNextWindow;
|
curr = curr->m_sGroupData.pNextWindow;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector2D CWindow::middle() {
|
Vector2D CWindow::middle() {
|
||||||
return m_vRealPosition.goalv() + m_vRealSize.goalv() / 2.f;
|
return m_vRealPosition.goal() + m_vRealSize.goal() / 2.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CWindow::opaque() {
|
bool CWindow::opaque() {
|
||||||
if (m_fAlpha.fl() != 1.f || m_fActiveInactiveAlpha.fl() != 1.f)
|
if (m_fAlpha.value() != 1.f || m_fActiveInactiveAlpha.value() != 1.f)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(m_iWorkspaceID);
|
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(m_iWorkspaceID);
|
||||||
|
@ -1017,7 +1017,7 @@ bool CWindow::opaque() {
|
||||||
if (m_pWLSurface.small() && !m_pWLSurface.m_bFillIgnoreSmall)
|
if (m_pWLSurface.small() && !m_pWLSurface.m_bFillIgnoreSmall)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (PWORKSPACE->m_fAlpha.fl() != 1.f)
|
if (PWORKSPACE->m_fAlpha.value() != 1.f)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (m_bIsX11)
|
if (m_bIsX11)
|
||||||
|
|
|
@ -221,8 +221,8 @@ class CWindow {
|
||||||
Vector2D m_vSize = Vector2D(0, 0);
|
Vector2D m_vSize = Vector2D(0, 0);
|
||||||
|
|
||||||
// this is the real position and size used to draw the thing
|
// this is the real position and size used to draw the thing
|
||||||
CAnimatedVariable m_vRealPosition;
|
CAnimatedVariable<Vector2D> m_vRealPosition;
|
||||||
CAnimatedVariable m_vRealSize;
|
CAnimatedVariable<Vector2D> m_vRealSize;
|
||||||
|
|
||||||
// for not spamming the protocols
|
// for not spamming the protocols
|
||||||
Vector2D m_vReportedPosition;
|
Vector2D m_vReportedPosition;
|
||||||
|
@ -282,13 +282,13 @@ class CWindow {
|
||||||
std::unique_ptr<CPopup> m_pPopupHead;
|
std::unique_ptr<CPopup> m_pPopupHead;
|
||||||
|
|
||||||
// Animated border
|
// Animated border
|
||||||
CGradientValueData m_cRealBorderColor = {0};
|
CGradientValueData m_cRealBorderColor = {0};
|
||||||
CGradientValueData m_cRealBorderColorPrevious = {0};
|
CGradientValueData m_cRealBorderColorPrevious = {0};
|
||||||
CAnimatedVariable m_fBorderFadeAnimationProgress;
|
CAnimatedVariable<float> m_fBorderFadeAnimationProgress;
|
||||||
CAnimatedVariable m_fBorderAngleAnimationProgress;
|
CAnimatedVariable<float> m_fBorderAngleAnimationProgress;
|
||||||
|
|
||||||
// Fade in-out
|
// Fade in-out
|
||||||
CAnimatedVariable m_fAlpha;
|
CAnimatedVariable<float> m_fAlpha;
|
||||||
bool m_bFadingOut = false;
|
bool m_bFadingOut = false;
|
||||||
bool m_bReadyToDelete = false;
|
bool m_bReadyToDelete = false;
|
||||||
Vector2D m_vOriginalClosedPos; // these will be used for calculations later on in
|
Vector2D m_vOriginalClosedPos; // these will be used for calculations later on in
|
||||||
|
@ -322,13 +322,13 @@ class CWindow {
|
||||||
std::vector<std::unique_ptr<IWindowTransformer>> m_vTransformers;
|
std::vector<std::unique_ptr<IWindowTransformer>> m_vTransformers;
|
||||||
|
|
||||||
// for alpha
|
// for alpha
|
||||||
CAnimatedVariable m_fActiveInactiveAlpha;
|
CAnimatedVariable<float> m_fActiveInactiveAlpha;
|
||||||
|
|
||||||
// animated shadow color
|
// animated shadow color
|
||||||
CAnimatedVariable m_cRealShadowColor;
|
CAnimatedVariable<CColor> m_cRealShadowColor;
|
||||||
|
|
||||||
// animated tint
|
// animated tint
|
||||||
CAnimatedVariable m_fDimPercent;
|
CAnimatedVariable<float> m_fDimPercent;
|
||||||
|
|
||||||
// swallowing
|
// swallowing
|
||||||
CWindow* m_pSwallowed = nullptr;
|
CWindow* m_pSwallowed = nullptr;
|
||||||
|
|
|
@ -171,8 +171,8 @@ static std::string getWindowData(CWindow* w, eHyprCtlOutputFormat format) {
|
||||||
"swallowing": "0x{:x}",
|
"swallowing": "0x{:x}",
|
||||||
"focusHistoryID": {}
|
"focusHistoryID": {}
|
||||||
}},)#",
|
}},)#",
|
||||||
(uintptr_t)w, (w->m_bIsMapped ? "true" : "false"), (w->isHidden() ? "true" : "false"), (int)w->m_vRealPosition.goalv().x, (int)w->m_vRealPosition.goalv().y,
|
(uintptr_t)w, (w->m_bIsMapped ? "true" : "false"), (w->isHidden() ? "true" : "false"), (int)w->m_vRealPosition.goal().x, (int)w->m_vRealPosition.goal().y,
|
||||||
(int)w->m_vRealSize.goalv().x, (int)w->m_vRealSize.goalv().y, w->m_iWorkspaceID,
|
(int)w->m_vRealSize.goal().x, (int)w->m_vRealSize.goal().y, w->m_iWorkspaceID,
|
||||||
escapeJSONStrings(w->m_iWorkspaceID == -1 ? "" :
|
escapeJSONStrings(w->m_iWorkspaceID == -1 ? "" :
|
||||||
g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID) ? g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID)->m_szName :
|
g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID) ? g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID)->m_szName :
|
||||||
std::string("Invalid workspace " + std::to_string(w->m_iWorkspaceID))),
|
std::string("Invalid workspace " + std::to_string(w->m_iWorkspaceID))),
|
||||||
|
@ -187,8 +187,8 @@ static std::string getWindowData(CWindow* w, eHyprCtlOutputFormat format) {
|
||||||
"{}\n\tinitialClass: {}\n\tinitialTitle: {}\n\tpid: "
|
"{}\n\tinitialClass: {}\n\tinitialTitle: {}\n\tpid: "
|
||||||
"{}\n\txwayland: {}\n\tpinned: "
|
"{}\n\txwayland: {}\n\tpinned: "
|
||||||
"{}\n\tfullscreen: {}\n\tfullscreenmode: {}\n\tfakefullscreen: {}\n\tgrouped: {}\n\tswallowing: {:x}\n\tfocusHistoryID: {}\n\n",
|
"{}\n\tfullscreen: {}\n\tfullscreenmode: {}\n\tfakefullscreen: {}\n\tgrouped: {}\n\tswallowing: {:x}\n\tfocusHistoryID: {}\n\n",
|
||||||
(uintptr_t)w, w->m_szTitle, (int)w->m_bIsMapped, (int)w->isHidden(), (int)w->m_vRealPosition.goalv().x, (int)w->m_vRealPosition.goalv().y,
|
(uintptr_t)w, w->m_szTitle, (int)w->m_bIsMapped, (int)w->isHidden(), (int)w->m_vRealPosition.goal().x, (int)w->m_vRealPosition.goal().y, (int)w->m_vRealSize.goal().x,
|
||||||
(int)w->m_vRealSize.goalv().x, (int)w->m_vRealSize.goalv().y, w->m_iWorkspaceID,
|
(int)w->m_vRealSize.goal().y, w->m_iWorkspaceID,
|
||||||
(w->m_iWorkspaceID == -1 ? "" :
|
(w->m_iWorkspaceID == -1 ? "" :
|
||||||
g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID) ? g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID)->m_szName :
|
g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID) ? g_pCompositor->getWorkspaceByID(w->m_iWorkspaceID)->m_szName :
|
||||||
std::string("Invalid workspace " + std::to_string(w->m_iWorkspaceID))),
|
std::string("Invalid workspace " + std::to_string(w->m_iWorkspaceID))),
|
||||||
|
|
|
@ -207,9 +207,9 @@ Vector2D CPopup::localToGlobal(const Vector2D& rel) {
|
||||||
|
|
||||||
Vector2D CPopup::t1ParentCoords() {
|
Vector2D CPopup::t1ParentCoords() {
|
||||||
if (m_pWindowOwner)
|
if (m_pWindowOwner)
|
||||||
return m_pWindowOwner->m_vRealPosition.vec();
|
return m_pWindowOwner->m_vRealPosition.value();
|
||||||
if (m_pLayerOwner)
|
if (m_pLayerOwner)
|
||||||
return m_pLayerOwner->realPosition.vec();
|
return m_pLayerOwner->realPosition.value();
|
||||||
|
|
||||||
ASSERT(false);
|
ASSERT(false);
|
||||||
return {};
|
return {};
|
||||||
|
|
|
@ -236,7 +236,7 @@ Vector2D CSubsurface::coordsGlobal() {
|
||||||
Vector2D coords = coordsRelativeToParent();
|
Vector2D coords = coordsRelativeToParent();
|
||||||
|
|
||||||
if (m_pWindowParent)
|
if (m_pWindowParent)
|
||||||
coords += m_pWindowParent->m_vRealPosition.vec();
|
coords += m_pWindowParent->m_vRealPosition.value();
|
||||||
else if (m_pPopupParent)
|
else if (m_pPopupParent)
|
||||||
coords += m_pPopupParent->coordsGlobal();
|
coords += m_pPopupParent->coordsGlobal();
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ Vector2D CWLSurface::correctSmallVec() const {
|
||||||
const auto SIZE = getViewporterCorrectedSize();
|
const auto SIZE = getViewporterCorrectedSize();
|
||||||
|
|
||||||
return Vector2D{(m_pWindowOwner->m_vReportedSize.x - SIZE.x) / 2, (m_pWindowOwner->m_vReportedSize.y - SIZE.y) / 2}.clamp({}, {INFINITY, INFINITY}) *
|
return Vector2D{(m_pWindowOwner->m_vReportedSize.x - SIZE.x) / 2, (m_pWindowOwner->m_vReportedSize.y - SIZE.y) / 2}.clamp({}, {INFINITY, INFINITY}) *
|
||||||
(m_pWindowOwner->m_vRealSize.vec() / m_pWindowOwner->m_vReportedSize);
|
(m_pWindowOwner->m_vRealSize.value() / m_pWindowOwner->m_vReportedSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector2D CWLSurface::getViewporterCorrectedSize() const {
|
Vector2D CWLSurface::getViewporterCorrectedSize() const {
|
||||||
|
@ -171,4 +171,4 @@ std::optional<CBox> CWLSurface::getSurfaceBoxGlobal() {
|
||||||
return CBox{m_pSubsurfaceOwner->coordsGlobal(), m_pSubsurfaceOwner->size()};
|
return CBox{m_pSubsurfaceOwner->coordsGlobal(), m_pSubsurfaceOwner->size()};
|
||||||
|
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,8 +14,8 @@ CWorkspace::CWorkspace(int monitorID, std::string name, bool special) {
|
||||||
m_bIsSpecialWorkspace = special;
|
m_bIsSpecialWorkspace = special;
|
||||||
|
|
||||||
m_vRenderOffset.m_pWorkspace = this;
|
m_vRenderOffset.m_pWorkspace = this;
|
||||||
m_vRenderOffset.create(AVARTYPE_VECTOR, special ? g_pConfigManager->getAnimationPropertyConfig("specialWorkspace") : g_pConfigManager->getAnimationPropertyConfig("workspaces"),
|
m_vRenderOffset.create(special ? g_pConfigManager->getAnimationPropertyConfig("specialWorkspace") : g_pConfigManager->getAnimationPropertyConfig("workspaces"), nullptr,
|
||||||
nullptr, AVARDAMAGE_ENTIRE);
|
AVARDAMAGE_ENTIRE);
|
||||||
m_fAlpha.m_pWorkspace = this;
|
m_fAlpha.m_pWorkspace = this;
|
||||||
m_fAlpha.create(AVARTYPE_FLOAT, special ? g_pConfigManager->getAnimationPropertyConfig("specialWorkspace") : g_pConfigManager->getAnimationPropertyConfig("workspaces"),
|
m_fAlpha.create(AVARTYPE_FLOAT, special ? g_pConfigManager->getAnimationPropertyConfig("specialWorkspace") : g_pConfigManager->getAnimationPropertyConfig("workspaces"),
|
||||||
nullptr, AVARDAMAGE_ENTIRE);
|
nullptr, AVARDAMAGE_ENTIRE);
|
||||||
|
|
|
@ -35,9 +35,9 @@ class CWorkspace {
|
||||||
wl_array m_wlrCoordinateArr;
|
wl_array m_wlrCoordinateArr;
|
||||||
|
|
||||||
// for animations
|
// for animations
|
||||||
CAnimatedVariable m_vRenderOffset;
|
CAnimatedVariable<Vector2D> m_vRenderOffset;
|
||||||
CAnimatedVariable m_fAlpha;
|
CAnimatedVariable<float> m_fAlpha;
|
||||||
bool m_bForceRendering = false;
|
bool m_bForceRendering = false;
|
||||||
|
|
||||||
// "scratchpad"
|
// "scratchpad"
|
||||||
bool m_bIsSpecialWorkspace = false;
|
bool m_bIsSpecialWorkspace = false;
|
||||||
|
|
|
@ -327,13 +327,13 @@ void Events::listener_commitLayerSurface(void* owner, void* data) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (layersurface->realPosition.goalv() != layersurface->geometry.pos()) {
|
if (layersurface->realPosition.goal() != layersurface->geometry.pos()) {
|
||||||
if (layersurface->realPosition.isBeingAnimated())
|
if (layersurface->realPosition.isBeingAnimated())
|
||||||
layersurface->realPosition = layersurface->geometry.pos();
|
layersurface->realPosition = layersurface->geometry.pos();
|
||||||
else
|
else
|
||||||
layersurface->realPosition.setValueAndWarp(layersurface->geometry.pos());
|
layersurface->realPosition.setValueAndWarp(layersurface->geometry.pos());
|
||||||
}
|
}
|
||||||
if (layersurface->realSize.goalv() != layersurface->geometry.size()) {
|
if (layersurface->realSize.goal() != layersurface->geometry.size()) {
|
||||||
if (layersurface->realSize.isBeingAnimated())
|
if (layersurface->realSize.isBeingAnimated())
|
||||||
layersurface->realSize = layersurface->geometry.size();
|
layersurface->realSize = layersurface->geometry.size();
|
||||||
else
|
else
|
||||||
|
|
|
@ -17,8 +17,8 @@
|
||||||
|
|
||||||
void addViewCoords(void* pWindow, int* x, int* y) {
|
void addViewCoords(void* pWindow, int* x, int* y) {
|
||||||
const auto PWINDOW = (CWindow*)pWindow;
|
const auto PWINDOW = (CWindow*)pWindow;
|
||||||
*x += PWINDOW->m_vRealPosition.goalv().x;
|
*x += PWINDOW->m_vRealPosition.goal().x;
|
||||||
*y += PWINDOW->m_vRealPosition.goalv().y;
|
*y += PWINDOW->m_vRealPosition.goal().y;
|
||||||
|
|
||||||
if (!PWINDOW->m_bIsX11 && PWINDOW->m_bIsMapped) {
|
if (!PWINDOW->m_bIsX11 && PWINDOW->m_bIsMapped) {
|
||||||
wlr_box geom;
|
wlr_box geom;
|
||||||
|
@ -30,9 +30,9 @@ void addViewCoords(void* pWindow, int* x, int* y) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void setAnimToMove(void* data) {
|
void setAnimToMove(void* data) {
|
||||||
auto* const PANIMCFG = g_pConfigManager->getAnimationPropertyConfig("windowsMove");
|
auto* const PANIMCFG = g_pConfigManager->getAnimationPropertyConfig("windowsMove");
|
||||||
|
|
||||||
CAnimatedVariable* animvar = (CAnimatedVariable*)data;
|
CBaseAnimatedVariable* animvar = (CBaseAnimatedVariable*)data;
|
||||||
|
|
||||||
animvar->setConfig(PANIMCFG);
|
animvar->setConfig(PANIMCFG);
|
||||||
}
|
}
|
||||||
|
@ -323,7 +323,7 @@ void Events::listener_mapWindow(void* owner, void* data) {
|
||||||
Debug::log(LOG, "Rule size, applying to {}", PWINDOW);
|
Debug::log(LOG, "Rule size, applying to {}", PWINDOW);
|
||||||
|
|
||||||
PWINDOW->m_vRealSize = Vector2D(SIZEX, SIZEY);
|
PWINDOW->m_vRealSize = Vector2D(SIZEX, SIZEY);
|
||||||
g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.goalv());
|
g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.goal());
|
||||||
|
|
||||||
PWINDOW->setHidden(false);
|
PWINDOW->setHidden(false);
|
||||||
} catch (...) { Debug::log(LOG, "Rule size failed, rule: {} -> {}", r.szRule, r.szValue); }
|
} catch (...) { Debug::log(LOG, "Rule size failed, rule: {} -> {}", r.szRule, r.szValue); }
|
||||||
|
@ -334,10 +334,10 @@ void Events::listener_mapWindow(void* owner, void* data) {
|
||||||
const auto SIZEYSTR = VALUE.substr(VALUE.find(' ') + 1);
|
const auto SIZEYSTR = VALUE.substr(VALUE.find(' ') + 1);
|
||||||
|
|
||||||
const auto SIZE =
|
const auto SIZE =
|
||||||
Vector2D(std::max((double)std::stoll(SIZEXSTR), PWINDOW->m_vRealSize.goalv().x), std::max((double)std::stoll(SIZEYSTR), PWINDOW->m_vRealSize.goalv().y));
|
Vector2D(std::max((double)std::stoll(SIZEXSTR), PWINDOW->m_vRealSize.goal().x), std::max((double)std::stoll(SIZEYSTR), PWINDOW->m_vRealSize.goal().y));
|
||||||
|
|
||||||
PWINDOW->m_vRealSize = SIZE;
|
PWINDOW->m_vRealSize = SIZE;
|
||||||
g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.goalv());
|
g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.goal());
|
||||||
|
|
||||||
PWINDOW->setHidden(false);
|
PWINDOW->setHidden(false);
|
||||||
} catch (...) { Debug::log(LOG, "Rule minsize failed, rule: {} -> {}", r.szRule, r.szValue); }
|
} catch (...) { Debug::log(LOG, "Rule minsize failed, rule: {} -> {}", r.szRule, r.szValue); }
|
||||||
|
@ -348,10 +348,10 @@ void Events::listener_mapWindow(void* owner, void* data) {
|
||||||
const auto SIZEYSTR = VALUE.substr(VALUE.find(' ') + 1);
|
const auto SIZEYSTR = VALUE.substr(VALUE.find(' ') + 1);
|
||||||
|
|
||||||
const auto SIZE =
|
const auto SIZE =
|
||||||
Vector2D(std::min((double)std::stoll(SIZEXSTR), PWINDOW->m_vRealSize.goalv().x), std::min((double)std::stoll(SIZEYSTR), PWINDOW->m_vRealSize.goalv().y));
|
Vector2D(std::min((double)std::stoll(SIZEXSTR), PWINDOW->m_vRealSize.goal().x), std::min((double)std::stoll(SIZEYSTR), PWINDOW->m_vRealSize.goal().y));
|
||||||
|
|
||||||
PWINDOW->m_vRealSize = SIZE;
|
PWINDOW->m_vRealSize = SIZE;
|
||||||
g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.goalv());
|
g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.goal());
|
||||||
|
|
||||||
PWINDOW->setHidden(false);
|
PWINDOW->setHidden(false);
|
||||||
} catch (...) { Debug::log(LOG, "Rule maxsize failed, rule: {} -> {}", r.szRule, r.szValue); }
|
} catch (...) { Debug::log(LOG, "Rule maxsize failed, rule: {} -> {}", r.szRule, r.szValue); }
|
||||||
|
@ -390,7 +390,7 @@ void Events::listener_mapWindow(void* owner, void* data) {
|
||||||
posX = g_pInputManager->getMouseCoordsInternal().x - PMONITOR->vecPosition.x;
|
posX = g_pInputManager->getMouseCoordsInternal().x - PMONITOR->vecPosition.x;
|
||||||
} else {
|
} else {
|
||||||
posX = g_pInputManager->getMouseCoordsInternal().x - PMONITOR->vecPosition.x +
|
posX = g_pInputManager->getMouseCoordsInternal().x - PMONITOR->vecPosition.x +
|
||||||
(!POSXSTR.contains('%') ? std::stoi(POSXSTR) : std::stof(POSXSTR.substr(0, POSXSTR.length() - 1)) * 0.01 * PWINDOW->m_vRealSize.goalv().x);
|
(!POSXSTR.contains('%') ? std::stoi(POSXSTR) : std::stof(POSXSTR.substr(0, POSXSTR.length() - 1)) * 0.01 * PWINDOW->m_vRealSize.goal().x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -409,7 +409,7 @@ void Events::listener_mapWindow(void* owner, void* data) {
|
||||||
posY = g_pInputManager->getMouseCoordsInternal().y - PMONITOR->vecPosition.y;
|
posY = g_pInputManager->getMouseCoordsInternal().y - PMONITOR->vecPosition.y;
|
||||||
} else {
|
} else {
|
||||||
posY = g_pInputManager->getMouseCoordsInternal().y - PMONITOR->vecPosition.y +
|
posY = g_pInputManager->getMouseCoordsInternal().y - PMONITOR->vecPosition.y +
|
||||||
(!POSYSTR.contains('%') ? std::stoi(POSYSTR) : std::stof(POSYSTR.substr(0, POSYSTR.length() - 1)) * 0.01 * PWINDOW->m_vRealSize.goalv().y);
|
(!POSYSTR.contains('%') ? std::stoi(POSYSTR) : std::stof(POSYSTR.substr(0, POSYSTR.length() - 1)) * 0.01 * PWINDOW->m_vRealSize.goal().y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -417,10 +417,10 @@ void Events::listener_mapWindow(void* owner, void* data) {
|
||||||
int borderSize = PWINDOW->getRealBorderSize();
|
int borderSize = PWINDOW->getRealBorderSize();
|
||||||
|
|
||||||
posX = std::clamp(posX, (int)(PMONITOR->vecReservedTopLeft.x + borderSize),
|
posX = std::clamp(posX, (int)(PMONITOR->vecReservedTopLeft.x + borderSize),
|
||||||
(int)(PMONITOR->vecSize.x - PMONITOR->vecReservedBottomRight.x - PWINDOW->m_vRealSize.goalv().x - borderSize));
|
(int)(PMONITOR->vecSize.x - PMONITOR->vecReservedBottomRight.x - PWINDOW->m_vRealSize.goal().x - borderSize));
|
||||||
|
|
||||||
posY = std::clamp(posY, (int)(PMONITOR->vecReservedTopLeft.y + borderSize),
|
posY = std::clamp(posY, (int)(PMONITOR->vecReservedTopLeft.y + borderSize),
|
||||||
(int)(PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y - PWINDOW->m_vRealSize.goalv().y - borderSize));
|
(int)(PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y - PWINDOW->m_vRealSize.goal().y - borderSize));
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug::log(LOG, "Rule move, applying to {}", PWINDOW);
|
Debug::log(LOG, "Rule move, applying to {}", PWINDOW);
|
||||||
|
@ -435,20 +435,20 @@ void Events::listener_mapWindow(void* owner, void* data) {
|
||||||
if (ARGS[1] == "1")
|
if (ARGS[1] == "1")
|
||||||
RESERVEDOFFSET = (PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight) / 2.f;
|
RESERVEDOFFSET = (PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight) / 2.f;
|
||||||
|
|
||||||
PWINDOW->m_vRealPosition = PMONITOR->middle() - PWINDOW->m_vRealSize.goalv() / 2.f + RESERVEDOFFSET;
|
PWINDOW->m_vRealPosition = PMONITOR->middle() - PWINDOW->m_vRealSize.value() / 2.f + RESERVEDOFFSET;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// set the pseudo size to the GOAL of our current size
|
// set the pseudo size to the GOAL of our current size
|
||||||
// because the windows are animated on RealSize
|
// because the windows are animated on RealSize
|
||||||
PWINDOW->m_vPseudoSize = PWINDOW->m_vRealSize.goalv();
|
PWINDOW->m_vPseudoSize = PWINDOW->m_vRealSize.goal();
|
||||||
|
|
||||||
g_pCompositor->changeWindowZOrder(PWINDOW, true);
|
g_pCompositor->changeWindowZOrder(PWINDOW, true);
|
||||||
} else {
|
} else {
|
||||||
g_pLayoutManager->getCurrentLayout()->onWindowCreated(PWINDOW);
|
g_pLayoutManager->getCurrentLayout()->onWindowCreated(PWINDOW);
|
||||||
|
|
||||||
// Set the pseudo size here too so that it doesnt end up being 0x0
|
// Set the pseudo size here too so that it doesnt end up being 0x0
|
||||||
PWINDOW->m_vPseudoSize = PWINDOW->m_vRealSize.goalv() - Vector2D(10, 10);
|
PWINDOW->m_vPseudoSize = PWINDOW->m_vRealSize.goal() - Vector2D(10, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto PFOCUSEDWINDOWPREV = g_pCompositor->m_pLastWindow;
|
const auto PFOCUSEDWINDOWPREV = g_pCompositor->m_pLastWindow;
|
||||||
|
@ -617,7 +617,7 @@ void Events::listener_mapWindow(void* owner, void* data) {
|
||||||
|
|
||||||
PWINDOW->m_bFirstMap = false;
|
PWINDOW->m_bFirstMap = false;
|
||||||
|
|
||||||
Debug::log(LOG, "Map request dispatched, monitor {}, window pos: {:5j}, window size: {:5j}", PMONITOR->szName, PWINDOW->m_vRealPosition.goalv(), PWINDOW->m_vRealSize.goalv());
|
Debug::log(LOG, "Map request dispatched, monitor {}, window pos: {:5j}, window size: {:5j}", PMONITOR->szName, PWINDOW->m_vRealPosition.goal(), PWINDOW->m_vRealSize.goal());
|
||||||
|
|
||||||
auto workspaceID = requestedWorkspace != "" ? requestedWorkspace : PWORKSPACE->m_szName;
|
auto workspaceID = requestedWorkspace != "" ? requestedWorkspace : PWORKSPACE->m_szName;
|
||||||
g_pEventManager->postEvent(SHyprIPCEvent{"openwindow", std::format("{:x},{},{},{}", PWINDOW, workspaceID, g_pXWaylandManager->getAppIDClass(PWINDOW), PWINDOW->m_szTitle)});
|
g_pEventManager->postEvent(SHyprIPCEvent{"openwindow", std::format("{:x},{},{},{}", PWINDOW, workspaceID, g_pXWaylandManager->getAppIDClass(PWINDOW), PWINDOW->m_szTitle)});
|
||||||
|
@ -670,8 +670,8 @@ void Events::listener_unmapWindow(void* owner, void* data) {
|
||||||
|
|
||||||
const auto PMONITOR = g_pCompositor->getMonitorFromID(PWINDOW->m_iMonitorID);
|
const auto PMONITOR = g_pCompositor->getMonitorFromID(PWINDOW->m_iMonitorID);
|
||||||
if (PMONITOR) {
|
if (PMONITOR) {
|
||||||
PWINDOW->m_vOriginalClosedPos = PWINDOW->m_vRealPosition.vec() - PMONITOR->vecPosition;
|
PWINDOW->m_vOriginalClosedPos = PWINDOW->m_vRealPosition.value() - PMONITOR->vecPosition;
|
||||||
PWINDOW->m_vOriginalClosedSize = PWINDOW->m_vRealSize.vec();
|
PWINDOW->m_vOriginalClosedSize = PWINDOW->m_vRealSize.value();
|
||||||
PWINDOW->m_eOriginalClosedExtents = PWINDOW->getFullWindowExtents();
|
PWINDOW->m_eOriginalClosedExtents = PWINDOW->getFullWindowExtents();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -760,8 +760,8 @@ void Events::listener_unmapWindow(void* owner, void* data) {
|
||||||
|
|
||||||
g_pHyprRenderer->damageMonitor(g_pCompositor->getMonitorFromID(PWINDOW->m_iMonitorID));
|
g_pHyprRenderer->damageMonitor(g_pCompositor->getMonitorFromID(PWINDOW->m_iMonitorID));
|
||||||
|
|
||||||
if (!PWINDOW->m_bX11DoesntWantBorders) // don't animate out if they weren't animated in.
|
if (!PWINDOW->m_bX11DoesntWantBorders) // don't animate out if they weren't animated in.
|
||||||
PWINDOW->m_vRealPosition = PWINDOW->m_vRealPosition.vec() + Vector2D(0.01f, 0.01f); // it has to be animated, otherwise onWindowPostCreateClose will ignore it
|
PWINDOW->m_vRealPosition = PWINDOW->m_vRealPosition.value() + Vector2D(0.01f, 0.01f); // it has to be animated, otherwise onWindowPostCreateClose will ignore it
|
||||||
|
|
||||||
// anims
|
// anims
|
||||||
g_pAnimationManager->onWindowPostCreateClose(PWINDOW, true);
|
g_pAnimationManager->onWindowPostCreateClose(PWINDOW, true);
|
||||||
|
@ -831,7 +831,7 @@ void Events::listener_commitWindow(void* owner, void* data) {
|
||||||
PWINDOW->m_pPendingSizeAck.reset();
|
PWINDOW->m_pPendingSizeAck.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
g_pHyprRenderer->damageSurface(PWINDOW->m_pWLSurface.wlr(), PWINDOW->m_vRealPosition.goalv().x, PWINDOW->m_vRealPosition.goalv().y,
|
g_pHyprRenderer->damageSurface(PWINDOW->m_pWLSurface.wlr(), PWINDOW->m_vRealPosition.goal().x, PWINDOW->m_vRealPosition.goal().y,
|
||||||
PWINDOW->m_bIsX11 ? 1.0 / PWINDOW->m_fX11SurfaceScaledBy : 1.0);
|
PWINDOW->m_bIsX11 ? 1.0 / PWINDOW->m_fX11SurfaceScaledBy : 1.0);
|
||||||
|
|
||||||
if (!PWINDOW->m_bIsX11) {
|
if (!PWINDOW->m_bIsX11) {
|
||||||
|
@ -848,7 +848,7 @@ void Events::listener_commitWindow(void* owner, void* data) {
|
||||||
if (MAXSIZE < Vector2D{1, 1})
|
if (MAXSIZE < Vector2D{1, 1})
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const auto REALSIZE = PWINDOW->m_vRealSize.goalv();
|
const auto REALSIZE = PWINDOW->m_vRealSize.goal();
|
||||||
Vector2D newSize = REALSIZE;
|
Vector2D newSize = REALSIZE;
|
||||||
|
|
||||||
if (MAXSIZE.x < newSize.x)
|
if (MAXSIZE.x < newSize.x)
|
||||||
|
@ -862,7 +862,7 @@ void Events::listener_commitWindow(void* owner, void* data) {
|
||||||
|
|
||||||
const Vector2D DELTA = REALSIZE - newSize;
|
const Vector2D DELTA = REALSIZE - newSize;
|
||||||
|
|
||||||
PWINDOW->m_vRealPosition = PWINDOW->m_vRealPosition.goalv() + DELTA / 2.0;
|
PWINDOW->m_vRealPosition = PWINDOW->m_vRealPosition.goal() + DELTA / 2.0;
|
||||||
PWINDOW->m_vRealSize = newSize;
|
PWINDOW->m_vRealSize = newSize;
|
||||||
g_pXWaylandManager->setWindowSize(PWINDOW, newSize, true);
|
g_pXWaylandManager->setWindowSize(PWINDOW, newSize, true);
|
||||||
g_pHyprRenderer->damageWindow(PWINDOW);
|
g_pHyprRenderer->damageWindow(PWINDOW);
|
||||||
|
@ -1068,7 +1068,7 @@ void Events::listener_configureX11(void* owner, void* data) {
|
||||||
g_pHyprRenderer->damageWindow(PWINDOW);
|
g_pHyprRenderer->damageWindow(PWINDOW);
|
||||||
|
|
||||||
if (!PWINDOW->m_bIsFloating || PWINDOW->m_bIsFullscreen || g_pInputManager->currentlyDraggedWindow == PWINDOW) {
|
if (!PWINDOW->m_bIsFloating || PWINDOW->m_bIsFullscreen || g_pInputManager->currentlyDraggedWindow == PWINDOW) {
|
||||||
g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.goalv(), true);
|
g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.goal(), true);
|
||||||
g_pInputManager->refocus();
|
g_pInputManager->refocus();
|
||||||
g_pHyprRenderer->damageWindow(PWINDOW);
|
g_pHyprRenderer->damageWindow(PWINDOW);
|
||||||
return;
|
return;
|
||||||
|
@ -1087,13 +1087,13 @@ void Events::listener_configureX11(void* owner, void* data) {
|
||||||
static auto* const PXWLFORCESCALEZERO = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("xwayland:force_zero_scaling");
|
static auto* const PXWLFORCESCALEZERO = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("xwayland:force_zero_scaling");
|
||||||
if (**PXWLFORCESCALEZERO) {
|
if (**PXWLFORCESCALEZERO) {
|
||||||
if (const auto PMONITOR = g_pCompositor->getMonitorFromID(PWINDOW->m_iMonitorID); PMONITOR) {
|
if (const auto PMONITOR = g_pCompositor->getMonitorFromID(PWINDOW->m_iMonitorID); PMONITOR) {
|
||||||
PWINDOW->m_vRealSize.setValueAndWarp(PWINDOW->m_vRealSize.goalv() / PMONITOR->scale);
|
PWINDOW->m_vRealSize.setValueAndWarp(PWINDOW->m_vRealSize.goal() / PMONITOR->scale);
|
||||||
PWINDOW->m_fX11SurfaceScaledBy = PMONITOR->scale;
|
PWINDOW->m_fX11SurfaceScaledBy = PMONITOR->scale;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PWINDOW->m_vPosition = PWINDOW->m_vRealPosition.vec();
|
PWINDOW->m_vPosition = PWINDOW->m_vRealPosition.value();
|
||||||
PWINDOW->m_vSize = PWINDOW->m_vRealSize.vec();
|
PWINDOW->m_vSize = PWINDOW->m_vRealSize.value();
|
||||||
|
|
||||||
wlr_xwayland_surface_configure(PWINDOW->m_uSurface.xwayland, E->x, E->y, E->width, E->height);
|
wlr_xwayland_surface_configure(PWINDOW->m_uSurface.xwayland, E->x, E->y, E->width, E->height);
|
||||||
|
|
||||||
|
@ -1105,7 +1105,7 @@ void Events::listener_configureX11(void* owner, void* data) {
|
||||||
if (!g_pCompositor->isWorkspaceVisible(PWINDOW->m_iWorkspaceID))
|
if (!g_pCompositor->isWorkspaceVisible(PWINDOW->m_iWorkspaceID))
|
||||||
return; // further things are only for visible windows
|
return; // further things are only for visible windows
|
||||||
|
|
||||||
PWINDOW->m_iWorkspaceID = g_pCompositor->getMonitorFromVector(PWINDOW->m_vRealPosition.vec() + PWINDOW->m_vRealSize.vec() / 2.f)->activeWorkspace;
|
PWINDOW->m_iWorkspaceID = g_pCompositor->getMonitorFromVector(PWINDOW->m_vRealPosition.value() + PWINDOW->m_vRealSize.value() / 2.f)->activeWorkspace;
|
||||||
|
|
||||||
g_pCompositor->changeWindowZOrder(PWINDOW, true);
|
g_pCompositor->changeWindowZOrder(PWINDOW, true);
|
||||||
|
|
||||||
|
@ -1123,8 +1123,8 @@ void Events::listener_unmanagedSetGeometry(void* owner, void* data) {
|
||||||
if (!PWINDOW->m_bIsMapped)
|
if (!PWINDOW->m_bIsMapped)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const auto POS = PWINDOW->m_vRealPosition.goalv();
|
const auto POS = PWINDOW->m_vRealPosition.goal();
|
||||||
const auto SIZ = PWINDOW->m_vRealSize.goalv();
|
const auto SIZ = PWINDOW->m_vRealSize.goal();
|
||||||
|
|
||||||
if (PWINDOW->m_uSurface.xwayland->width > 1 && PWINDOW->m_uSurface.xwayland->height > 1)
|
if (PWINDOW->m_uSurface.xwayland->width > 1 && PWINDOW->m_uSurface.xwayland->height > 1)
|
||||||
PWINDOW->setHidden(false);
|
PWINDOW->setHidden(false);
|
||||||
|
@ -1132,7 +1132,7 @@ void Events::listener_unmanagedSetGeometry(void* owner, void* data) {
|
||||||
PWINDOW->setHidden(true);
|
PWINDOW->setHidden(true);
|
||||||
|
|
||||||
if (PWINDOW->m_bIsFullscreen || !PWINDOW->m_bIsFloating) {
|
if (PWINDOW->m_bIsFullscreen || !PWINDOW->m_bIsFloating) {
|
||||||
g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.goalv(), true);
|
g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.goal(), true);
|
||||||
g_pHyprRenderer->damageWindow(PWINDOW);
|
g_pHyprRenderer->damageWindow(PWINDOW);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1154,23 +1154,23 @@ void Events::listener_unmanagedSetGeometry(void* owner, void* data) {
|
||||||
|
|
||||||
if (**PXWLFORCESCALEZERO) {
|
if (**PXWLFORCESCALEZERO) {
|
||||||
if (const auto PMONITOR = g_pCompositor->getMonitorFromID(PWINDOW->m_iMonitorID); PMONITOR) {
|
if (const auto PMONITOR = g_pCompositor->getMonitorFromID(PWINDOW->m_iMonitorID); PMONITOR) {
|
||||||
const Vector2D DELTA = PWINDOW->m_vRealSize.goalv() - PWINDOW->m_vRealSize.goalv() / PMONITOR->scale;
|
const Vector2D DELTA = PWINDOW->m_vRealSize.goal() - PWINDOW->m_vRealSize.goal() / PMONITOR->scale;
|
||||||
PWINDOW->m_vRealSize.setValueAndWarp(PWINDOW->m_vRealSize.goalv() / PMONITOR->scale);
|
PWINDOW->m_vRealSize.setValueAndWarp(PWINDOW->m_vRealSize.goal() / PMONITOR->scale);
|
||||||
PWINDOW->m_vRealPosition.setValueAndWarp(PWINDOW->m_vRealPosition.goalv() + DELTA / 2.0);
|
PWINDOW->m_vRealPosition.setValueAndWarp(PWINDOW->m_vRealPosition.goal() + DELTA / 2.0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PWINDOW->m_vPosition = PWINDOW->m_vRealPosition.goalv();
|
PWINDOW->m_vPosition = PWINDOW->m_vRealPosition.goal();
|
||||||
PWINDOW->m_vSize = PWINDOW->m_vRealSize.goalv();
|
PWINDOW->m_vSize = PWINDOW->m_vRealSize.goal();
|
||||||
|
|
||||||
PWINDOW->m_iWorkspaceID = g_pCompositor->getMonitorFromVector(PWINDOW->m_vRealPosition.vec() + PWINDOW->m_vRealSize.vec() / 2.f)->activeWorkspace;
|
PWINDOW->m_iWorkspaceID = g_pCompositor->getMonitorFromVector(PWINDOW->m_vRealPosition.value() + PWINDOW->m_vRealSize.value() / 2.f)->activeWorkspace;
|
||||||
|
|
||||||
g_pCompositor->changeWindowZOrder(PWINDOW, true);
|
g_pCompositor->changeWindowZOrder(PWINDOW, true);
|
||||||
PWINDOW->updateWindowDecos();
|
PWINDOW->updateWindowDecos();
|
||||||
g_pHyprRenderer->damageWindow(PWINDOW);
|
g_pHyprRenderer->damageWindow(PWINDOW);
|
||||||
|
|
||||||
PWINDOW->m_vReportedPosition = PWINDOW->m_vRealPosition.goalv();
|
PWINDOW->m_vReportedPosition = PWINDOW->m_vRealPosition.goal();
|
||||||
PWINDOW->m_vPendingReportedSize = PWINDOW->m_vRealSize.goalv();
|
PWINDOW->m_vPendingReportedSize = PWINDOW->m_vRealSize.goal();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,12 +2,11 @@
|
||||||
#include "../managers/AnimationManager.hpp"
|
#include "../managers/AnimationManager.hpp"
|
||||||
#include "../config/ConfigManager.hpp"
|
#include "../config/ConfigManager.hpp"
|
||||||
|
|
||||||
CAnimatedVariable::CAnimatedVariable() {
|
CBaseAnimatedVariable::CBaseAnimatedVariable(ANIMATEDVARTYPE type) : m_Type(type) {
|
||||||
; // dummy var
|
; // dummy var
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAnimatedVariable::create(ANIMATEDVARTYPE type, SAnimationPropertyConfig* pAnimConfig, void* pWindow, AVARDAMAGEPOLICY policy) {
|
void CBaseAnimatedVariable::create(SAnimationPropertyConfig* pAnimConfig, void* pWindow, AVARDAMAGEPOLICY policy) {
|
||||||
m_eVarType = type;
|
|
||||||
m_eDamagePolicy = policy;
|
m_eDamagePolicy = policy;
|
||||||
m_pConfig = pAnimConfig;
|
m_pConfig = pAnimConfig;
|
||||||
m_pWindow = pWindow;
|
m_pWindow = pWindow;
|
||||||
|
@ -15,42 +14,11 @@ void CAnimatedVariable::create(ANIMATEDVARTYPE type, SAnimationPropertyConfig* p
|
||||||
m_bDummy = false;
|
m_bDummy = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAnimatedVariable::create(ANIMATEDVARTYPE type, std::any val, SAnimationPropertyConfig* pAnimConfig, void* pWindow, AVARDAMAGEPOLICY policy) {
|
CBaseAnimatedVariable::~CBaseAnimatedVariable() {
|
||||||
create(type, pAnimConfig, pWindow, policy);
|
|
||||||
|
|
||||||
try {
|
|
||||||
switch (type) {
|
|
||||||
case AVARTYPE_FLOAT: {
|
|
||||||
const auto V = std::any_cast<float>(val);
|
|
||||||
m_fValue = V;
|
|
||||||
m_fGoal = V;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case AVARTYPE_VECTOR: {
|
|
||||||
const auto V = std::any_cast<Vector2D>(val);
|
|
||||||
m_vValue = V;
|
|
||||||
m_vGoal = V;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case AVARTYPE_COLOR: {
|
|
||||||
const auto V = std::any_cast<CColor>(val);
|
|
||||||
m_cValue = V;
|
|
||||||
m_cGoal = V;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default: ASSERT(false); break;
|
|
||||||
}
|
|
||||||
} catch (std::exception& e) {
|
|
||||||
Debug::log(ERR, "CAnimatedVariable create error: {}", e.what());
|
|
||||||
RASSERT(false, "CAnimatedVariable create error: {}", e.what());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
CAnimatedVariable::~CAnimatedVariable() {
|
|
||||||
unregister();
|
unregister();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAnimatedVariable::unregister() {
|
void CBaseAnimatedVariable::unregister() {
|
||||||
if (!g_pAnimationManager)
|
if (!g_pAnimationManager)
|
||||||
return;
|
return;
|
||||||
std::erase_if(g_pAnimationManager->m_vAnimatedVariables, [&](const auto& other) { return other == this; });
|
std::erase_if(g_pAnimationManager->m_vAnimatedVariables, [&](const auto& other) { return other == this; });
|
||||||
|
@ -58,23 +26,23 @@ void CAnimatedVariable::unregister() {
|
||||||
disconnectFromActive();
|
disconnectFromActive();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAnimatedVariable::registerVar() {
|
void CBaseAnimatedVariable::registerVar() {
|
||||||
if (!m_bIsRegistered)
|
if (!m_bIsRegistered)
|
||||||
g_pAnimationManager->m_vAnimatedVariables.push_back(this);
|
g_pAnimationManager->m_vAnimatedVariables.push_back(this);
|
||||||
m_bIsRegistered = true;
|
m_bIsRegistered = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int CAnimatedVariable::getDurationLeftMs() {
|
int CBaseAnimatedVariable::getDurationLeftMs() {
|
||||||
return std::max(
|
return std::max(
|
||||||
(int)(m_pConfig->pValues->internalSpeed * 100) - (int)std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - animationBegin).count(), 0);
|
(int)(m_pConfig->pValues->internalSpeed * 100) - (int)std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - animationBegin).count(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
float CAnimatedVariable::getPercent() {
|
float CBaseAnimatedVariable::getPercent() {
|
||||||
const auto DURATIONPASSED = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - animationBegin).count();
|
const auto DURATIONPASSED = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - animationBegin).count();
|
||||||
return std::clamp((DURATIONPASSED / 100.f) / m_pConfig->pValues->internalSpeed, 0.f, 1.f);
|
return std::clamp((DURATIONPASSED / 100.f) / m_pConfig->pValues->internalSpeed, 0.f, 1.f);
|
||||||
}
|
}
|
||||||
|
|
||||||
float CAnimatedVariable::getCurveValue() {
|
float CBaseAnimatedVariable::getCurveValue() {
|
||||||
if (!m_bIsBeingAnimated)
|
if (!m_bIsBeingAnimated)
|
||||||
return 1.f;
|
return 1.f;
|
||||||
|
|
||||||
|
@ -86,7 +54,7 @@ float CAnimatedVariable::getCurveValue() {
|
||||||
return g_pAnimationManager->getBezier(m_pConfig->pValues->internalBezier)->getYForPoint(SPENT);
|
return g_pAnimationManager->getBezier(m_pConfig->pValues->internalBezier)->getYForPoint(SPENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAnimatedVariable::connectToActive() {
|
void CBaseAnimatedVariable::connectToActive() {
|
||||||
g_pAnimationManager->scheduleTick(); // otherwise the animation manager will never pick this up
|
g_pAnimationManager->scheduleTick(); // otherwise the animation manager will never pick this up
|
||||||
|
|
||||||
if (!m_bIsConnectedToActive)
|
if (!m_bIsConnectedToActive)
|
||||||
|
@ -95,7 +63,7 @@ void CAnimatedVariable::connectToActive() {
|
||||||
m_bIsConnectedToActive = true;
|
m_bIsConnectedToActive = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAnimatedVariable::disconnectFromActive() {
|
void CBaseAnimatedVariable::disconnectFromActive() {
|
||||||
std::erase_if(g_pAnimationManager->m_vActiveAnimatedVariables, [&](const auto& other) { return other == this; });
|
std::erase_if(g_pAnimationManager->m_vActiveAnimatedVariables, [&](const auto& other) { return other == this; });
|
||||||
m_bIsConnectedToActive = false;
|
m_bIsConnectedToActive = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <any>
|
#include <any>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
|
#include <type_traits>
|
||||||
#include "Vector2D.hpp"
|
#include "Vector2D.hpp"
|
||||||
#include "Color.hpp"
|
#include "Color.hpp"
|
||||||
#include "../macros.hpp"
|
#include "../macros.hpp"
|
||||||
|
@ -15,6 +16,30 @@ enum ANIMATEDVARTYPE {
|
||||||
AVARTYPE_COLOR
|
AVARTYPE_COLOR
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Utility to bind a type with its corresponding ANIMATEDVARTYPE
|
||||||
|
template <class T>
|
||||||
|
struct typeToANIMATEDVARTYPE_t {
|
||||||
|
static constexpr ANIMATEDVARTYPE value = AVARTYPE_INVALID;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct typeToANIMATEDVARTYPE_t<float> {
|
||||||
|
static constexpr ANIMATEDVARTYPE value = AVARTYPE_FLOAT;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct typeToANIMATEDVARTYPE_t<Vector2D> {
|
||||||
|
static constexpr ANIMATEDVARTYPE value = AVARTYPE_VECTOR;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct typeToANIMATEDVARTYPE_t<CColor> {
|
||||||
|
static constexpr ANIMATEDVARTYPE value = AVARTYPE_COLOR;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
inline constexpr ANIMATEDVARTYPE typeToANIMATEDVARTYPE = typeToANIMATEDVARTYPE_t<T>::value;
|
||||||
|
|
||||||
enum AVARDAMAGEPOLICY {
|
enum AVARDAMAGEPOLICY {
|
||||||
AVARDAMAGE_NONE = -1,
|
AVARDAMAGE_NONE = -1,
|
||||||
AVARDAMAGE_ENTIRE = 0,
|
AVARDAMAGE_ENTIRE = 0,
|
||||||
|
@ -28,174 +53,34 @@ struct SLayerSurface;
|
||||||
struct SAnimationPropertyConfig;
|
struct SAnimationPropertyConfig;
|
||||||
class CHyprRenderer;
|
class CHyprRenderer;
|
||||||
|
|
||||||
class CAnimatedVariable {
|
// Utility to define a concept as a list of possible type
|
||||||
|
template <class T, class... U>
|
||||||
|
concept OneOf = (... or std::same_as<T, U>);
|
||||||
|
|
||||||
|
// Concept to describe which type can be placed into CAnimatedVariable
|
||||||
|
// This is mainly to get better errors if we put a type that's not supported
|
||||||
|
// Otherwise template errors are ugly
|
||||||
|
template <class T>
|
||||||
|
concept Animable = OneOf<T, Vector2D, float, CColor>;
|
||||||
|
|
||||||
|
class CBaseAnimatedVariable {
|
||||||
public:
|
public:
|
||||||
CAnimatedVariable(); // dummy var
|
CBaseAnimatedVariable(ANIMATEDVARTYPE type);
|
||||||
|
void create(SAnimationPropertyConfig* pAnimConfig, void* pWindow, AVARDAMAGEPOLICY policy);
|
||||||
|
|
||||||
void create(ANIMATEDVARTYPE, SAnimationPropertyConfig*, void* pWindow, AVARDAMAGEPOLICY);
|
CBaseAnimatedVariable(const CBaseAnimatedVariable&) = delete;
|
||||||
void create(ANIMATEDVARTYPE, std::any val, SAnimationPropertyConfig*, void* pWindow, AVARDAMAGEPOLICY);
|
CBaseAnimatedVariable(CBaseAnimatedVariable&&) = delete;
|
||||||
|
CBaseAnimatedVariable& operator=(const CBaseAnimatedVariable&) = delete;
|
||||||
|
CBaseAnimatedVariable& operator=(CBaseAnimatedVariable&&) = delete;
|
||||||
|
|
||||||
CAnimatedVariable(const CAnimatedVariable&) = delete;
|
virtual ~CBaseAnimatedVariable();
|
||||||
CAnimatedVariable(CAnimatedVariable&&) = delete;
|
|
||||||
CAnimatedVariable& operator=(const CAnimatedVariable&) = delete;
|
|
||||||
CAnimatedVariable& operator=(CAnimatedVariable&&) = delete;
|
|
||||||
|
|
||||||
~CAnimatedVariable();
|
void unregister();
|
||||||
|
void registerVar();
|
||||||
|
|
||||||
void unregister();
|
virtual void warp(bool endCallback = true) = 0;
|
||||||
void registerVar();
|
|
||||||
|
|
||||||
// gets the current vector value (real time)
|
|
||||||
const Vector2D& vec() const {
|
|
||||||
return m_vValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// gets the current float value (real time)
|
|
||||||
const float& fl() const {
|
|
||||||
return m_fValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// gets the current color value (real time)
|
|
||||||
const CColor& col() const {
|
|
||||||
return m_cValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// gets the goal vector value
|
|
||||||
const Vector2D& goalv() const {
|
|
||||||
return m_vGoal;
|
|
||||||
}
|
|
||||||
|
|
||||||
// gets the goal float value
|
|
||||||
const float& goalf() const {
|
|
||||||
return m_fGoal;
|
|
||||||
}
|
|
||||||
|
|
||||||
// gets the goal color value
|
|
||||||
const CColor& goalc() const {
|
|
||||||
return m_cGoal;
|
|
||||||
}
|
|
||||||
|
|
||||||
CAnimatedVariable& operator=(const Vector2D& v) {
|
|
||||||
if (v == m_vGoal)
|
|
||||||
return *this;
|
|
||||||
|
|
||||||
m_vGoal = v;
|
|
||||||
animationBegin = std::chrono::system_clock::now();
|
|
||||||
m_vBegun = m_vValue;
|
|
||||||
|
|
||||||
onAnimationBegin();
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
CAnimatedVariable& operator=(const float& v) {
|
|
||||||
if (v == m_fGoal)
|
|
||||||
return *this;
|
|
||||||
|
|
||||||
m_fGoal = v;
|
|
||||||
animationBegin = std::chrono::system_clock::now();
|
|
||||||
m_fBegun = m_fValue;
|
|
||||||
|
|
||||||
onAnimationBegin();
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
CAnimatedVariable& operator=(const CColor& v) {
|
|
||||||
if (v == m_cGoal)
|
|
||||||
return *this;
|
|
||||||
|
|
||||||
m_cGoal = v;
|
|
||||||
animationBegin = std::chrono::system_clock::now();
|
|
||||||
m_cBegun = m_cValue;
|
|
||||||
|
|
||||||
onAnimationBegin();
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sets the actual stored value, without affecting the goal, but resets the timer
|
|
||||||
void setValue(const Vector2D& v) {
|
|
||||||
if (v == m_vValue)
|
|
||||||
return;
|
|
||||||
|
|
||||||
m_vValue = v;
|
|
||||||
animationBegin = std::chrono::system_clock::now();
|
|
||||||
m_vBegun = m_vValue;
|
|
||||||
|
|
||||||
onAnimationBegin();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sets the actual stored value, without affecting the goal, but resets the timer
|
|
||||||
void setValue(const float& v) {
|
|
||||||
if (v == m_fValue)
|
|
||||||
return;
|
|
||||||
|
|
||||||
m_fValue = v;
|
|
||||||
animationBegin = std::chrono::system_clock::now();
|
|
||||||
m_vBegun = m_vValue;
|
|
||||||
|
|
||||||
onAnimationBegin();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sets the actual stored value, without affecting the goal, but resets the timer
|
|
||||||
void setValue(const CColor& v) {
|
|
||||||
if (v == m_cValue)
|
|
||||||
return;
|
|
||||||
|
|
||||||
m_cValue = v;
|
|
||||||
animationBegin = std::chrono::system_clock::now();
|
|
||||||
m_vBegun = m_vValue;
|
|
||||||
|
|
||||||
onAnimationBegin();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sets the actual value and goal
|
|
||||||
void setValueAndWarp(const Vector2D& v) {
|
|
||||||
m_vGoal = v;
|
|
||||||
warp();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sets the actual value and goal
|
|
||||||
void setValueAndWarp(const float& v) {
|
|
||||||
m_fGoal = v;
|
|
||||||
warp();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sets the actual value and goal
|
|
||||||
void setValueAndWarp(const CColor& v) {
|
|
||||||
m_cGoal = v;
|
|
||||||
warp();
|
|
||||||
}
|
|
||||||
|
|
||||||
// checks if an animation is in progress
|
|
||||||
inline bool isBeingAnimated() {
|
|
||||||
return m_bIsBeingAnimated;
|
|
||||||
}
|
|
||||||
|
|
||||||
void warp(bool endCallback = true) {
|
|
||||||
switch (m_eVarType) {
|
|
||||||
case AVARTYPE_FLOAT: {
|
|
||||||
m_fValue = m_fGoal;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case AVARTYPE_VECTOR: {
|
|
||||||
m_vValue = m_vGoal;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case AVARTYPE_COLOR: {
|
|
||||||
m_cValue = m_cGoal;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default: UNREACHABLE();
|
|
||||||
}
|
|
||||||
|
|
||||||
m_bIsBeingAnimated = false;
|
|
||||||
|
|
||||||
if (endCallback)
|
|
||||||
onAnimationEnd();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
//
|
||||||
void setConfig(SAnimationPropertyConfig* pConfig) {
|
void setConfig(SAnimationPropertyConfig* pConfig) {
|
||||||
m_pConfig = pConfig;
|
m_pConfig = pConfig;
|
||||||
}
|
}
|
||||||
|
@ -212,6 +97,11 @@ class CAnimatedVariable {
|
||||||
/* returns the current curve value */
|
/* returns the current curve value */
|
||||||
float getCurveValue();
|
float getCurveValue();
|
||||||
|
|
||||||
|
// checks if an animation is in progress
|
||||||
|
inline bool isBeingAnimated() {
|
||||||
|
return m_bIsBeingAnimated;
|
||||||
|
}
|
||||||
|
|
||||||
/* sets a function to be ran when the animation finishes.
|
/* sets a function to be ran when the animation finishes.
|
||||||
if an animation is not running, runs instantly.
|
if an animation is not running, runs instantly.
|
||||||
if "remove" is set to true, will remove the callback when ran. */
|
if "remove" is set to true, will remove the callback when ran. */
|
||||||
|
@ -245,20 +135,7 @@ class CAnimatedVariable {
|
||||||
m_bRemoveEndAfterRan = false;
|
m_bRemoveEndAfterRan = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
Vector2D m_vValue = Vector2D(0, 0);
|
|
||||||
float m_fValue = 0;
|
|
||||||
CColor m_cValue;
|
|
||||||
|
|
||||||
Vector2D m_vGoal = Vector2D(0, 0);
|
|
||||||
float m_fGoal = 0;
|
|
||||||
CColor m_cGoal;
|
|
||||||
|
|
||||||
Vector2D m_vBegun = Vector2D(0, 0);
|
|
||||||
float m_fBegun = 0;
|
|
||||||
CColor m_cBegun;
|
|
||||||
|
|
||||||
// owners
|
|
||||||
void* m_pWindow = nullptr;
|
void* m_pWindow = nullptr;
|
||||||
void* m_pWorkspace = nullptr;
|
void* m_pWorkspace = nullptr;
|
||||||
void* m_pLayer = nullptr;
|
void* m_pLayer = nullptr;
|
||||||
|
@ -271,8 +148,8 @@ class CAnimatedVariable {
|
||||||
|
|
||||||
std::chrono::system_clock::time_point animationBegin;
|
std::chrono::system_clock::time_point animationBegin;
|
||||||
|
|
||||||
ANIMATEDVARTYPE m_eVarType = AVARTYPE_INVALID;
|
|
||||||
AVARDAMAGEPOLICY m_eDamagePolicy = AVARDAMAGE_NONE;
|
AVARDAMAGEPOLICY m_eDamagePolicy = AVARDAMAGE_NONE;
|
||||||
|
ANIMATEDVARTYPE m_Type;
|
||||||
|
|
||||||
bool m_bRemoveEndAfterRan = true;
|
bool m_bRemoveEndAfterRan = true;
|
||||||
bool m_bRemoveBeginAfterRan = true;
|
bool m_bRemoveBeginAfterRan = true;
|
||||||
|
@ -281,7 +158,9 @@ class CAnimatedVariable {
|
||||||
std::function<void(void* thisptr)> m_fUpdateCallback;
|
std::function<void(void* thisptr)> m_fUpdateCallback;
|
||||||
|
|
||||||
bool m_bIsConnectedToActive = false;
|
bool m_bIsConnectedToActive = false;
|
||||||
|
|
||||||
void connectToActive();
|
void connectToActive();
|
||||||
|
|
||||||
void disconnectFromActive();
|
void disconnectFromActive();
|
||||||
|
|
||||||
// methods
|
// methods
|
||||||
|
@ -314,3 +193,85 @@ class CAnimatedVariable {
|
||||||
friend struct SLayerSurface;
|
friend struct SLayerSurface;
|
||||||
friend class CHyprRenderer;
|
friend class CHyprRenderer;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <Animable VarType>
|
||||||
|
class CAnimatedVariable : public CBaseAnimatedVariable {
|
||||||
|
public:
|
||||||
|
CAnimatedVariable() : CBaseAnimatedVariable(typeToANIMATEDVARTYPE<VarType>) {} // dummy var
|
||||||
|
|
||||||
|
void create(const VarType& value, SAnimationPropertyConfig* pAnimConfig, void* pWindow, AVARDAMAGEPOLICY policy) {
|
||||||
|
create(pAnimConfig, pWindow, policy);
|
||||||
|
m_Value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
using CBaseAnimatedVariable::create;
|
||||||
|
|
||||||
|
CAnimatedVariable(const CAnimatedVariable&) = delete;
|
||||||
|
CAnimatedVariable(CAnimatedVariable&&) = delete;
|
||||||
|
CAnimatedVariable& operator=(const CAnimatedVariable&) = delete;
|
||||||
|
CAnimatedVariable& operator=(CAnimatedVariable&&) = delete;
|
||||||
|
|
||||||
|
~CAnimatedVariable() = default;
|
||||||
|
|
||||||
|
// gets the current vector value (real time)
|
||||||
|
const VarType& value() const {
|
||||||
|
return m_Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// gets the goal vector value
|
||||||
|
const VarType& goal() const {
|
||||||
|
return m_Goal;
|
||||||
|
}
|
||||||
|
|
||||||
|
CAnimatedVariable& operator=(const VarType& v) {
|
||||||
|
if (v == m_Goal)
|
||||||
|
return *this;
|
||||||
|
|
||||||
|
m_Goal = v;
|
||||||
|
animationBegin = std::chrono::system_clock::now();
|
||||||
|
m_Begun = m_Value;
|
||||||
|
|
||||||
|
onAnimationBegin();
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sets the actual stored value, without affecting the goal, but resets the timer
|
||||||
|
void setValue(const VarType& v) {
|
||||||
|
if (v == m_Value)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_Value = v;
|
||||||
|
animationBegin = std::chrono::system_clock::now();
|
||||||
|
m_Begun = m_Value;
|
||||||
|
|
||||||
|
onAnimationBegin();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sets the actual value and goal
|
||||||
|
void setValueAndWarp(const VarType& v) {
|
||||||
|
m_Goal = v;
|
||||||
|
warp();
|
||||||
|
}
|
||||||
|
|
||||||
|
void warp(bool endCallback = true) override {
|
||||||
|
m_Value = m_Goal;
|
||||||
|
|
||||||
|
m_bIsBeingAnimated = false;
|
||||||
|
|
||||||
|
if (endCallback)
|
||||||
|
onAnimationEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
VarType m_Value{};
|
||||||
|
VarType m_Goal{};
|
||||||
|
VarType m_Begun{};
|
||||||
|
|
||||||
|
// owners
|
||||||
|
|
||||||
|
friend class CAnimationManager;
|
||||||
|
friend class CWorkspace;
|
||||||
|
friend struct SLayerSurface;
|
||||||
|
friend class CHyprRenderer;
|
||||||
|
};
|
||||||
|
|
|
@ -661,11 +661,11 @@ void CMonitor::setSpecialWorkspace(CWorkspace* const pWorkspace) {
|
||||||
if (w->m_bIsFloating && !VECINRECT(MIDDLE, vecPosition.x, vecPosition.y, vecPosition.x + vecSize.x, vecPosition.y + vecSize.y) && w->m_iX11Type != 2) {
|
if (w->m_bIsFloating && !VECINRECT(MIDDLE, vecPosition.x, vecPosition.y, vecPosition.x + vecSize.x, vecPosition.y + vecSize.y) && w->m_iX11Type != 2) {
|
||||||
// if it's floating and the middle isnt on the current mon, move it to the center
|
// if it's floating and the middle isnt on the current mon, move it to the center
|
||||||
const auto PMONFROMMIDDLE = g_pCompositor->getMonitorFromVector(MIDDLE);
|
const auto PMONFROMMIDDLE = g_pCompositor->getMonitorFromVector(MIDDLE);
|
||||||
Vector2D pos = w->m_vRealPosition.goalv();
|
Vector2D pos = w->m_vRealPosition.goal();
|
||||||
if (!VECINRECT(MIDDLE, PMONFROMMIDDLE->vecPosition.x, PMONFROMMIDDLE->vecPosition.y, PMONFROMMIDDLE->vecPosition.x + PMONFROMMIDDLE->vecSize.x,
|
if (!VECINRECT(MIDDLE, PMONFROMMIDDLE->vecPosition.x, PMONFROMMIDDLE->vecPosition.y, PMONFROMMIDDLE->vecPosition.x + PMONFROMMIDDLE->vecSize.x,
|
||||||
PMONFROMMIDDLE->vecPosition.y + PMONFROMMIDDLE->vecSize.y)) {
|
PMONFROMMIDDLE->vecPosition.y + PMONFROMMIDDLE->vecSize.y)) {
|
||||||
// not on any monitor, center
|
// not on any monitor, center
|
||||||
pos = middle() / 2.f - w->m_vRealSize.goalv() / 2.f;
|
pos = middle() / 2.f - w->m_vRealSize.goal() / 2.f;
|
||||||
} else
|
} else
|
||||||
pos = pos - PMONFROMMIDDLE->vecPosition + vecPosition;
|
pos = pos - PMONFROMMIDDLE->vecPosition + vecPosition;
|
||||||
|
|
||||||
|
|
|
@ -3,9 +3,9 @@
|
||||||
#include "../Compositor.hpp"
|
#include "../Compositor.hpp"
|
||||||
|
|
||||||
SLayerSurface::SLayerSurface() {
|
SLayerSurface::SLayerSurface() {
|
||||||
alpha.create(AVARTYPE_FLOAT, g_pConfigManager->getAnimationPropertyConfig("fadeLayers"), nullptr, AVARDAMAGE_ENTIRE);
|
alpha.create(g_pConfigManager->getAnimationPropertyConfig("fadeLayers"), nullptr, AVARDAMAGE_ENTIRE);
|
||||||
realPosition.create(AVARTYPE_VECTOR, g_pConfigManager->getAnimationPropertyConfig("layers"), nullptr, AVARDAMAGE_ENTIRE);
|
realPosition.create(g_pConfigManager->getAnimationPropertyConfig("layers"), nullptr, AVARDAMAGE_ENTIRE);
|
||||||
realSize.create(AVARTYPE_VECTOR, g_pConfigManager->getAnimationPropertyConfig("layers"), nullptr, AVARDAMAGE_ENTIRE);
|
realSize.create(g_pConfigManager->getAnimationPropertyConfig("layers"), nullptr, AVARDAMAGE_ENTIRE);
|
||||||
alpha.m_pLayer = this;
|
alpha.m_pLayer = this;
|
||||||
realPosition.m_pLayer = this;
|
realPosition.m_pLayer = this;
|
||||||
realSize.m_pLayer = this;
|
realSize.m_pLayer = this;
|
||||||
|
@ -181,11 +181,11 @@ CRegion SConstraint::getLogicCoordsRegion() {
|
||||||
result.add(&constraint->region); // surface-local coords
|
result.add(&constraint->region); // surface-local coords
|
||||||
|
|
||||||
if (!PWINDOWOWNER->m_bIsX11) {
|
if (!PWINDOWOWNER->m_bIsX11) {
|
||||||
result.translate(PWINDOWOWNER->m_vRealPosition.goalv());
|
result.translate(PWINDOWOWNER->m_vRealPosition.goal());
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto COORDS = PWINDOWOWNER->m_bIsMapped ? PWINDOWOWNER->m_vRealPosition.goalv() :
|
const auto COORDS = PWINDOWOWNER->m_bIsMapped ? PWINDOWOWNER->m_vRealPosition.goal() :
|
||||||
g_pXWaylandManager->xwaylandToWaylandCoords({PWINDOWOWNER->m_uSurface.xwayland->x, PWINDOWOWNER->m_uSurface.xwayland->y});
|
g_pXWaylandManager->xwaylandToWaylandCoords({PWINDOWOWNER->m_uSurface.xwayland->x, PWINDOWOWNER->m_uSurface.xwayland->y});
|
||||||
|
|
||||||
const auto PMONITOR = PWINDOWOWNER->m_bIsMapped ? g_pCompositor->getMonitorFromID(PWINDOWOWNER->m_iMonitorID) : g_pCompositor->getMonitorFromVector(COORDS);
|
const auto PMONITOR = PWINDOWOWNER->m_bIsMapped ? g_pCompositor->getMonitorFromID(PWINDOWOWNER->m_iMonitorID) : g_pCompositor->getMonitorFromVector(COORDS);
|
||||||
|
@ -210,9 +210,9 @@ Vector2D SConstraint::getLogicConstraintPos() {
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
if (!PWINDOWOWNER->m_bIsX11)
|
if (!PWINDOWOWNER->m_bIsX11)
|
||||||
return PWINDOWOWNER->m_vRealPosition.goalv();
|
return PWINDOWOWNER->m_vRealPosition.goal();
|
||||||
|
|
||||||
const auto COORDS = PWINDOWOWNER->m_bIsMapped ? PWINDOWOWNER->m_vRealPosition.goalv() :
|
const auto COORDS = PWINDOWOWNER->m_bIsMapped ? PWINDOWOWNER->m_vRealPosition.goal() :
|
||||||
g_pXWaylandManager->xwaylandToWaylandCoords({PWINDOWOWNER->m_uSurface.xwayland->x, PWINDOWOWNER->m_uSurface.xwayland->y});
|
g_pXWaylandManager->xwaylandToWaylandCoords({PWINDOWOWNER->m_uSurface.xwayland->x, PWINDOWOWNER->m_uSurface.xwayland->y});
|
||||||
|
|
||||||
return COORDS;
|
return COORDS;
|
||||||
|
@ -228,7 +228,7 @@ Vector2D SConstraint::getLogicConstraintSize() {
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
if (!PWINDOWOWNER->m_bIsX11)
|
if (!PWINDOWOWNER->m_bIsX11)
|
||||||
return PWINDOWOWNER->m_vRealSize.goalv();
|
return PWINDOWOWNER->m_vRealSize.goal();
|
||||||
|
|
||||||
const auto PMONITOR = PWINDOWOWNER->m_bIsMapped ?
|
const auto PMONITOR = PWINDOWOWNER->m_bIsMapped ?
|
||||||
g_pCompositor->getMonitorFromID(PWINDOWOWNER->m_iMonitorID) :
|
g_pCompositor->getMonitorFromID(PWINDOWOWNER->m_iMonitorID) :
|
||||||
|
@ -237,8 +237,8 @@ Vector2D SConstraint::getLogicConstraintSize() {
|
||||||
if (!PMONITOR)
|
if (!PMONITOR)
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
const auto SIZE = PWINDOWOWNER->m_bIsMapped ? PWINDOWOWNER->m_vRealSize.goalv() :
|
const auto SIZE = PWINDOWOWNER->m_bIsMapped ? PWINDOWOWNER->m_vRealSize.goal() :
|
||||||
Vector2D{PWINDOWOWNER->m_uSurface.xwayland->width, PWINDOWOWNER->m_uSurface.xwayland->height} * PMONITOR->xwaylandScale;
|
Vector2D{PWINDOWOWNER->m_uSurface.xwayland->width, PWINDOWOWNER->m_uSurface.xwayland->height} * PMONITOR->xwaylandScale;
|
||||||
|
|
||||||
return SIZE;
|
return SIZE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,19 +19,19 @@ struct SLayerSurface {
|
||||||
SLayerSurface();
|
SLayerSurface();
|
||||||
~SLayerSurface();
|
~SLayerSurface();
|
||||||
|
|
||||||
void applyRules();
|
void applyRules();
|
||||||
void startAnimation(bool in, bool instant = false);
|
void startAnimation(bool in, bool instant = false);
|
||||||
bool isFadedOut();
|
bool isFadedOut();
|
||||||
|
|
||||||
CAnimatedVariable realPosition;
|
CAnimatedVariable<Vector2D> realPosition;
|
||||||
CAnimatedVariable realSize;
|
CAnimatedVariable<Vector2D> realSize;
|
||||||
|
|
||||||
wlr_layer_surface_v1* layerSurface;
|
wlr_layer_surface_v1* layerSurface;
|
||||||
wl_list link;
|
wl_list link;
|
||||||
|
|
||||||
bool keyboardExclusive = false;
|
bool keyboardExclusive = false;
|
||||||
|
|
||||||
CWLSurface surface;
|
CWLSurface surface;
|
||||||
|
|
||||||
// desktop components
|
// desktop components
|
||||||
std::unique_ptr<CPopup> popupHead;
|
std::unique_ptr<CPopup> popupHead;
|
||||||
|
@ -51,7 +51,7 @@ struct SLayerSurface {
|
||||||
|
|
||||||
std::string szNamespace = "";
|
std::string szNamespace = "";
|
||||||
|
|
||||||
CAnimatedVariable alpha;
|
CAnimatedVariable<float> alpha;
|
||||||
bool fadingOut = false;
|
bool fadingOut = false;
|
||||||
bool readyToDelete = false;
|
bool readyToDelete = false;
|
||||||
bool noProcess = false;
|
bool noProcess = false;
|
||||||
|
|
|
@ -139,7 +139,7 @@ void CHyprError::draw() {
|
||||||
|
|
||||||
if (m_bQueuedDestroy) {
|
if (m_bQueuedDestroy) {
|
||||||
if (!m_fFadeOpacity.isBeingAnimated()) {
|
if (!m_fFadeOpacity.isBeingAnimated()) {
|
||||||
if (m_fFadeOpacity.fl() == 0.f) {
|
if (m_fFadeOpacity.value() == 0.f) {
|
||||||
m_bQueuedDestroy = false;
|
m_bQueuedDestroy = false;
|
||||||
m_tTexture.destroyTexture();
|
m_tTexture.destroyTexture();
|
||||||
m_bIsCreated = false;
|
m_bIsCreated = false;
|
||||||
|
@ -164,7 +164,7 @@ void CHyprError::draw() {
|
||||||
|
|
||||||
m_bMonitorChanged = false;
|
m_bMonitorChanged = false;
|
||||||
|
|
||||||
g_pHyprOpenGL->renderTexture(m_tTexture, &monbox, m_fFadeOpacity.fl(), 0);
|
g_pHyprOpenGL->renderTexture(m_tTexture, &monbox, m_fFadeOpacity.value(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHyprError::destroy() {
|
void CHyprError::destroy() {
|
||||||
|
|
|
@ -16,16 +16,16 @@ class CHyprError {
|
||||||
void destroy();
|
void destroy();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void createQueued();
|
void createQueued();
|
||||||
std::string m_szQueued = "";
|
std::string m_szQueued = "";
|
||||||
CColor m_cQueued;
|
CColor m_cQueued;
|
||||||
bool m_bQueuedDestroy = false;
|
bool m_bQueuedDestroy = false;
|
||||||
bool m_bIsCreated = false;
|
bool m_bIsCreated = false;
|
||||||
CTexture m_tTexture;
|
CTexture m_tTexture;
|
||||||
CAnimatedVariable m_fFadeOpacity;
|
CAnimatedVariable<float> m_fFadeOpacity;
|
||||||
CBox m_bDamageBox = {0, 0, 0, 0};
|
CBox m_bDamageBox = {0, 0, 0, 0};
|
||||||
|
|
||||||
bool m_bMonitorChanged = false;
|
bool m_bMonitorChanged = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline std::unique_ptr<CHyprError> g_pHyprError; // This is a full-screen error. Treat it with respect, and there can only be one at a time.
|
inline std::unique_ptr<CHyprError> g_pHyprError; // This is a full-screen error. Treat it with respect, and there can only be one at a time.
|
||||||
|
|
|
@ -172,7 +172,7 @@ void CHyprDwindleLayout::applyNodeDataToWindow(SDwindleNodeData* pNode, bool for
|
||||||
PWINDOW->m_vRealPosition = PWINDOW->m_vPosition + RESERVED.topLeft;
|
PWINDOW->m_vRealPosition = PWINDOW->m_vPosition + RESERVED.topLeft;
|
||||||
PWINDOW->m_vRealSize = PWINDOW->m_vSize - (RESERVED.topLeft + RESERVED.bottomRight);
|
PWINDOW->m_vRealSize = PWINDOW->m_vSize - (RESERVED.topLeft + RESERVED.bottomRight);
|
||||||
|
|
||||||
g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.goalv());
|
g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.goal());
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -606,7 +606,7 @@ void CHyprDwindleLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorn
|
||||||
const auto PNODE = getNodeFromWindow(PWINDOW);
|
const auto PNODE = getNodeFromWindow(PWINDOW);
|
||||||
|
|
||||||
if (!PNODE) {
|
if (!PNODE) {
|
||||||
PWINDOW->m_vRealSize = Vector2D(std::max((PWINDOW->m_vRealSize.goalv() + pixResize).x, 20.0), std::max((PWINDOW->m_vRealSize.goalv() + pixResize).y, 20.0));
|
PWINDOW->m_vRealSize = Vector2D(std::max((PWINDOW->m_vRealSize.goal() + pixResize).x, 20.0), std::max((PWINDOW->m_vRealSize.goal() + pixResize).y, 20.0));
|
||||||
PWINDOW->updateWindowDecos();
|
PWINDOW->updateWindowDecos();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -625,7 +625,7 @@ void CHyprDwindleLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorn
|
||||||
if (!m_PseudoDragFlags.started) {
|
if (!m_PseudoDragFlags.started) {
|
||||||
m_PseudoDragFlags.started = true;
|
m_PseudoDragFlags.started = true;
|
||||||
|
|
||||||
const auto pseudoSize = PWINDOW->m_vRealSize.goalv();
|
const auto pseudoSize = PWINDOW->m_vRealSize.goal();
|
||||||
const auto mouseOffset = g_pInputManager->getMouseCoordsInternal() - (PNODE->box.pos() + ((PNODE->box.size() / 2) - (pseudoSize / 2)));
|
const auto mouseOffset = g_pInputManager->getMouseCoordsInternal() - (PNODE->box.pos() + ((PNODE->box.size() / 2) - (pseudoSize / 2)));
|
||||||
|
|
||||||
if (mouseOffset.x > 0 && mouseOffset.x < pseudoSize.x && mouseOffset.y > 0 && mouseOffset.y < pseudoSize.y) {
|
if (mouseOffset.x > 0 && mouseOffset.x < pseudoSize.x && mouseOffset.y > 0 && mouseOffset.y < pseudoSize.y) {
|
||||||
|
@ -805,10 +805,10 @@ void CHyprDwindleLayout::fullscreenRequestForWindow(CWindow* pWindow, eFullscree
|
||||||
|
|
||||||
// save position and size if floating
|
// save position and size if floating
|
||||||
if (pWindow->m_bIsFloating && on) {
|
if (pWindow->m_bIsFloating && on) {
|
||||||
pWindow->m_vLastFloatingSize = pWindow->m_vRealSize.goalv();
|
pWindow->m_vLastFloatingSize = pWindow->m_vRealSize.goal();
|
||||||
pWindow->m_vLastFloatingPosition = pWindow->m_vRealPosition.goalv();
|
pWindow->m_vLastFloatingPosition = pWindow->m_vRealPosition.goal();
|
||||||
pWindow->m_vPosition = pWindow->m_vRealPosition.goalv();
|
pWindow->m_vPosition = pWindow->m_vRealPosition.goal();
|
||||||
pWindow->m_vSize = pWindow->m_vRealSize.goalv();
|
pWindow->m_vSize = pWindow->m_vRealSize.goal();
|
||||||
}
|
}
|
||||||
|
|
||||||
// otherwise, accept it.
|
// otherwise, accept it.
|
||||||
|
@ -860,7 +860,7 @@ void CHyprDwindleLayout::fullscreenRequestForWindow(CWindow* pWindow, eFullscree
|
||||||
|
|
||||||
g_pCompositor->updateWindowAnimatedDecorationValues(pWindow);
|
g_pCompositor->updateWindowAnimatedDecorationValues(pWindow);
|
||||||
|
|
||||||
g_pXWaylandManager->setWindowSize(pWindow, pWindow->m_vRealSize.goalv());
|
g_pXWaylandManager->setWindowSize(pWindow, pWindow->m_vRealSize.goal());
|
||||||
|
|
||||||
g_pCompositor->changeWindowZOrder(pWindow, true);
|
g_pCompositor->changeWindowZOrder(pWindow, true);
|
||||||
|
|
||||||
|
|
|
@ -105,7 +105,7 @@ void IHyprLayout::onWindowCreatedFloating(CWindow* pWindow) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// reject any windows with size <= 5x5
|
// reject any windows with size <= 5x5
|
||||||
if (pWindow->m_vRealSize.goalv().x <= 5 || pWindow->m_vRealSize.goalv().y <= 5)
|
if (pWindow->m_vRealSize.goal().x <= 5 || pWindow->m_vRealSize.goal().y <= 5)
|
||||||
pWindow->m_vRealSize = PMONITOR->vecSize / 2.f;
|
pWindow->m_vRealSize = PMONITOR->vecSize / 2.f;
|
||||||
|
|
||||||
if (pWindow->m_bIsX11 && pWindow->m_uSurface.xwayland->override_redirect) {
|
if (pWindow->m_bIsX11 && pWindow->m_uSurface.xwayland->override_redirect) {
|
||||||
|
@ -113,11 +113,11 @@ void IHyprLayout::onWindowCreatedFloating(CWindow* pWindow) {
|
||||||
if (pWindow->m_uSurface.xwayland->x != 0 && pWindow->m_uSurface.xwayland->y != 0)
|
if (pWindow->m_uSurface.xwayland->x != 0 && pWindow->m_uSurface.xwayland->y != 0)
|
||||||
pWindow->m_vRealPosition = g_pXWaylandManager->xwaylandToWaylandCoords({pWindow->m_uSurface.xwayland->x, pWindow->m_uSurface.xwayland->y});
|
pWindow->m_vRealPosition = g_pXWaylandManager->xwaylandToWaylandCoords({pWindow->m_uSurface.xwayland->x, pWindow->m_uSurface.xwayland->y});
|
||||||
else
|
else
|
||||||
pWindow->m_vRealPosition = Vector2D(PMONITOR->vecPosition.x + (PMONITOR->vecSize.x - pWindow->m_vRealSize.goalv().x) / 2.f,
|
pWindow->m_vRealPosition = Vector2D(PMONITOR->vecPosition.x + (PMONITOR->vecSize.x - pWindow->m_vRealSize.goal().x) / 2.f,
|
||||||
PMONITOR->vecPosition.y + (PMONITOR->vecSize.y - pWindow->m_vRealSize.goalv().y) / 2.f);
|
PMONITOR->vecPosition.y + (PMONITOR->vecSize.y - pWindow->m_vRealSize.goal().y) / 2.f);
|
||||||
} else {
|
} else {
|
||||||
pWindow->m_vRealPosition = Vector2D(PMONITOR->vecPosition.x + (PMONITOR->vecSize.x - pWindow->m_vRealSize.goalv().x) / 2.f,
|
pWindow->m_vRealPosition = Vector2D(PMONITOR->vecPosition.x + (PMONITOR->vecSize.x - pWindow->m_vRealSize.goal().x) / 2.f,
|
||||||
PMONITOR->vecPosition.y + (PMONITOR->vecSize.y - pWindow->m_vRealSize.goalv().y) / 2.f);
|
PMONITOR->vecPosition.y + (PMONITOR->vecSize.y - pWindow->m_vRealSize.goal().y) / 2.f);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// we respect the size.
|
// we respect the size.
|
||||||
|
@ -152,7 +152,7 @@ void IHyprLayout::onWindowCreatedFloating(CWindow* pWindow) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (**PXWLFORCESCALEZERO && pWindow->m_bIsX11)
|
if (**PXWLFORCESCALEZERO && pWindow->m_bIsX11)
|
||||||
pWindow->m_vRealSize = pWindow->m_vRealSize.goalv() / PMONITOR->scale;
|
pWindow->m_vRealSize = pWindow->m_vRealSize.goal() / PMONITOR->scale;
|
||||||
|
|
||||||
if (pWindow->m_bX11DoesntWantBorders || (pWindow->m_bIsX11 && pWindow->m_uSurface.xwayland->override_redirect)) {
|
if (pWindow->m_bX11DoesntWantBorders || (pWindow->m_bIsX11 && pWindow->m_uSurface.xwayland->override_redirect)) {
|
||||||
pWindow->m_vRealPosition.warp();
|
pWindow->m_vRealPosition.warp();
|
||||||
|
@ -160,11 +160,11 @@ void IHyprLayout::onWindowCreatedFloating(CWindow* pWindow) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pWindow->m_iX11Type != 2) {
|
if (pWindow->m_iX11Type != 2) {
|
||||||
g_pXWaylandManager->setWindowSize(pWindow, pWindow->m_vRealSize.goalv());
|
g_pXWaylandManager->setWindowSize(pWindow, pWindow->m_vRealSize.goal());
|
||||||
|
|
||||||
g_pCompositor->changeWindowZOrder(pWindow, true);
|
g_pCompositor->changeWindowZOrder(pWindow, true);
|
||||||
} else {
|
} else {
|
||||||
pWindow->m_vPendingReportedSize = pWindow->m_vRealSize.goalv();
|
pWindow->m_vPendingReportedSize = pWindow->m_vRealSize.goal();
|
||||||
pWindow->m_vReportedSize = pWindow->m_vPendingReportedSize;
|
pWindow->m_vReportedSize = pWindow->m_vPendingReportedSize;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -200,18 +200,18 @@ void IHyprLayout::onBeginDragWindow() {
|
||||||
|
|
||||||
if (!DRAGGINGWINDOW->m_bIsFloating) {
|
if (!DRAGGINGWINDOW->m_bIsFloating) {
|
||||||
if (g_pInputManager->dragMode == MBIND_MOVE) {
|
if (g_pInputManager->dragMode == MBIND_MOVE) {
|
||||||
DRAGGINGWINDOW->m_vLastFloatingSize = (DRAGGINGWINDOW->m_vRealSize.goalv() * 0.8489).clamp(Vector2D{5, 5}, Vector2D{}).floor();
|
DRAGGINGWINDOW->m_vLastFloatingSize = (DRAGGINGWINDOW->m_vRealSize.goal() * 0.8489).clamp(Vector2D{5, 5}, Vector2D{}).floor();
|
||||||
changeWindowFloatingMode(DRAGGINGWINDOW);
|
changeWindowFloatingMode(DRAGGINGWINDOW);
|
||||||
DRAGGINGWINDOW->m_bIsFloating = true;
|
DRAGGINGWINDOW->m_bIsFloating = true;
|
||||||
DRAGGINGWINDOW->m_bDraggingTiled = true;
|
DRAGGINGWINDOW->m_bDraggingTiled = true;
|
||||||
|
|
||||||
DRAGGINGWINDOW->m_vRealPosition = g_pInputManager->getMouseCoordsInternal() - DRAGGINGWINDOW->m_vRealSize.goalv() / 2.f;
|
DRAGGINGWINDOW->m_vRealPosition = g_pInputManager->getMouseCoordsInternal() - DRAGGINGWINDOW->m_vRealSize.goal() / 2.f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_vBeginDragXY = g_pInputManager->getMouseCoordsInternal();
|
m_vBeginDragXY = g_pInputManager->getMouseCoordsInternal();
|
||||||
m_vBeginDragPositionXY = DRAGGINGWINDOW->m_vRealPosition.goalv();
|
m_vBeginDragPositionXY = DRAGGINGWINDOW->m_vRealPosition.goal();
|
||||||
m_vBeginDragSizeXY = DRAGGINGWINDOW->m_vRealSize.goalv();
|
m_vBeginDragSizeXY = DRAGGINGWINDOW->m_vRealSize.goal();
|
||||||
m_vLastDragXY = m_vBeginDragXY;
|
m_vLastDragXY = m_vBeginDragXY;
|
||||||
|
|
||||||
// get the grab corner
|
// get the grab corner
|
||||||
|
@ -325,7 +325,7 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) {
|
||||||
|
|
||||||
if (g_pInputManager->dragMode == MBIND_MOVE) {
|
if (g_pInputManager->dragMode == MBIND_MOVE) {
|
||||||
|
|
||||||
CBox wb = {m_vBeginDragPositionXY + DELTA, DRAGGINGWINDOW->m_vRealSize.goalv()};
|
CBox wb = {m_vBeginDragPositionXY + DELTA, DRAGGINGWINDOW->m_vRealSize.goal()};
|
||||||
wb.round();
|
wb.round();
|
||||||
|
|
||||||
if (**PANIMATEMOUSE)
|
if (**PANIMATEMOUSE)
|
||||||
|
@ -333,7 +333,7 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) {
|
||||||
else
|
else
|
||||||
DRAGGINGWINDOW->m_vRealPosition.setValueAndWarp(wb.pos());
|
DRAGGINGWINDOW->m_vRealPosition.setValueAndWarp(wb.pos());
|
||||||
|
|
||||||
g_pXWaylandManager->setWindowSize(DRAGGINGWINDOW, DRAGGINGWINDOW->m_vRealSize.goalv());
|
g_pXWaylandManager->setWindowSize(DRAGGINGWINDOW, DRAGGINGWINDOW->m_vRealSize.goal());
|
||||||
} else if (g_pInputManager->dragMode == MBIND_RESIZE || g_pInputManager->dragMode == MBIND_RESIZE_FORCE_RATIO || g_pInputManager->dragMode == MBIND_RESIZE_BLOCK_RATIO) {
|
} else if (g_pInputManager->dragMode == MBIND_RESIZE || g_pInputManager->dragMode == MBIND_RESIZE_FORCE_RATIO || g_pInputManager->dragMode == MBIND_RESIZE_BLOCK_RATIO) {
|
||||||
if (DRAGGINGWINDOW->m_bIsFloating) {
|
if (DRAGGINGWINDOW->m_bIsFloating) {
|
||||||
|
|
||||||
|
@ -394,14 +394,14 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) {
|
||||||
DRAGGINGWINDOW->m_vRealPosition.setValueAndWarp(wb.pos());
|
DRAGGINGWINDOW->m_vRealPosition.setValueAndWarp(wb.pos());
|
||||||
}
|
}
|
||||||
|
|
||||||
g_pXWaylandManager->setWindowSize(DRAGGINGWINDOW, DRAGGINGWINDOW->m_vRealSize.goalv());
|
g_pXWaylandManager->setWindowSize(DRAGGINGWINDOW, DRAGGINGWINDOW->m_vRealSize.goal());
|
||||||
} else {
|
} else {
|
||||||
resizeActiveWindow(TICKDELTA, m_eGrabbedCorner, DRAGGINGWINDOW);
|
resizeActiveWindow(TICKDELTA, m_eGrabbedCorner, DRAGGINGWINDOW);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// get middle point
|
// get middle point
|
||||||
Vector2D middle = DRAGGINGWINDOW->m_vRealPosition.vec() + DRAGGINGWINDOW->m_vRealSize.vec() / 2.f;
|
Vector2D middle = DRAGGINGWINDOW->m_vRealPosition.value() + DRAGGINGWINDOW->m_vRealSize.value() / 2.f;
|
||||||
|
|
||||||
// and check its monitor
|
// and check its monitor
|
||||||
const auto PMONITOR = g_pCompositor->getMonitorFromVector(middle);
|
const auto PMONITOR = g_pCompositor->getMonitorFromVector(middle);
|
||||||
|
@ -435,18 +435,18 @@ void IHyprLayout::changeWindowFloatingMode(CWindow* pWindow) {
|
||||||
EMIT_HOOK_EVENT("changeFloatingMode", pWindow);
|
EMIT_HOOK_EVENT("changeFloatingMode", pWindow);
|
||||||
|
|
||||||
if (!TILED) {
|
if (!TILED) {
|
||||||
const auto PNEWMON = g_pCompositor->getMonitorFromVector(pWindow->m_vRealPosition.vec() + pWindow->m_vRealSize.vec() / 2.f);
|
const auto PNEWMON = g_pCompositor->getMonitorFromVector(pWindow->m_vRealPosition.value() + pWindow->m_vRealSize.value() / 2.f);
|
||||||
pWindow->m_iMonitorID = PNEWMON->ID;
|
pWindow->m_iMonitorID = PNEWMON->ID;
|
||||||
pWindow->moveToWorkspace(PNEWMON->specialWorkspaceID != 0 ? PNEWMON->specialWorkspaceID : PNEWMON->activeWorkspace);
|
pWindow->moveToWorkspace(PNEWMON->specialWorkspaceID != 0 ? PNEWMON->specialWorkspaceID : PNEWMON->activeWorkspace);
|
||||||
pWindow->updateGroupOutputs();
|
pWindow->updateGroupOutputs();
|
||||||
|
|
||||||
// save real pos cuz the func applies the default 5,5 mid
|
// save real pos cuz the func applies the default 5,5 mid
|
||||||
const auto PSAVEDPOS = pWindow->m_vRealPosition.goalv();
|
const auto PSAVEDPOS = pWindow->m_vRealPosition.goal();
|
||||||
const auto PSAVEDSIZE = pWindow->m_vRealSize.goalv();
|
const auto PSAVEDSIZE = pWindow->m_vRealSize.goal();
|
||||||
|
|
||||||
// if the window is pseudo, update its size
|
// if the window is pseudo, update its size
|
||||||
if (!pWindow->m_bDraggingTiled)
|
if (!pWindow->m_bDraggingTiled)
|
||||||
pWindow->m_vPseudoSize = pWindow->m_vRealSize.goalv();
|
pWindow->m_vPseudoSize = pWindow->m_vRealSize.goal();
|
||||||
|
|
||||||
pWindow->m_vLastFloatingSize = PSAVEDSIZE;
|
pWindow->m_vLastFloatingSize = PSAVEDSIZE;
|
||||||
|
|
||||||
|
@ -468,10 +468,11 @@ void IHyprLayout::changeWindowFloatingMode(CWindow* pWindow) {
|
||||||
|
|
||||||
g_pCompositor->changeWindowZOrder(pWindow, true);
|
g_pCompositor->changeWindowZOrder(pWindow, true);
|
||||||
|
|
||||||
CBox wb = {pWindow->m_vRealPosition.goalv() + (pWindow->m_vRealSize.goalv() - pWindow->m_vLastFloatingSize) / 2.f, pWindow->m_vLastFloatingSize};
|
CBox wb = {pWindow->m_vRealPosition.goal() + (pWindow->m_vRealSize.goal() - pWindow->m_vLastFloatingSize) / 2.f, pWindow->m_vLastFloatingSize};
|
||||||
wb.round();
|
wb.round();
|
||||||
|
|
||||||
if (DELTALESSTHAN(pWindow->m_vRealSize.vec().x, pWindow->m_vLastFloatingSize.x, 10) && DELTALESSTHAN(pWindow->m_vRealSize.vec().y, pWindow->m_vLastFloatingSize.y, 10)) {
|
if (DELTALESSTHAN(pWindow->m_vRealSize.value().x, pWindow->m_vLastFloatingSize.x, 10) &&
|
||||||
|
DELTALESSTHAN(pWindow->m_vRealSize.value().y, pWindow->m_vLastFloatingSize.y, 10)) {
|
||||||
wb = {wb.pos() + Vector2D{10, 10}, wb.size() - Vector2D{20, 20}};
|
wb = {wb.pos() + Vector2D{10, 10}, wb.size() - Vector2D{20, 20}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -505,7 +506,7 @@ void IHyprLayout::moveActiveWindow(const Vector2D& delta, CWindow* pWindow) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PWINDOW->m_vRealPosition = PWINDOW->m_vRealPosition.goalv() + delta;
|
PWINDOW->m_vRealPosition = PWINDOW->m_vRealPosition.goal() + delta;
|
||||||
|
|
||||||
g_pHyprRenderer->damageWindow(PWINDOW);
|
g_pHyprRenderer->damageWindow(PWINDOW);
|
||||||
}
|
}
|
||||||
|
|
|
@ -668,7 +668,7 @@ void CHyprMasterLayout::applyNodeDataToWindow(SMasterNodeData* pNode) {
|
||||||
PWINDOW->m_vRealPosition = PWINDOW->m_vPosition + RESERVED.topLeft;
|
PWINDOW->m_vRealPosition = PWINDOW->m_vPosition + RESERVED.topLeft;
|
||||||
PWINDOW->m_vRealSize = PWINDOW->m_vSize - (RESERVED.topLeft + RESERVED.bottomRight);
|
PWINDOW->m_vRealSize = PWINDOW->m_vSize - (RESERVED.topLeft + RESERVED.bottomRight);
|
||||||
|
|
||||||
g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.goalv());
|
g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.goal());
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -732,7 +732,7 @@ void CHyprMasterLayout::resizeActiveWindow(const Vector2D& pixResize, eRectCorne
|
||||||
const auto PNODE = getNodeFromWindow(PWINDOW);
|
const auto PNODE = getNodeFromWindow(PWINDOW);
|
||||||
|
|
||||||
if (!PNODE) {
|
if (!PNODE) {
|
||||||
PWINDOW->m_vRealSize = Vector2D(std::max((PWINDOW->m_vRealSize.goalv() + pixResize).x, 20.0), std::max((PWINDOW->m_vRealSize.goalv() + pixResize).y, 20.0));
|
PWINDOW->m_vRealSize = Vector2D(std::max((PWINDOW->m_vRealSize.goal() + pixResize).x, 20.0), std::max((PWINDOW->m_vRealSize.goal() + pixResize).y, 20.0));
|
||||||
PWINDOW->updateWindowDecos();
|
PWINDOW->updateWindowDecos();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -884,10 +884,10 @@ void CHyprMasterLayout::fullscreenRequestForWindow(CWindow* pWindow, eFullscreen
|
||||||
|
|
||||||
// save position and size if floating
|
// save position and size if floating
|
||||||
if (pWindow->m_bIsFloating && on) {
|
if (pWindow->m_bIsFloating && on) {
|
||||||
pWindow->m_vLastFloatingSize = pWindow->m_vRealSize.goalv();
|
pWindow->m_vLastFloatingSize = pWindow->m_vRealSize.goal();
|
||||||
pWindow->m_vLastFloatingPosition = pWindow->m_vRealPosition.goalv();
|
pWindow->m_vLastFloatingPosition = pWindow->m_vRealPosition.goal();
|
||||||
pWindow->m_vPosition = pWindow->m_vRealPosition.goalv();
|
pWindow->m_vPosition = pWindow->m_vRealPosition.goal();
|
||||||
pWindow->m_vSize = pWindow->m_vRealSize.goalv();
|
pWindow->m_vSize = pWindow->m_vRealSize.goal();
|
||||||
}
|
}
|
||||||
|
|
||||||
// otherwise, accept it.
|
// otherwise, accept it.
|
||||||
|
@ -941,7 +941,7 @@ void CHyprMasterLayout::fullscreenRequestForWindow(CWindow* pWindow, eFullscreen
|
||||||
|
|
||||||
g_pCompositor->updateWindowAnimatedDecorationValues(pWindow);
|
g_pCompositor->updateWindowAnimatedDecorationValues(pWindow);
|
||||||
|
|
||||||
g_pXWaylandManager->setWindowSize(pWindow, pWindow->m_vRealSize.goalv());
|
g_pXWaylandManager->setWindowSize(pWindow, pWindow->m_vRealSize.goal());
|
||||||
|
|
||||||
g_pCompositor->changeWindowZOrder(pWindow, true);
|
g_pCompositor->changeWindowZOrder(pWindow, true);
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "AnimationManager.hpp"
|
#include "AnimationManager.hpp"
|
||||||
#include "../Compositor.hpp"
|
#include "../Compositor.hpp"
|
||||||
#include "HookSystemManager.hpp"
|
#include "HookSystemManager.hpp"
|
||||||
|
#include "macros.hpp"
|
||||||
|
|
||||||
int wlTick(void* data) {
|
int wlTick(void* data) {
|
||||||
if (g_pAnimationManager)
|
if (g_pAnimationManager)
|
||||||
|
@ -58,11 +59,11 @@ void CAnimationManager::tick() {
|
||||||
if (!**PANIMENABLED)
|
if (!**PANIMENABLED)
|
||||||
animGlobalDisabled = true;
|
animGlobalDisabled = true;
|
||||||
|
|
||||||
static auto* const PSHADOWSENABLED = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("decoration:drop_shadow");
|
static auto* const PSHADOWSENABLED = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("decoration:drop_shadow");
|
||||||
|
|
||||||
const auto DEFAULTBEZIER = m_mBezierCurves.find("default");
|
const auto DEFAULTBEZIER = m_mBezierCurves.find("default");
|
||||||
|
|
||||||
std::vector<CAnimatedVariable*> animationEndedVars;
|
std::vector<CBaseAnimatedVariable*> animationEndedVars;
|
||||||
|
|
||||||
for (auto& av : m_vActiveAnimatedVariables) {
|
for (auto& av : m_vActiveAnimatedVariables) {
|
||||||
|
|
||||||
|
@ -101,7 +102,7 @@ void CAnimationManager::tick() {
|
||||||
g_pHyprRenderer->damageWindow(w.get());
|
g_pHyprRenderer->damageWindow(w.get());
|
||||||
}
|
}
|
||||||
} else if (PLAYER) {
|
} else if (PLAYER) {
|
||||||
WLRBOXPREV = CBox{PLAYER->realPosition.vec(), PLAYER->realSize.vec()};
|
WLRBOXPREV = CBox{PLAYER->realPosition.value(), PLAYER->realSize.value()};
|
||||||
PMONITOR = g_pCompositor->getMonitorFromVector(Vector2D(PLAYER->geometry.x, PLAYER->geometry.y) + Vector2D(PLAYER->geometry.width, PLAYER->geometry.height) / 2.f);
|
PMONITOR = g_pCompositor->getMonitorFromVector(Vector2D(PLAYER->geometry.x, PLAYER->geometry.y) + Vector2D(PLAYER->geometry.width, PLAYER->geometry.height) / 2.f);
|
||||||
if (!PMONITOR)
|
if (!PMONITOR)
|
||||||
continue;
|
continue;
|
||||||
|
@ -113,78 +114,48 @@ void CAnimationManager::tick() {
|
||||||
// beziers are with a switch unforto
|
// beziers are with a switch unforto
|
||||||
// TODO: maybe do something cleaner
|
// TODO: maybe do something cleaner
|
||||||
|
|
||||||
switch (av->m_eVarType) {
|
auto updateVariable = [&]<Animable T>(CAnimatedVariable<T>& av) {
|
||||||
|
// for disabled anims just warp
|
||||||
|
if (av.m_pConfig->pValues->internalEnabled == 0 || animationsDisabled) {
|
||||||
|
av.warp(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SPENT >= 1.f || av.m_Begun == av.m_Goal) {
|
||||||
|
av.warp(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto DELTA = av.m_Goal - av.m_Begun;
|
||||||
|
const auto BEZIER = m_mBezierCurves.find(av.m_pConfig->pValues->internalBezier);
|
||||||
|
|
||||||
|
if (BEZIER != m_mBezierCurves.end())
|
||||||
|
av.m_Value = av.m_Begun + DELTA * BEZIER->second.getYForPoint(SPENT);
|
||||||
|
else
|
||||||
|
av.m_Value = av.m_Begun + DELTA * DEFAULTBEZIER->second.getYForPoint(SPENT);
|
||||||
|
};
|
||||||
|
|
||||||
|
switch (av->m_Type) {
|
||||||
case AVARTYPE_FLOAT: {
|
case AVARTYPE_FLOAT: {
|
||||||
// for disabled anims just warp
|
auto typedAv = static_cast<CAnimatedVariable<float>*>(av);
|
||||||
if (av->m_pConfig->pValues->internalEnabled == 0 || animationsDisabled) {
|
updateVariable(*typedAv);
|
||||||
av->warp(false);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (SPENT >= 1.f || av->m_fBegun == av->m_fGoal) {
|
|
||||||
av->warp(false);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto DELTA = av->m_fGoal - av->m_fBegun;
|
|
||||||
const auto BEZIER = m_mBezierCurves.find(av->m_pConfig->pValues->internalBezier);
|
|
||||||
|
|
||||||
if (BEZIER != m_mBezierCurves.end())
|
|
||||||
av->m_fValue = av->m_fBegun + BEZIER->second.getYForPoint(SPENT) * DELTA;
|
|
||||||
else
|
|
||||||
av->m_fValue = av->m_fBegun + DEFAULTBEZIER->second.getYForPoint(SPENT) * DELTA;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case AVARTYPE_VECTOR: {
|
case AVARTYPE_VECTOR: {
|
||||||
// for disabled anims just warp
|
auto typedAv = static_cast<CAnimatedVariable<Vector2D>*>(av);
|
||||||
if (av->m_pConfig->pValues->internalEnabled == 0 || animationsDisabled) {
|
updateVariable(*typedAv);
|
||||||
av->warp(false);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (SPENT >= 1.f || av->m_vBegun == av->m_vGoal) {
|
|
||||||
av->warp(false);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto DELTA = av->m_vGoal - av->m_vBegun;
|
|
||||||
const auto BEZIER = m_mBezierCurves.find(av->m_pConfig->pValues->internalBezier);
|
|
||||||
|
|
||||||
if (BEZIER != m_mBezierCurves.end())
|
|
||||||
av->m_vValue = av->m_vBegun + DELTA * BEZIER->second.getYForPoint(SPENT);
|
|
||||||
else
|
|
||||||
av->m_vValue = av->m_vBegun + DELTA * DEFAULTBEZIER->second.getYForPoint(SPENT);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case AVARTYPE_COLOR: {
|
case AVARTYPE_COLOR: {
|
||||||
// for disabled anims just warp
|
auto typedAv = static_cast<CAnimatedVariable<CColor>*>(av);
|
||||||
if (av->m_pConfig->pValues->internalEnabled == 0 || animationsDisabled) {
|
updateVariable(*typedAv);
|
||||||
av->warp(false);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (SPENT >= 1.f || av->m_cBegun == av->m_cGoal) {
|
|
||||||
av->warp(false);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto DELTA = av->m_cGoal - av->m_cBegun;
|
|
||||||
const auto BEZIER = m_mBezierCurves.find(av->m_pConfig->pValues->internalBezier);
|
|
||||||
|
|
||||||
if (BEZIER != m_mBezierCurves.end())
|
|
||||||
av->m_cValue = av->m_cBegun + DELTA * BEZIER->second.getYForPoint(SPENT);
|
|
||||||
else
|
|
||||||
av->m_cValue = av->m_cBegun + DELTA * DEFAULTBEZIER->second.getYForPoint(SPENT);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default: {
|
default: UNREACHABLE();
|
||||||
;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// set size and pos if valid, but only if damage policy entire (dont if border for example)
|
// set size and pos if valid, but only if damage policy entire (dont if border for example)
|
||||||
if (g_pCompositor->windowValidMapped(PWINDOW) && av->m_eDamagePolicy == AVARDAMAGE_ENTIRE && PWINDOW->m_iX11Type != 2)
|
if (g_pCompositor->windowValidMapped(PWINDOW) && av->m_eDamagePolicy == AVARDAMAGE_ENTIRE && PWINDOW->m_iX11Type != 2)
|
||||||
g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.goalv());
|
g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.goal());
|
||||||
|
|
||||||
// check if we did not finish animating. If so, trigger onAnimationEnd.
|
// check if we did not finish animating. If so, trigger onAnimationEnd.
|
||||||
if (!av->isBeingAnimated())
|
if (!av->isBeingAnimated())
|
||||||
|
@ -216,7 +187,7 @@ void CAnimationManager::tick() {
|
||||||
|
|
||||||
if (w->m_bIsFloating) {
|
if (w->m_bIsFloating) {
|
||||||
auto bb = w->getFullWindowBoundingBox();
|
auto bb = w->getFullWindowBoundingBox();
|
||||||
bb.translate(PWORKSPACE->m_vRenderOffset.vec());
|
bb.translate(PWORKSPACE->m_vRenderOffset.value());
|
||||||
g_pHyprRenderer->damageBox(&bb);
|
g_pHyprRenderer->damageBox(&bb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -250,7 +221,7 @@ void CAnimationManager::tick() {
|
||||||
BORDERSIZE + ROUNDINGSIZE); // bottom
|
BORDERSIZE + ROUNDINGSIZE); // bottom
|
||||||
|
|
||||||
// damage for new box
|
// damage for new box
|
||||||
const CBox WLRBOXNEW = {PWINDOW->m_vRealPosition.vec().x, PWINDOW->m_vRealPosition.vec().y, PWINDOW->m_vRealSize.vec().x, PWINDOW->m_vRealSize.vec().y};
|
const CBox WLRBOXNEW = {PWINDOW->m_vRealPosition.value().x, PWINDOW->m_vRealPosition.value().y, PWINDOW->m_vRealSize.value().x, PWINDOW->m_vRealSize.value().y};
|
||||||
g_pHyprRenderer->damageBox(WLRBOXNEW.x - BORDERSIZE, WLRBOXNEW.y - BORDERSIZE, WLRBOXNEW.width + 2 * BORDERSIZE, BORDERSIZE + ROUNDINGSIZE); // top
|
g_pHyprRenderer->damageBox(WLRBOXNEW.x - BORDERSIZE, WLRBOXNEW.y - BORDERSIZE, WLRBOXNEW.width + 2 * BORDERSIZE, BORDERSIZE + ROUNDINGSIZE); // top
|
||||||
g_pHyprRenderer->damageBox(WLRBOXNEW.x - BORDERSIZE, WLRBOXNEW.y - BORDERSIZE, BORDERSIZE + ROUNDINGSIZE, WLRBOXNEW.height + 2 * BORDERSIZE); // left
|
g_pHyprRenderer->damageBox(WLRBOXNEW.x - BORDERSIZE, WLRBOXNEW.y - BORDERSIZE, BORDERSIZE + ROUNDINGSIZE, WLRBOXNEW.height + 2 * BORDERSIZE); // left
|
||||||
g_pHyprRenderer->damageBox(WLRBOXNEW.x + WLRBOXNEW.width - ROUNDINGSIZE, WLRBOXNEW.y - BORDERSIZE, BORDERSIZE + ROUNDINGSIZE,
|
g_pHyprRenderer->damageBox(WLRBOXNEW.x + WLRBOXNEW.width - ROUNDINGSIZE, WLRBOXNEW.y - BORDERSIZE, BORDERSIZE + ROUNDINGSIZE,
|
||||||
|
@ -323,23 +294,23 @@ bool CAnimationManager::bezierExists(const std::string& bezier) {
|
||||||
//
|
//
|
||||||
|
|
||||||
void CAnimationManager::animationPopin(CWindow* pWindow, bool close, float minPerc) {
|
void CAnimationManager::animationPopin(CWindow* pWindow, bool close, float minPerc) {
|
||||||
const auto GOALPOS = pWindow->m_vRealPosition.goalv();
|
const auto GOALPOS = pWindow->m_vRealPosition.goal();
|
||||||
const auto GOALSIZE = pWindow->m_vRealSize.goalv();
|
const auto GOALSIZE = pWindow->m_vRealSize.goal();
|
||||||
|
|
||||||
if (!close) {
|
if (!close) {
|
||||||
pWindow->m_vRealSize.setValue((GOALSIZE * minPerc).clamp({5, 5}, {GOALSIZE.x, GOALSIZE.y}));
|
pWindow->m_vRealSize.setValue((GOALSIZE * minPerc).clamp({5, 5}, {GOALSIZE.x, GOALSIZE.y}));
|
||||||
pWindow->m_vRealPosition.setValue(GOALPOS + GOALSIZE / 2.f - pWindow->m_vRealSize.m_vValue / 2.f);
|
pWindow->m_vRealPosition.setValue(GOALPOS + GOALSIZE / 2.f - pWindow->m_vRealSize.m_Value / 2.f);
|
||||||
} else {
|
} else {
|
||||||
pWindow->m_vRealSize = (GOALSIZE * minPerc).clamp({5, 5}, {GOALSIZE.x, GOALSIZE.y});
|
pWindow->m_vRealSize = (GOALSIZE * minPerc).clamp({5, 5}, {GOALSIZE.x, GOALSIZE.y});
|
||||||
pWindow->m_vRealPosition = GOALPOS + GOALSIZE / 2.f - pWindow->m_vRealSize.m_vGoal / 2.f;
|
pWindow->m_vRealPosition = GOALPOS + GOALSIZE / 2.f - pWindow->m_vRealSize.m_Goal / 2.f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAnimationManager::animationSlide(CWindow* pWindow, std::string force, bool close) {
|
void CAnimationManager::animationSlide(CWindow* pWindow, std::string force, bool close) {
|
||||||
pWindow->m_vRealSize.warp(false); // size we preserve in slide
|
pWindow->m_vRealSize.warp(false); // size we preserve in slide
|
||||||
|
|
||||||
const auto GOALPOS = pWindow->m_vRealPosition.goalv();
|
const auto GOALPOS = pWindow->m_vRealPosition.goal();
|
||||||
const auto GOALSIZE = pWindow->m_vRealSize.goalv();
|
const auto GOALSIZE = pWindow->m_vRealSize.goal();
|
||||||
|
|
||||||
const auto PMONITOR = g_pCompositor->getMonitorFromID(pWindow->m_iMonitorID);
|
const auto PMONITOR = g_pCompositor->getMonitorFromID(pWindow->m_iMonitorID);
|
||||||
|
|
||||||
|
|
|
@ -28,8 +28,8 @@ class CAnimationManager {
|
||||||
|
|
||||||
std::unordered_map<std::string, CBezierCurve> getAllBeziers();
|
std::unordered_map<std::string, CBezierCurve> getAllBeziers();
|
||||||
|
|
||||||
std::vector<CAnimatedVariable*> m_vAnimatedVariables;
|
std::vector<CBaseAnimatedVariable*> m_vAnimatedVariables;
|
||||||
std::vector<CAnimatedVariable*> m_vActiveAnimatedVariables;
|
std::vector<CBaseAnimatedVariable*> m_vActiveAnimatedVariables;
|
||||||
|
|
||||||
wl_event_source* m_pAnimationTick;
|
wl_event_source* m_pAnimationTick;
|
||||||
|
|
||||||
|
@ -52,4 +52,4 @@ class CAnimationManager {
|
||||||
void animationSlide(CWindow*, std::string force = "", bool close = false);
|
void animationSlide(CWindow*, std::string force = "", bool close = false);
|
||||||
};
|
};
|
||||||
|
|
||||||
inline std::unique_ptr<CAnimationManager> g_pAnimationManager;
|
inline std::unique_ptr<CAnimationManager> g_pAnimationManager;
|
||||||
|
|
|
@ -874,8 +874,8 @@ void CKeybindManager::centerWindow(std::string args) {
|
||||||
if (args == "1")
|
if (args == "1")
|
||||||
RESERVEDOFFSET = (PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight) / 2.f;
|
RESERVEDOFFSET = (PMONITOR->vecReservedTopLeft - PMONITOR->vecReservedBottomRight) / 2.f;
|
||||||
|
|
||||||
PWINDOW->m_vRealPosition = PMONITOR->middle() - PWINDOW->m_vRealSize.goalv() / 2.f + RESERVEDOFFSET;
|
PWINDOW->m_vRealPosition = PMONITOR->middle() - PWINDOW->m_vRealSize.goal() / 2.f + RESERVEDOFFSET;
|
||||||
PWINDOW->m_vPosition = PWINDOW->m_vRealPosition.goalv();
|
PWINDOW->m_vPosition = PWINDOW->m_vRealPosition.goal();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CKeybindManager::toggleActivePseudo(std::string args) {
|
void CKeybindManager::toggleActivePseudo(std::string args) {
|
||||||
|
@ -1222,14 +1222,14 @@ void CKeybindManager::moveActiveTo(std::string args) {
|
||||||
|
|
||||||
switch (arg) {
|
switch (arg) {
|
||||||
case 'l': vPos.x = PMONITOR->vecReservedTopLeft.x + BORDERSIZE + PMONITOR->vecPosition.x; break;
|
case 'l': vPos.x = PMONITOR->vecReservedTopLeft.x + BORDERSIZE + PMONITOR->vecPosition.x; break;
|
||||||
case 'r': vPos.x = PMONITOR->vecSize.x - PMONITOR->vecReservedBottomRight.x - PLASTWINDOW->m_vRealSize.goalv().x - BORDERSIZE + PMONITOR->vecPosition.x; break;
|
case 'r': vPos.x = PMONITOR->vecSize.x - PMONITOR->vecReservedBottomRight.x - PLASTWINDOW->m_vRealSize.goal().x - BORDERSIZE + PMONITOR->vecPosition.x; break;
|
||||||
case 't':
|
case 't':
|
||||||
case 'u': vPos.y = PMONITOR->vecReservedTopLeft.y + BORDERSIZE + PMONITOR->vecPosition.y; break;
|
case 'u': vPos.y = PMONITOR->vecReservedTopLeft.y + BORDERSIZE + PMONITOR->vecPosition.y; break;
|
||||||
case 'b':
|
case 'b':
|
||||||
case 'd': vPos.y = PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y - PLASTWINDOW->m_vRealSize.goalv().y - BORDERSIZE + PMONITOR->vecPosition.y; break;
|
case 'd': vPos.y = PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y - PLASTWINDOW->m_vRealSize.goal().y - BORDERSIZE + PMONITOR->vecPosition.y; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
PLASTWINDOW->m_vRealPosition = Vector2D(vPos.x != 0 ? vPos.x : PLASTWINDOW->m_vRealPosition.goalv().x, vPos.y != 0 ? vPos.y : PLASTWINDOW->m_vRealPosition.goalv().y);
|
PLASTWINDOW->m_vRealPosition = Vector2D(vPos.x != 0 ? vPos.x : PLASTWINDOW->m_vRealPosition.goal().x, vPos.y != 0 ? vPos.y : PLASTWINDOW->m_vRealPosition.goal().y);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1377,22 +1377,22 @@ void CKeybindManager::moveCursorToCorner(std::string arg) {
|
||||||
switch (CORNER) {
|
switch (CORNER) {
|
||||||
case 0:
|
case 0:
|
||||||
// bottom left
|
// bottom left
|
||||||
wlr_cursor_warp(g_pCompositor->m_sWLRCursor, g_pCompositor->m_sSeat.mouse->mouse, PWINDOW->m_vRealPosition.vec().x,
|
wlr_cursor_warp(g_pCompositor->m_sWLRCursor, g_pCompositor->m_sSeat.mouse->mouse, PWINDOW->m_vRealPosition.value().x,
|
||||||
PWINDOW->m_vRealPosition.vec().y + PWINDOW->m_vRealSize.vec().y);
|
PWINDOW->m_vRealPosition.value().y + PWINDOW->m_vRealSize.value().y);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
// bottom right
|
// bottom right
|
||||||
wlr_cursor_warp(g_pCompositor->m_sWLRCursor, g_pCompositor->m_sSeat.mouse->mouse, PWINDOW->m_vRealPosition.vec().x + PWINDOW->m_vRealSize.vec().x,
|
wlr_cursor_warp(g_pCompositor->m_sWLRCursor, g_pCompositor->m_sSeat.mouse->mouse, PWINDOW->m_vRealPosition.value().x + PWINDOW->m_vRealSize.value().x,
|
||||||
PWINDOW->m_vRealPosition.vec().y + PWINDOW->m_vRealSize.vec().y);
|
PWINDOW->m_vRealPosition.value().y + PWINDOW->m_vRealSize.value().y);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
// top right
|
// top right
|
||||||
wlr_cursor_warp(g_pCompositor->m_sWLRCursor, g_pCompositor->m_sSeat.mouse->mouse, PWINDOW->m_vRealPosition.vec().x + PWINDOW->m_vRealSize.vec().x,
|
wlr_cursor_warp(g_pCompositor->m_sWLRCursor, g_pCompositor->m_sSeat.mouse->mouse, PWINDOW->m_vRealPosition.value().x + PWINDOW->m_vRealSize.value().x,
|
||||||
PWINDOW->m_vRealPosition.vec().y);
|
PWINDOW->m_vRealPosition.value().y);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
// top left
|
// top left
|
||||||
wlr_cursor_warp(g_pCompositor->m_sWLRCursor, g_pCompositor->m_sSeat.mouse->mouse, PWINDOW->m_vRealPosition.vec().x, PWINDOW->m_vRealPosition.vec().y);
|
wlr_cursor_warp(g_pCompositor->m_sWLRCursor, g_pCompositor->m_sSeat.mouse->mouse, PWINDOW->m_vRealPosition.value().x, PWINDOW->m_vRealPosition.value().y);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1457,8 +1457,8 @@ void CKeybindManager::workspaceOpt(std::string args) {
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!w->m_bRequestsFloat && w->m_bIsFloating != PWORKSPACE->m_bDefaultFloating) {
|
if (!w->m_bRequestsFloat && w->m_bIsFloating != PWORKSPACE->m_bDefaultFloating) {
|
||||||
const auto SAVEDPOS = w->m_vRealPosition.vec();
|
const auto SAVEDPOS = w->m_vRealPosition.value();
|
||||||
const auto SAVEDSIZE = w->m_vRealSize.vec();
|
const auto SAVEDSIZE = w->m_vRealSize.value();
|
||||||
|
|
||||||
w->m_bIsFloating = PWORKSPACE->m_bDefaultFloating;
|
w->m_bIsFloating = PWORKSPACE->m_bDefaultFloating;
|
||||||
g_pLayoutManager->getCurrentLayout()->changeWindowFloatingMode(w);
|
g_pLayoutManager->getCurrentLayout()->changeWindowFloatingMode(w);
|
||||||
|
@ -1467,8 +1467,8 @@ void CKeybindManager::workspaceOpt(std::string args) {
|
||||||
w->m_vRealPosition.setValueAndWarp(SAVEDPOS);
|
w->m_vRealPosition.setValueAndWarp(SAVEDPOS);
|
||||||
w->m_vRealSize.setValueAndWarp(SAVEDSIZE);
|
w->m_vRealSize.setValueAndWarp(SAVEDSIZE);
|
||||||
g_pXWaylandManager->setWindowSize(w, SAVEDSIZE);
|
g_pXWaylandManager->setWindowSize(w, SAVEDSIZE);
|
||||||
w->m_vRealSize = w->m_vRealSize.vec() + Vector2D(4, 4);
|
w->m_vRealSize = w->m_vRealSize.value() + Vector2D(4, 4);
|
||||||
w->m_vRealPosition = w->m_vRealPosition.vec() - Vector2D(2, 2);
|
w->m_vRealPosition = w->m_vRealPosition.value() - Vector2D(2, 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1651,14 +1651,14 @@ void CKeybindManager::resizeActive(std::string args) {
|
||||||
if (!g_pCompositor->m_pLastWindow || g_pCompositor->m_pLastWindow->m_bIsFullscreen)
|
if (!g_pCompositor->m_pLastWindow || g_pCompositor->m_pLastWindow->m_bIsFullscreen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const auto SIZ = g_pCompositor->parseWindowVectorArgsRelative(args, g_pCompositor->m_pLastWindow->m_vRealSize.goalv());
|
const auto SIZ = g_pCompositor->parseWindowVectorArgsRelative(args, g_pCompositor->m_pLastWindow->m_vRealSize.goal());
|
||||||
|
|
||||||
if (SIZ.x < 1 || SIZ.y < 1)
|
if (SIZ.x < 1 || SIZ.y < 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
g_pLayoutManager->getCurrentLayout()->resizeActiveWindow(SIZ - g_pCompositor->m_pLastWindow->m_vRealSize.goalv());
|
g_pLayoutManager->getCurrentLayout()->resizeActiveWindow(SIZ - g_pCompositor->m_pLastWindow->m_vRealSize.goal());
|
||||||
|
|
||||||
if (g_pCompositor->m_pLastWindow->m_vRealSize.goalv().x > 1 && g_pCompositor->m_pLastWindow->m_vRealSize.goalv().y > 1)
|
if (g_pCompositor->m_pLastWindow->m_vRealSize.goal().x > 1 && g_pCompositor->m_pLastWindow->m_vRealSize.goal().y > 1)
|
||||||
g_pCompositor->m_pLastWindow->setHidden(false);
|
g_pCompositor->m_pLastWindow->setHidden(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1666,9 +1666,9 @@ void CKeybindManager::moveActive(std::string args) {
|
||||||
if (!g_pCompositor->m_pLastWindow || g_pCompositor->m_pLastWindow->m_bIsFullscreen)
|
if (!g_pCompositor->m_pLastWindow || g_pCompositor->m_pLastWindow->m_bIsFullscreen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const auto POS = g_pCompositor->parseWindowVectorArgsRelative(args, g_pCompositor->m_pLastWindow->m_vRealPosition.goalv());
|
const auto POS = g_pCompositor->parseWindowVectorArgsRelative(args, g_pCompositor->m_pLastWindow->m_vRealPosition.goal());
|
||||||
|
|
||||||
g_pLayoutManager->getCurrentLayout()->moveActiveWindow(POS - g_pCompositor->m_pLastWindow->m_vRealPosition.goalv());
|
g_pLayoutManager->getCurrentLayout()->moveActiveWindow(POS - g_pCompositor->m_pLastWindow->m_vRealPosition.goal());
|
||||||
}
|
}
|
||||||
|
|
||||||
void CKeybindManager::moveWindow(std::string args) {
|
void CKeybindManager::moveWindow(std::string args) {
|
||||||
|
@ -1686,9 +1686,9 @@ void CKeybindManager::moveWindow(std::string args) {
|
||||||
if (PWINDOW->m_bIsFullscreen)
|
if (PWINDOW->m_bIsFullscreen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const auto POS = g_pCompositor->parseWindowVectorArgsRelative(MOVECMD, PWINDOW->m_vRealPosition.goalv());
|
const auto POS = g_pCompositor->parseWindowVectorArgsRelative(MOVECMD, PWINDOW->m_vRealPosition.goal());
|
||||||
|
|
||||||
g_pLayoutManager->getCurrentLayout()->moveActiveWindow(POS - PWINDOW->m_vRealPosition.goalv(), PWINDOW);
|
g_pLayoutManager->getCurrentLayout()->moveActiveWindow(POS - PWINDOW->m_vRealPosition.goal(), PWINDOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CKeybindManager::resizeWindow(std::string args) {
|
void CKeybindManager::resizeWindow(std::string args) {
|
||||||
|
@ -1706,14 +1706,14 @@ void CKeybindManager::resizeWindow(std::string args) {
|
||||||
if (PWINDOW->m_bIsFullscreen)
|
if (PWINDOW->m_bIsFullscreen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const auto SIZ = g_pCompositor->parseWindowVectorArgsRelative(MOVECMD, PWINDOW->m_vRealSize.goalv());
|
const auto SIZ = g_pCompositor->parseWindowVectorArgsRelative(MOVECMD, PWINDOW->m_vRealSize.goal());
|
||||||
|
|
||||||
if (SIZ.x < 1 || SIZ.y < 1)
|
if (SIZ.x < 1 || SIZ.y < 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
g_pLayoutManager->getCurrentLayout()->resizeActiveWindow(SIZ - PWINDOW->m_vRealSize.goalv(), CORNER_NONE, PWINDOW);
|
g_pLayoutManager->getCurrentLayout()->resizeActiveWindow(SIZ - PWINDOW->m_vRealSize.goal(), CORNER_NONE, PWINDOW);
|
||||||
|
|
||||||
if (PWINDOW->m_vRealSize.goalv().x > 1 && PWINDOW->m_vRealSize.goalv().y > 1)
|
if (PWINDOW->m_vRealSize.goal().x > 1 && PWINDOW->m_vRealSize.goal().y > 1)
|
||||||
PWINDOW->setHidden(false);
|
PWINDOW->setHidden(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ void CHyprXWaylandManager::activateSurface(wlr_surface* pSurface, bool activate)
|
||||||
|
|
||||||
void CHyprXWaylandManager::activateWindow(CWindow* pWindow, bool activate) {
|
void CHyprXWaylandManager::activateWindow(CWindow* pWindow, bool activate) {
|
||||||
if (pWindow->m_bIsX11) {
|
if (pWindow->m_bIsX11) {
|
||||||
setWindowSize(pWindow, pWindow->m_vRealSize.vec()); // update xwayland output pos
|
setWindowSize(pWindow, pWindow->m_vRealSize.value()); // update xwayland output pos
|
||||||
|
|
||||||
if (activate) {
|
if (activate) {
|
||||||
wlr_xwayland_surface_set_minimized(pWindow->m_uSurface.xwayland, false);
|
wlr_xwayland_surface_set_minimized(pWindow->m_uSurface.xwayland, false);
|
||||||
|
@ -161,7 +161,7 @@ void CHyprXWaylandManager::setWindowSize(CWindow* pWindow, Vector2D size, bool f
|
||||||
|
|
||||||
// calculate pos
|
// calculate pos
|
||||||
// TODO: this should be decoupled from setWindowSize IMO
|
// TODO: this should be decoupled from setWindowSize IMO
|
||||||
Vector2D windowPos = pWindow->m_vRealPosition.vec();
|
Vector2D windowPos = pWindow->m_vRealPosition.value();
|
||||||
|
|
||||||
if (pWindow->m_bIsX11 && PMONITOR) {
|
if (pWindow->m_bIsX11 && PMONITOR) {
|
||||||
windowPos = windowPos - PMONITOR->vecPosition; // normalize to monitor
|
windowPos = windowPos - PMONITOR->vecPosition; // normalize to monitor
|
||||||
|
@ -266,7 +266,7 @@ void CHyprXWaylandManager::moveXWaylandWindow(CWindow* pWindow, const Vector2D&
|
||||||
if (!pWindow->m_bIsX11)
|
if (!pWindow->m_bIsX11)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
wlr_xwayland_surface_configure(pWindow->m_uSurface.xwayland, pos.x, pos.y, pWindow->m_vRealSize.vec().x, pWindow->m_vRealSize.vec().y);
|
wlr_xwayland_surface_configure(pWindow->m_uSurface.xwayland, pos.x, pos.y, pWindow->m_vRealSize.value().x, pWindow->m_vRealSize.value().y);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHyprXWaylandManager::checkBorders(CWindow* pWindow) {
|
void CHyprXWaylandManager::checkBorders(CWindow* pWindow) {
|
||||||
|
|
|
@ -66,7 +66,7 @@ void CInputManager::sendMotionEventsToFocused() {
|
||||||
timespec now;
|
timespec now;
|
||||||
clock_gettime(CLOCK_MONOTONIC, &now);
|
clock_gettime(CLOCK_MONOTONIC, &now);
|
||||||
|
|
||||||
const auto LOCAL = getMouseCoordsInternal() - (PWINDOW ? PWINDOW->m_vRealPosition.goalv() : (PLS ? Vector2D{PLS->geometry.x, PLS->geometry.y} : Vector2D{}));
|
const auto LOCAL = getMouseCoordsInternal() - (PWINDOW ? PWINDOW->m_vRealPosition.goal() : (PLS ? Vector2D{PLS->geometry.x, PLS->geometry.y} : Vector2D{}));
|
||||||
|
|
||||||
wlr_seat_pointer_notify_enter(g_pCompositor->m_sSeat.seat, g_pCompositor->m_pLastFocus, LOCAL.x, LOCAL.y);
|
wlr_seat_pointer_notify_enter(g_pCompositor->m_sSeat.seat, g_pCompositor->m_pLastFocus, LOCAL.x, LOCAL.y);
|
||||||
wlr_seat_pointer_notify_motion(g_pCompositor->m_sSeat.seat, now.tv_sec * 1000 + now.tv_nsec / 10000000, LOCAL.x, LOCAL.y);
|
wlr_seat_pointer_notify_motion(g_pCompositor->m_sSeat.seat, now.tv_sec * 1000 + now.tv_nsec / 10000000, LOCAL.x, LOCAL.y);
|
||||||
|
@ -134,7 +134,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus) {
|
||||||
|
|
||||||
if (forcedFocus) {
|
if (forcedFocus) {
|
||||||
pFoundWindow = forcedFocus;
|
pFoundWindow = forcedFocus;
|
||||||
surfacePos = pFoundWindow->m_vRealPosition.vec();
|
surfacePos = pFoundWindow->m_vRealPosition.value();
|
||||||
foundSurface = pFoundWindow->m_pWLSurface.wlr();
|
foundSurface = pFoundWindow->m_pWLSurface.wlr();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,7 +182,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus) {
|
||||||
|
|
||||||
if (CONSTRAINTWINDOW->m_bIsX11) {
|
if (CONSTRAINTWINDOW->m_bIsX11) {
|
||||||
foundSurface = CONSTRAINTWINDOW->m_pWLSurface.wlr();
|
foundSurface = CONSTRAINTWINDOW->m_pWLSurface.wlr();
|
||||||
surfacePos = CONSTRAINTWINDOW->m_vRealPosition.vec();
|
surfacePos = CONSTRAINTWINDOW->m_vRealPosition.value();
|
||||||
} else {
|
} else {
|
||||||
g_pCompositor->vectorWindowToSurface(mouseCoords, CONSTRAINTWINDOW, surfaceCoords);
|
g_pCompositor->vectorWindowToSurface(mouseCoords, CONSTRAINTWINDOW, surfaceCoords);
|
||||||
}
|
}
|
||||||
|
@ -273,7 +273,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus) {
|
||||||
surfacePos = Vector2D(-1337, -1337);
|
surfacePos = Vector2D(-1337, -1337);
|
||||||
} else {
|
} else {
|
||||||
foundSurface = pFoundWindow->m_pWLSurface.wlr();
|
foundSurface = pFoundWindow->m_pWLSurface.wlr();
|
||||||
surfacePos = pFoundWindow->m_vRealPosition.vec();
|
surfacePos = pFoundWindow->m_vRealPosition.value();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -302,7 +302,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus) {
|
||||||
foundSurface = g_pCompositor->vectorWindowToSurface(mouseCoords, pFoundWindow, surfaceCoords);
|
foundSurface = g_pCompositor->vectorWindowToSurface(mouseCoords, pFoundWindow, surfaceCoords);
|
||||||
} else {
|
} else {
|
||||||
foundSurface = pFoundWindow->m_pWLSurface.wlr();
|
foundSurface = pFoundWindow->m_pWLSurface.wlr();
|
||||||
surfacePos = pFoundWindow->m_vRealPosition.vec();
|
surfacePos = pFoundWindow->m_vRealPosition.value();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -626,7 +626,7 @@ void CInputManager::processMouseDownNormal(wlr_pointer_button_event* e) {
|
||||||
// TODO detect click on LS properly
|
// TODO detect click on LS properly
|
||||||
if (**PRESIZEONBORDER && !m_bLastFocusOnLS && e->state == WLR_BUTTON_PRESSED) {
|
if (**PRESIZEONBORDER && !m_bLastFocusOnLS && e->state == WLR_BUTTON_PRESSED) {
|
||||||
if (w && !w->m_bIsFullscreen) {
|
if (w && !w->m_bIsFullscreen) {
|
||||||
const CBox real = {w->m_vRealPosition.vec().x, w->m_vRealPosition.vec().y, w->m_vRealSize.vec().x, w->m_vRealSize.vec().y};
|
const CBox real = {w->m_vRealPosition.value().x, w->m_vRealPosition.value().y, w->m_vRealSize.value().x, w->m_vRealSize.value().y};
|
||||||
const CBox grab = {real.x - BORDER_GRAB_AREA, real.y - BORDER_GRAB_AREA, real.width + 2 * BORDER_GRAB_AREA, real.height + 2 * BORDER_GRAB_AREA};
|
const CBox grab = {real.x - BORDER_GRAB_AREA, real.y - BORDER_GRAB_AREA, real.width + 2 * BORDER_GRAB_AREA, real.height + 2 * BORDER_GRAB_AREA};
|
||||||
|
|
||||||
if ((grab.containsPoint(mouseCoords) && (!real.containsPoint(mouseCoords) || w->isInCurvedCorner(mouseCoords.x, mouseCoords.y))) && !w->hasPopupAt(mouseCoords)) {
|
if ((grab.containsPoint(mouseCoords) && (!real.containsPoint(mouseCoords) || w->isInCurvedCorner(mouseCoords.x, mouseCoords.y))) && !w->hasPopupAt(mouseCoords)) {
|
||||||
|
@ -1304,9 +1304,9 @@ void CInputManager::constrainMouse(SMouse* pMouse, wlr_pointer_constraint_v1* co
|
||||||
|
|
||||||
if (const auto PWINDOW = g_pCompositor->getWindowFromSurface(constraint->surface); PWINDOW) {
|
if (const auto PWINDOW = g_pCompositor->getWindowFromSurface(constraint->surface); PWINDOW) {
|
||||||
const auto RELATIVETO = PWINDOW->m_bIsX11 ?
|
const auto RELATIVETO = PWINDOW->m_bIsX11 ?
|
||||||
(PWINDOW->m_bIsMapped ? PWINDOW->m_vRealPosition.goalv() :
|
(PWINDOW->m_bIsMapped ? PWINDOW->m_vRealPosition.goal() :
|
||||||
g_pXWaylandManager->xwaylandToWaylandCoords({PWINDOW->m_uSurface.xwayland->x, PWINDOW->m_uSurface.xwayland->y})) :
|
g_pXWaylandManager->xwaylandToWaylandCoords({PWINDOW->m_uSurface.xwayland->x, PWINDOW->m_uSurface.xwayland->y})) :
|
||||||
PWINDOW->m_vRealPosition.goalv();
|
PWINDOW->m_vRealPosition.goal();
|
||||||
|
|
||||||
PCONSTRAINT->cursorPosOnActivate = (MOUSECOORDS - RELATIVETO) * PWINDOW->m_fX11SurfaceScaledBy;
|
PCONSTRAINT->cursorPosOnActivate = (MOUSECOORDS - RELATIVETO) * PWINDOW->m_fX11SurfaceScaledBy;
|
||||||
}
|
}
|
||||||
|
|
|
@ -192,8 +192,8 @@ void CInputMethodRelay::updateInputPopup(SIMEPopup* pPopup) {
|
||||||
const auto PWINDOW = g_pCompositor->getWindowFromSurface(PFOCUSEDSURFACE);
|
const auto PWINDOW = g_pCompositor->getWindowFromSurface(PFOCUSEDSURFACE);
|
||||||
|
|
||||||
if (PWINDOW) {
|
if (PWINDOW) {
|
||||||
parentPos = PWINDOW->m_vRealPosition.goalv();
|
parentPos = PWINDOW->m_vRealPosition.goal();
|
||||||
parentSize = PWINDOW->m_vRealSize.goalv();
|
parentSize = PWINDOW->m_vRealSize.goal();
|
||||||
pMonitor = g_pCompositor->getMonitorFromID(PWINDOW->m_iMonitorID);
|
pMonitor = g_pCompositor->getMonitorFromID(PWINDOW->m_iMonitorID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -298,7 +298,7 @@ void CInputMethodRelay::damagePopup(SIMEPopup* pPopup) {
|
||||||
const auto PWINDOW = g_pCompositor->getWindowFromSurface(PFOCUSEDSURFACE);
|
const auto PWINDOW = g_pCompositor->getWindowFromSurface(PFOCUSEDSURFACE);
|
||||||
|
|
||||||
if (PWINDOW) {
|
if (PWINDOW) {
|
||||||
parentPos = PWINDOW->m_vRealPosition.goalv();
|
parentPos = PWINDOW->m_vRealPosition.goal();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -79,7 +79,7 @@ void CInputManager::onSwipeEnd(wlr_pointer_swipe_end_event* e) {
|
||||||
auto PWORKSPACER = g_pCompositor->getWorkspaceByID(workspaceIDRight); // not guaranteed if PSWIPENEW || PSWIPENUMBER
|
auto PWORKSPACER = g_pCompositor->getWorkspaceByID(workspaceIDRight); // not guaranteed if PSWIPENEW || PSWIPENUMBER
|
||||||
auto PWORKSPACEL = g_pCompositor->getWorkspaceByID(workspaceIDLeft); // not guaranteed if PSWIPENUMBER
|
auto PWORKSPACEL = g_pCompositor->getWorkspaceByID(workspaceIDLeft); // not guaranteed if PSWIPENUMBER
|
||||||
|
|
||||||
const auto RENDEROFFSETMIDDLE = m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.vec();
|
const auto RENDEROFFSETMIDDLE = m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.value();
|
||||||
const auto XDISTANCE = m_sActiveSwipe.pMonitor->vecSize.x + **PWORKSPACEGAP;
|
const auto XDISTANCE = m_sActiveSwipe.pMonitor->vecSize.x + **PWORKSPACEGAP;
|
||||||
const auto YDISTANCE = m_sActiveSwipe.pMonitor->vecSize.y + **PWORKSPACEGAP;
|
const auto YDISTANCE = m_sActiveSwipe.pMonitor->vecSize.y + **PWORKSPACEGAP;
|
||||||
|
|
||||||
|
@ -118,7 +118,7 @@ void CInputManager::onSwipeEnd(wlr_pointer_swipe_end_event* e) {
|
||||||
pSwitchedTo = m_sActiveSwipe.pWorkspaceBegin;
|
pSwitchedTo = m_sActiveSwipe.pWorkspaceBegin;
|
||||||
} else if (m_sActiveSwipe.delta < 0) {
|
} else if (m_sActiveSwipe.delta < 0) {
|
||||||
// switch to left
|
// switch to left
|
||||||
const auto RENDEROFFSET = PWORKSPACEL ? PWORKSPACEL->m_vRenderOffset.vec() : Vector2D();
|
const auto RENDEROFFSET = PWORKSPACEL ? PWORKSPACEL->m_vRenderOffset.value() : Vector2D();
|
||||||
|
|
||||||
if (PWORKSPACEL)
|
if (PWORKSPACEL)
|
||||||
m_sActiveSwipe.pMonitor->changeWorkspace(workspaceIDLeft);
|
m_sActiveSwipe.pMonitor->changeWorkspace(workspaceIDLeft);
|
||||||
|
@ -144,7 +144,7 @@ void CInputManager::onSwipeEnd(wlr_pointer_swipe_end_event* e) {
|
||||||
pSwitchedTo = PWORKSPACEL;
|
pSwitchedTo = PWORKSPACEL;
|
||||||
} else {
|
} else {
|
||||||
// switch to right
|
// switch to right
|
||||||
const auto RENDEROFFSET = PWORKSPACER ? PWORKSPACER->m_vRenderOffset.vec() : Vector2D();
|
const auto RENDEROFFSET = PWORKSPACER ? PWORKSPACER->m_vRenderOffset.value() : Vector2D();
|
||||||
|
|
||||||
if (PWORKSPACER)
|
if (PWORKSPACER)
|
||||||
m_sActiveSwipe.pMonitor->changeWorkspace(workspaceIDRight);
|
m_sActiveSwipe.pMonitor->changeWorkspace(workspaceIDRight);
|
||||||
|
|
|
@ -267,7 +267,7 @@ void CInputManager::focusTablet(STablet* pTab, wlr_tablet_tool* pTool, bool moti
|
||||||
}
|
}
|
||||||
|
|
||||||
if (motion) {
|
if (motion) {
|
||||||
auto local = CURSORPOS - PWINDOW->m_vRealPosition.goalv();
|
auto local = CURSORPOS - PWINDOW->m_vRealPosition.goal();
|
||||||
|
|
||||||
if (PWINDOW->m_bIsX11)
|
if (PWINDOW->m_bIsX11)
|
||||||
local = local * PWINDOW->m_fX11SurfaceScaledBy;
|
local = local * PWINDOW->m_fX11SurfaceScaledBy;
|
||||||
|
|
|
@ -34,8 +34,8 @@ void CInputManager::onTouchDown(wlr_touch_down_event* e) {
|
||||||
|
|
||||||
if (m_sTouchData.touchFocusWindow) {
|
if (m_sTouchData.touchFocusWindow) {
|
||||||
if (m_sTouchData.touchFocusWindow->m_bIsX11) {
|
if (m_sTouchData.touchFocusWindow->m_bIsX11) {
|
||||||
local = (g_pInputManager->getMouseCoordsInternal() - m_sTouchData.touchFocusWindow->m_vRealPosition.goalv()) * m_sTouchData.touchFocusWindow->m_fX11SurfaceScaledBy;
|
local = (g_pInputManager->getMouseCoordsInternal() - m_sTouchData.touchFocusWindow->m_vRealPosition.goal()) * m_sTouchData.touchFocusWindow->m_fX11SurfaceScaledBy;
|
||||||
m_sTouchData.touchSurfaceOrigin = m_sTouchData.touchFocusWindow->m_vRealPosition.goalv();
|
m_sTouchData.touchSurfaceOrigin = m_sTouchData.touchFocusWindow->m_vRealPosition.goal();
|
||||||
} else {
|
} else {
|
||||||
g_pCompositor->vectorWindowToSurface(g_pInputManager->getMouseCoordsInternal(), m_sTouchData.touchFocusWindow, local);
|
g_pCompositor->vectorWindowToSurface(g_pInputManager->getMouseCoordsInternal(), m_sTouchData.touchFocusWindow, local);
|
||||||
m_sTouchData.touchSurfaceOrigin = g_pInputManager->getMouseCoordsInternal() - local;
|
m_sTouchData.touchSurfaceOrigin = g_pInputManager->getMouseCoordsInternal() - local;
|
||||||
|
|
|
@ -212,7 +212,7 @@ void CToplevelExportProtocolManager::captureToplevel(wl_client* client, wl_resou
|
||||||
PFRAME->dmabufFormat = DRM_FORMAT_INVALID;
|
PFRAME->dmabufFormat = DRM_FORMAT_INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
PFRAME->box = {0, 0, (int)(PFRAME->pWindow->m_vRealSize.vec().x * PMONITOR->scale), (int)(PFRAME->pWindow->m_vRealSize.vec().y * PMONITOR->scale)};
|
PFRAME->box = {0, 0, (int)(PFRAME->pWindow->m_vRealSize.value().x * PMONITOR->scale), (int)(PFRAME->pWindow->m_vRealSize.value().y * PMONITOR->scale)};
|
||||||
int ow, oh;
|
int ow, oh;
|
||||||
wlr_output_effective_resolution(PMONITOR->output, &ow, &oh);
|
wlr_output_effective_resolution(PMONITOR->output, &ow, &oh);
|
||||||
PFRAME->box.transform(PMONITOR->transform, ow, oh).round();
|
PFRAME->box.transform(PMONITOR->transform, ow, oh).round();
|
||||||
|
@ -322,7 +322,7 @@ void CToplevelExportProtocolManager::onOutputCommit(CMonitor* pMonitor, wlr_outp
|
||||||
if (PMONITOR != g_pCompositor->getMonitorFromID(f->pWindow->m_iMonitorID))
|
if (PMONITOR != g_pCompositor->getMonitorFromID(f->pWindow->m_iMonitorID))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
CBox geometry = {f->pWindow->m_vRealPosition.vec().x, f->pWindow->m_vRealPosition.vec().y, f->pWindow->m_vRealSize.vec().x, f->pWindow->m_vRealSize.vec().y};
|
CBox geometry = {f->pWindow->m_vRealPosition.value().x, f->pWindow->m_vRealPosition.value().y, f->pWindow->m_vRealSize.value().x, f->pWindow->m_vRealSize.value().y};
|
||||||
|
|
||||||
if (!wlr_output_layout_intersects(g_pCompositor->m_sWLROutputLayout, pMonitor->output, geometry.pWlr()))
|
if (!wlr_output_layout_intersects(g_pCompositor->m_sWLROutputLayout, pMonitor->output, geometry.pWlr()))
|
||||||
continue;
|
continue;
|
||||||
|
@ -404,7 +404,7 @@ bool CToplevelExportProtocolManager::copyFrameShm(SScreencopyFrame* frame, times
|
||||||
g_pHyprRenderer->m_bBlockSurfaceFeedback = false;
|
g_pHyprRenderer->m_bBlockSurfaceFeedback = false;
|
||||||
|
|
||||||
if (frame->overlayCursor)
|
if (frame->overlayCursor)
|
||||||
g_pHyprRenderer->renderSoftwareCursors(PMONITOR, fakeDamage, g_pInputManager->getMouseCoordsInternal() - frame->pWindow->m_vRealPosition.vec());
|
g_pHyprRenderer->renderSoftwareCursors(PMONITOR, fakeDamage, g_pInputManager->getMouseCoordsInternal() - frame->pWindow->m_vRealPosition.value());
|
||||||
|
|
||||||
const auto PFORMAT = g_pHyprOpenGL->getPixelFormatFromDRM(format);
|
const auto PFORMAT = g_pHyprOpenGL->getPixelFormatFromDRM(format);
|
||||||
if (!PFORMAT) {
|
if (!PFORMAT) {
|
||||||
|
@ -450,7 +450,7 @@ bool CToplevelExportProtocolManager::copyFrameDmabuf(SScreencopyFrame* frame, ti
|
||||||
g_pHyprRenderer->m_bBlockSurfaceFeedback = false;
|
g_pHyprRenderer->m_bBlockSurfaceFeedback = false;
|
||||||
|
|
||||||
if (frame->overlayCursor)
|
if (frame->overlayCursor)
|
||||||
g_pHyprRenderer->renderSoftwareCursors(PMONITOR, fakeDamage, g_pInputManager->getMouseCoordsInternal() - frame->pWindow->m_vRealPosition.vec());
|
g_pHyprRenderer->renderSoftwareCursors(PMONITOR, fakeDamage, g_pInputManager->getMouseCoordsInternal() - frame->pWindow->m_vRealPosition.value());
|
||||||
|
|
||||||
g_pHyprRenderer->endRender();
|
g_pHyprRenderer->endRender();
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -168,7 +168,7 @@ bool CHyprOpenGLImpl::passRequiresIntrospection(CMonitor* pMonitor) {
|
||||||
if (!ws->m_bIsSpecialWorkspace || ws->m_iMonitorID != pMonitor->ID)
|
if (!ws->m_bIsSpecialWorkspace || ws->m_iMonitorID != pMonitor->ID)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (ws->m_fAlpha.fl() == 0)
|
if (ws->m_fAlpha.value() == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -881,7 +881,7 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(const CTexture& tex, CBox*
|
||||||
|
|
||||||
if (allowDim && m_pCurrentWindow && **PDIMINACTIVE) {
|
if (allowDim && m_pCurrentWindow && **PDIMINACTIVE) {
|
||||||
glUniform1i(shader->applyTint, 1);
|
glUniform1i(shader->applyTint, 1);
|
||||||
const auto DIM = m_pCurrentWindow->m_fDimPercent.fl();
|
const auto DIM = m_pCurrentWindow->m_fDimPercent.value();
|
||||||
glUniform3f(shader->tint, 1.f - DIM, 1.f - DIM, 1.f - DIM);
|
glUniform3f(shader->tint, 1.f - DIM, 1.f - DIM, 1.f - DIM);
|
||||||
} else {
|
} else {
|
||||||
glUniform1i(shader->applyTint, 0);
|
glUniform1i(shader->applyTint, 0);
|
||||||
|
@ -1292,7 +1292,7 @@ void CHyprOpenGLImpl::preRender(CMonitor* pMonitor) {
|
||||||
const auto PSURFACE = pWindow->m_pWLSurface.wlr();
|
const auto PSURFACE = pWindow->m_pWLSurface.wlr();
|
||||||
|
|
||||||
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(pWindow->m_iWorkspaceID);
|
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(pWindow->m_iWorkspaceID);
|
||||||
const float A = pWindow->m_fAlpha.fl() * pWindow->m_fActiveInactiveAlpha.fl() * PWORKSPACE->m_fAlpha.fl();
|
const float A = pWindow->m_fAlpha.value() * pWindow->m_fActiveInactiveAlpha.value() * PWORKSPACE->m_fAlpha.value();
|
||||||
|
|
||||||
if (A >= 1.f) {
|
if (A >= 1.f) {
|
||||||
if (PSURFACE->opaque)
|
if (PSURFACE->opaque)
|
||||||
|
@ -1330,7 +1330,7 @@ void CHyprOpenGLImpl::preRender(CMonitor* pMonitor) {
|
||||||
if (!ls->layerSurface || ls->xray != 1)
|
if (!ls->layerSurface || ls->xray != 1)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (ls->layerSurface->surface->opaque && ls->alpha.fl() >= 1.f)
|
if (ls->layerSurface->surface->opaque && ls->alpha.value() >= 1.f)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
hasWindows = true;
|
hasWindows = true;
|
||||||
|
@ -1773,25 +1773,25 @@ void CHyprOpenGLImpl::renderSnapshot(CWindow** pWindow) {
|
||||||
CBox windowBox;
|
CBox windowBox;
|
||||||
// some mafs to figure out the correct box
|
// some mafs to figure out the correct box
|
||||||
// the originalClosedPos is relative to the monitor's pos
|
// the originalClosedPos is relative to the monitor's pos
|
||||||
Vector2D scaleXY = Vector2D((PMONITOR->scale * PWINDOW->m_vRealSize.vec().x / (PWINDOW->m_vOriginalClosedSize.x * PMONITOR->scale)),
|
Vector2D scaleXY = Vector2D((PMONITOR->scale * PWINDOW->m_vRealSize.value().x / (PWINDOW->m_vOriginalClosedSize.x * PMONITOR->scale)),
|
||||||
(PMONITOR->scale * PWINDOW->m_vRealSize.vec().y / (PWINDOW->m_vOriginalClosedSize.y * PMONITOR->scale)));
|
(PMONITOR->scale * PWINDOW->m_vRealSize.value().y / (PWINDOW->m_vOriginalClosedSize.y * PMONITOR->scale)));
|
||||||
|
|
||||||
windowBox.width = PMONITOR->vecTransformedSize.x * scaleXY.x;
|
windowBox.width = PMONITOR->vecTransformedSize.x * scaleXY.x;
|
||||||
windowBox.height = PMONITOR->vecTransformedSize.y * scaleXY.y;
|
windowBox.height = PMONITOR->vecTransformedSize.y * scaleXY.y;
|
||||||
windowBox.x = ((PWINDOW->m_vRealPosition.vec().x - PMONITOR->vecPosition.x) * PMONITOR->scale) - ((PWINDOW->m_vOriginalClosedPos.x * PMONITOR->scale) * scaleXY.x);
|
windowBox.x = ((PWINDOW->m_vRealPosition.value().x - PMONITOR->vecPosition.x) * PMONITOR->scale) - ((PWINDOW->m_vOriginalClosedPos.x * PMONITOR->scale) * scaleXY.x);
|
||||||
windowBox.y = ((PWINDOW->m_vRealPosition.vec().y - PMONITOR->vecPosition.y) * PMONITOR->scale) - ((PWINDOW->m_vOriginalClosedPos.y * PMONITOR->scale) * scaleXY.y);
|
windowBox.y = ((PWINDOW->m_vRealPosition.value().y - PMONITOR->vecPosition.y) * PMONITOR->scale) - ((PWINDOW->m_vOriginalClosedPos.y * PMONITOR->scale) * scaleXY.y);
|
||||||
|
|
||||||
CRegion fakeDamage{0, 0, PMONITOR->vecTransformedSize.x, PMONITOR->vecTransformedSize.y};
|
CRegion fakeDamage{0, 0, PMONITOR->vecTransformedSize.x, PMONITOR->vecTransformedSize.y};
|
||||||
|
|
||||||
if (**PDIMAROUND && (*pWindow)->m_sAdditionalConfigData.dimAround) {
|
if (**PDIMAROUND && (*pWindow)->m_sAdditionalConfigData.dimAround) {
|
||||||
CBox monbox = {0, 0, g_pHyprOpenGL->m_RenderData.pMonitor->vecPixelSize.x, g_pHyprOpenGL->m_RenderData.pMonitor->vecPixelSize.y};
|
CBox monbox = {0, 0, g_pHyprOpenGL->m_RenderData.pMonitor->vecPixelSize.x, g_pHyprOpenGL->m_RenderData.pMonitor->vecPixelSize.y};
|
||||||
g_pHyprOpenGL->renderRect(&monbox, CColor(0, 0, 0, **PDIMAROUND * PWINDOW->m_fAlpha.fl()));
|
g_pHyprOpenGL->renderRect(&monbox, CColor(0, 0, 0, **PDIMAROUND * PWINDOW->m_fAlpha.value()));
|
||||||
g_pHyprRenderer->damageMonitor(PMONITOR);
|
g_pHyprRenderer->damageMonitor(PMONITOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_bEndFrame = true;
|
m_bEndFrame = true;
|
||||||
|
|
||||||
renderTextureInternalWithDamage(it->second.m_cTex, &windowBox, PWINDOW->m_fAlpha.fl(), &fakeDamage, 0);
|
renderTextureInternalWithDamage(it->second.m_cTex, &windowBox, PWINDOW->m_fAlpha.value(), &fakeDamage, 0);
|
||||||
|
|
||||||
m_bEndFrame = false;
|
m_bEndFrame = false;
|
||||||
}
|
}
|
||||||
|
@ -1815,19 +1815,19 @@ void CHyprOpenGLImpl::renderSnapshot(SLayerSurface** pLayer) {
|
||||||
CBox layerBox;
|
CBox layerBox;
|
||||||
// some mafs to figure out the correct box
|
// some mafs to figure out the correct box
|
||||||
// the originalClosedPos is relative to the monitor's pos
|
// the originalClosedPos is relative to the monitor's pos
|
||||||
Vector2D scaleXY = Vector2D((PMONITOR->scale * PLAYER->realSize.vec().x / (PLAYER->geometry.w * PMONITOR->scale)),
|
Vector2D scaleXY = Vector2D((PMONITOR->scale * PLAYER->realSize.value().x / (PLAYER->geometry.w * PMONITOR->scale)),
|
||||||
(PMONITOR->scale * PLAYER->realSize.vec().y / (PLAYER->geometry.h * PMONITOR->scale)));
|
(PMONITOR->scale * PLAYER->realSize.value().y / (PLAYER->geometry.h * PMONITOR->scale)));
|
||||||
|
|
||||||
layerBox.width = PMONITOR->vecTransformedSize.x * scaleXY.x;
|
layerBox.width = PMONITOR->vecTransformedSize.x * scaleXY.x;
|
||||||
layerBox.height = PMONITOR->vecTransformedSize.y * scaleXY.y;
|
layerBox.height = PMONITOR->vecTransformedSize.y * scaleXY.y;
|
||||||
layerBox.x = ((PLAYER->realPosition.vec().x - PMONITOR->vecPosition.x) * PMONITOR->scale) - (((PLAYER->geometry.x - PMONITOR->vecPosition.x) * PMONITOR->scale) * scaleXY.x);
|
layerBox.x = ((PLAYER->realPosition.value().x - PMONITOR->vecPosition.x) * PMONITOR->scale) - (((PLAYER->geometry.x - PMONITOR->vecPosition.x) * PMONITOR->scale) * scaleXY.x);
|
||||||
layerBox.y = ((PLAYER->realPosition.vec().y - PMONITOR->vecPosition.y) * PMONITOR->scale) - (((PLAYER->geometry.y - PMONITOR->vecPosition.y) * PMONITOR->scale) * scaleXY.y);
|
layerBox.y = ((PLAYER->realPosition.value().y - PMONITOR->vecPosition.y) * PMONITOR->scale) - (((PLAYER->geometry.y - PMONITOR->vecPosition.y) * PMONITOR->scale) * scaleXY.y);
|
||||||
|
|
||||||
CRegion fakeDamage{0, 0, PMONITOR->vecTransformedSize.x, PMONITOR->vecTransformedSize.y};
|
CRegion fakeDamage{0, 0, PMONITOR->vecTransformedSize.x, PMONITOR->vecTransformedSize.y};
|
||||||
|
|
||||||
m_bEndFrame = true;
|
m_bEndFrame = true;
|
||||||
|
|
||||||
renderTextureInternalWithDamage(it->second.m_cTex, &layerBox, PLAYER->alpha.fl(), &fakeDamage, 0);
|
renderTextureInternalWithDamage(it->second.m_cTex, &layerBox, PLAYER->alpha.value(), &fakeDamage, 0);
|
||||||
|
|
||||||
m_bEndFrame = false;
|
m_bEndFrame = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,8 +78,8 @@ static void renderSurface(struct wlr_surface* surface, int x, int y, void* data)
|
||||||
windowBox.x += CORRECT.x;
|
windowBox.x += CORRECT.x;
|
||||||
windowBox.y += CORRECT.y;
|
windowBox.y += CORRECT.y;
|
||||||
|
|
||||||
windowBox.width = SIZE.x * (PSURFACE->getWindow()->m_vRealSize.vec().x / PSURFACE->getWindow()->m_vReportedSize.x);
|
windowBox.width = SIZE.x * (PSURFACE->getWindow()->m_vRealSize.value().x / PSURFACE->getWindow()->m_vReportedSize.x);
|
||||||
windowBox.height = SIZE.y * (PSURFACE->getWindow()->m_vRealSize.vec().y / PSURFACE->getWindow()->m_vReportedSize.y);
|
windowBox.height = SIZE.y * (PSURFACE->getWindow()->m_vRealSize.value().y / PSURFACE->getWindow()->m_vReportedSize.y);
|
||||||
} else {
|
} else {
|
||||||
windowBox.width = SIZE.x;
|
windowBox.width = SIZE.x;
|
||||||
windowBox.height = SIZE.y;
|
windowBox.height = SIZE.y;
|
||||||
|
@ -90,8 +90,8 @@ static void renderSurface(struct wlr_surface* surface, int x, int y, void* data)
|
||||||
windowBox = {(int)outputX + RDATA->x + x, (int)outputY + RDATA->y + y, std::max(surface->current.width, 2), std::max(surface->current.height, 2)};
|
windowBox = {(int)outputX + RDATA->x + x, (int)outputY + RDATA->y + y, std::max(surface->current.width, 2), std::max(surface->current.height, 2)};
|
||||||
if (RDATA->pWindow && RDATA->pWindow->m_vRealSize.isBeingAnimated() && RDATA->surface && RDATA->surface != surface && RDATA->squishOversized /* subsurface */) {
|
if (RDATA->pWindow && RDATA->pWindow->m_vRealSize.isBeingAnimated() && RDATA->surface && RDATA->surface != surface && RDATA->squishOversized /* subsurface */) {
|
||||||
// adjust subsurfaces to the window
|
// adjust subsurfaces to the window
|
||||||
windowBox.width = (windowBox.width / RDATA->pWindow->m_vReportedSize.x) * RDATA->pWindow->m_vRealSize.vec().x;
|
windowBox.width = (windowBox.width / RDATA->pWindow->m_vReportedSize.x) * RDATA->pWindow->m_vRealSize.value().x;
|
||||||
windowBox.height = (windowBox.height / RDATA->pWindow->m_vReportedSize.y) * RDATA->pWindow->m_vRealSize.vec().y;
|
windowBox.height = (windowBox.height / RDATA->pWindow->m_vReportedSize.y) * RDATA->pWindow->m_vRealSize.value().y;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,7 +192,7 @@ bool CHyprRenderer::shouldRenderWindow(CWindow* pWindow, CMonitor* pMonitor, CWo
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
if (PWINDOWWORKSPACE->m_bHasFullscreenWindow && !pWindow->m_bIsFullscreen && !pWindow->m_bIsFloating && !pWindow->m_bCreatedOverFullscreen &&
|
if (PWINDOWWORKSPACE->m_bHasFullscreenWindow && !pWindow->m_bIsFullscreen && !pWindow->m_bIsFloating && !pWindow->m_bCreatedOverFullscreen &&
|
||||||
pWindow->m_fAlpha.fl() == 0)
|
pWindow->m_fAlpha.value() == 0)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -247,7 +247,7 @@ void CHyprRenderer::renderWorkspaceWindowsFullscreen(CMonitor* pMonitor, CWorksp
|
||||||
if (!shouldRenderWindow(w.get(), pMonitor, pWorkspace))
|
if (!shouldRenderWindow(w.get(), pMonitor, pWorkspace))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (w->m_fAlpha.fl() == 0.f)
|
if (w->m_fAlpha.value() == 0.f)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (w->m_bIsFullscreen || w->m_bIsFloating)
|
if (w->m_bIsFullscreen || w->m_bIsFloating)
|
||||||
|
@ -264,7 +264,7 @@ void CHyprRenderer::renderWorkspaceWindowsFullscreen(CMonitor* pMonitor, CWorksp
|
||||||
if (!shouldRenderWindow(w.get(), pMonitor, pWorkspace))
|
if (!shouldRenderWindow(w.get(), pMonitor, pWorkspace))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (w->m_fAlpha.fl() == 0.f)
|
if (w->m_fAlpha.value() == 0.f)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (w->m_bIsFullscreen || !w->m_bIsFloating)
|
if (w->m_bIsFullscreen || !w->m_bIsFloating)
|
||||||
|
@ -408,12 +408,12 @@ void CHyprRenderer::renderWindow(CWindow* pWindow, CMonitor* pMonitor, timespec*
|
||||||
TRACY_GPU_ZONE("RenderWindow");
|
TRACY_GPU_ZONE("RenderWindow");
|
||||||
|
|
||||||
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(pWindow->m_iWorkspaceID);
|
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(pWindow->m_iWorkspaceID);
|
||||||
const auto REALPOS = pWindow->m_vRealPosition.vec() + (pWindow->m_bPinned ? Vector2D{} : PWORKSPACE->m_vRenderOffset.vec());
|
const auto REALPOS = pWindow->m_vRealPosition.value() + (pWindow->m_bPinned ? Vector2D{} : PWORKSPACE->m_vRenderOffset.value());
|
||||||
static auto* const PDIMAROUND = (Hyprlang::FLOAT* const*)g_pConfigManager->getConfigValuePtr("decoration:dim_around");
|
static auto* const PDIMAROUND = (Hyprlang::FLOAT* const*)g_pConfigManager->getConfigValuePtr("decoration:dim_around");
|
||||||
static auto* const PBLUR = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("decoration:blur:enabled");
|
static auto* const PBLUR = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("decoration:blur:enabled");
|
||||||
|
|
||||||
SRenderData renderdata = {pMonitor, time};
|
SRenderData renderdata = {pMonitor, time};
|
||||||
CBox textureBox = {REALPOS.x, REALPOS.y, std::max(pWindow->m_vRealSize.vec().x, 5.0), std::max(pWindow->m_vRealSize.vec().y, 5.0)};
|
CBox textureBox = {REALPOS.x, REALPOS.y, std::max(pWindow->m_vRealSize.value().x, 5.0), std::max(pWindow->m_vRealSize.value().y, 5.0)};
|
||||||
|
|
||||||
renderdata.x = textureBox.x;
|
renderdata.x = textureBox.x;
|
||||||
renderdata.y = textureBox.y;
|
renderdata.y = textureBox.y;
|
||||||
|
@ -430,8 +430,8 @@ void CHyprRenderer::renderWindow(CWindow* pWindow, CMonitor* pMonitor, timespec*
|
||||||
|
|
||||||
renderdata.surface = pWindow->m_pWLSurface.wlr();
|
renderdata.surface = pWindow->m_pWLSurface.wlr();
|
||||||
renderdata.dontRound = (pWindow->m_bIsFullscreen && PWORKSPACE->m_efFullscreenMode == FULLSCREEN_FULL) || (!pWindow->m_sSpecialRenderData.rounding);
|
renderdata.dontRound = (pWindow->m_bIsFullscreen && PWORKSPACE->m_efFullscreenMode == FULLSCREEN_FULL) || (!pWindow->m_sSpecialRenderData.rounding);
|
||||||
renderdata.fadeAlpha = pWindow->m_fAlpha.fl() * (pWindow->m_bPinned ? 1.f : PWORKSPACE->m_fAlpha.fl());
|
renderdata.fadeAlpha = pWindow->m_fAlpha.value() * (pWindow->m_bPinned ? 1.f : PWORKSPACE->m_fAlpha.value());
|
||||||
renderdata.alpha = pWindow->m_fActiveInactiveAlpha.fl();
|
renderdata.alpha = pWindow->m_fActiveInactiveAlpha.value();
|
||||||
renderdata.decorate = decorate && !pWindow->m_bX11DoesntWantBorders && (!pWindow->m_bIsFullscreen || PWORKSPACE->m_efFullscreenMode != FULLSCREEN_FULL);
|
renderdata.decorate = decorate && !pWindow->m_bX11DoesntWantBorders && (!pWindow->m_bIsFullscreen || PWORKSPACE->m_efFullscreenMode != FULLSCREEN_FULL);
|
||||||
renderdata.rounding = ignoreAllGeometry || renderdata.dontRound ? 0 : pWindow->rounding() * pMonitor->scale;
|
renderdata.rounding = ignoreAllGeometry || renderdata.dontRound ? 0 : pWindow->rounding() * pMonitor->scale;
|
||||||
renderdata.blur = !ignoreAllGeometry; // if it shouldn't, it will be ignored later
|
renderdata.blur = !ignoreAllGeometry; // if it shouldn't, it will be ignored later
|
||||||
|
@ -460,9 +460,9 @@ void CHyprRenderer::renderWindow(CWindow* pWindow, CMonitor* pMonitor, timespec*
|
||||||
if (!ignorePosition && pWindow->m_bIsFloating && !pWindow->m_bPinned && !pWindow->m_bIsFullscreen) {
|
if (!ignorePosition && pWindow->m_bIsFloating && !pWindow->m_bPinned && !pWindow->m_bIsFullscreen) {
|
||||||
Vector2D offset;
|
Vector2D offset;
|
||||||
|
|
||||||
if (PWORKSPACE->m_vRenderOffset.vec().x != 0) {
|
if (PWORKSPACE->m_vRenderOffset.value().x != 0) {
|
||||||
const auto PWSMON = g_pCompositor->getMonitorFromID(PWORKSPACE->m_iMonitorID);
|
const auto PWSMON = g_pCompositor->getMonitorFromID(PWORKSPACE->m_iMonitorID);
|
||||||
const auto PROGRESS = PWORKSPACE->m_vRenderOffset.vec().x / PWSMON->vecSize.x;
|
const auto PROGRESS = PWORKSPACE->m_vRenderOffset.value().x / PWSMON->vecSize.x;
|
||||||
const auto WINBB = pWindow->getFullWindowBoundingBox();
|
const auto WINBB = pWindow->getFullWindowBoundingBox();
|
||||||
|
|
||||||
if (WINBB.x < PWSMON->vecPosition.x) {
|
if (WINBB.x < PWSMON->vecPosition.x) {
|
||||||
|
@ -470,9 +470,9 @@ void CHyprRenderer::renderWindow(CWindow* pWindow, CMonitor* pMonitor, timespec*
|
||||||
} else if (WINBB.x + WINBB.width > PWSMON->vecPosition.x + PWSMON->vecSize.x) {
|
} else if (WINBB.x + WINBB.width > PWSMON->vecPosition.x + PWSMON->vecSize.x) {
|
||||||
offset.x = (WINBB.x + WINBB.width - PWSMON->vecPosition.x - PWSMON->vecSize.x) * PROGRESS;
|
offset.x = (WINBB.x + WINBB.width - PWSMON->vecPosition.x - PWSMON->vecSize.x) * PROGRESS;
|
||||||
}
|
}
|
||||||
} else if (PWORKSPACE->m_vRenderOffset.vec().y != 0) {
|
} else if (PWORKSPACE->m_vRenderOffset.value().y != 0) {
|
||||||
const auto PWSMON = g_pCompositor->getMonitorFromID(PWORKSPACE->m_iMonitorID);
|
const auto PWSMON = g_pCompositor->getMonitorFromID(PWORKSPACE->m_iMonitorID);
|
||||||
const auto PROGRESS = PWORKSPACE->m_vRenderOffset.vec().y / PWSMON->vecSize.y;
|
const auto PROGRESS = PWORKSPACE->m_vRenderOffset.value().y / PWSMON->vecSize.y;
|
||||||
const auto WINBB = pWindow->getFullWindowBoundingBox();
|
const auto WINBB = pWindow->getFullWindowBoundingBox();
|
||||||
|
|
||||||
if (WINBB.y < PWSMON->vecPosition.y) {
|
if (WINBB.y < PWSMON->vecPosition.y) {
|
||||||
|
@ -488,7 +488,7 @@ void CHyprRenderer::renderWindow(CWindow* pWindow, CMonitor* pMonitor, timespec*
|
||||||
|
|
||||||
// if window is floating and we have a slide animation, clip it to its full bb
|
// if window is floating and we have a slide animation, clip it to its full bb
|
||||||
if (!ignorePosition && pWindow->m_bIsFloating && !pWindow->m_bIsFullscreen && PWORKSPACE->m_vRenderOffset.isBeingAnimated() && !pWindow->m_bPinned) {
|
if (!ignorePosition && pWindow->m_bIsFloating && !pWindow->m_bIsFullscreen && PWORKSPACE->m_vRenderOffset.isBeingAnimated() && !pWindow->m_bPinned) {
|
||||||
CRegion rg = pWindow->getFullWindowBoundingBox().translate(-pMonitor->vecPosition + PWORKSPACE->m_vRenderOffset.vec()).scale(pMonitor->scale);
|
CRegion rg = pWindow->getFullWindowBoundingBox().translate(-pMonitor->vecPosition + PWORKSPACE->m_vRenderOffset.value()).scale(pMonitor->scale);
|
||||||
g_pHyprOpenGL->m_RenderData.clipBox = rg.getExtents();
|
g_pHyprOpenGL->m_RenderData.clipBox = rg.getExtents();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -606,11 +606,11 @@ void CHyprRenderer::renderLayer(SLayerSurface* pLayer, CMonitor* pMonitor, times
|
||||||
|
|
||||||
TRACY_GPU_ZONE("RenderLayer");
|
TRACY_GPU_ZONE("RenderLayer");
|
||||||
|
|
||||||
const auto REALPOS = pLayer->realPosition.vec();
|
const auto REALPOS = pLayer->realPosition.value();
|
||||||
const auto REALSIZ = pLayer->realSize.vec();
|
const auto REALSIZ = pLayer->realSize.value();
|
||||||
|
|
||||||
SRenderData renderdata = {pMonitor, time, REALPOS.x, REALPOS.y};
|
SRenderData renderdata = {pMonitor, time, REALPOS.x, REALPOS.y};
|
||||||
renderdata.fadeAlpha = pLayer->alpha.fl();
|
renderdata.fadeAlpha = pLayer->alpha.value();
|
||||||
renderdata.blur = pLayer->forceBlur;
|
renderdata.blur = pLayer->forceBlur;
|
||||||
renderdata.surface = pLayer->layerSurface->surface;
|
renderdata.surface = pLayer->layerSurface->surface;
|
||||||
renderdata.decorate = false;
|
renderdata.decorate = false;
|
||||||
|
@ -698,7 +698,7 @@ void CHyprRenderer::renderAllClientsForWorkspace(CMonitor* pMonitor, CWorkspace*
|
||||||
// TODO: check better with solitary after MR for tearing.
|
// TODO: check better with solitary after MR for tearing.
|
||||||
const auto PFULLWINDOW = g_pCompositor->getFullscreenWindowOnWorkspace(pWorkspace->m_iID);
|
const auto PFULLWINDOW = g_pCompositor->getFullscreenWindowOnWorkspace(pWorkspace->m_iID);
|
||||||
if (!pWorkspace->m_bHasFullscreenWindow || pWorkspace->m_efFullscreenMode != FULLSCREEN_FULL || !PFULLWINDOW || PFULLWINDOW->m_vRealSize.isBeingAnimated() ||
|
if (!pWorkspace->m_bHasFullscreenWindow || pWorkspace->m_efFullscreenMode != FULLSCREEN_FULL || !PFULLWINDOW || PFULLWINDOW->m_vRealSize.isBeingAnimated() ||
|
||||||
!PFULLWINDOW->opaque() || pWorkspace->m_vRenderOffset.vec() != Vector2D{}) {
|
!PFULLWINDOW->opaque() || pWorkspace->m_vRenderOffset.value() != Vector2D{}) {
|
||||||
|
|
||||||
if (!g_pHyprOpenGL->m_RenderData.pCurrentMonData->blurFBShouldRender)
|
if (!g_pHyprOpenGL->m_RenderData.pCurrentMonData->blurFBShouldRender)
|
||||||
setOccludedForBackLayers(g_pHyprOpenGL->m_RenderData.damage, pWorkspace);
|
setOccludedForBackLayers(g_pHyprOpenGL->m_RenderData.damage, pWorkspace);
|
||||||
|
@ -738,7 +738,7 @@ void CHyprRenderer::renderAllClientsForWorkspace(CMonitor* pMonitor, CWorkspace*
|
||||||
|
|
||||||
// and then special
|
// and then special
|
||||||
for (auto& ws : g_pCompositor->m_vWorkspaces) {
|
for (auto& ws : g_pCompositor->m_vWorkspaces) {
|
||||||
if (ws->m_iMonitorID == pMonitor->ID && ws->m_fAlpha.fl() > 0.f && ws->m_bIsSpecialWorkspace) {
|
if (ws->m_iMonitorID == pMonitor->ID && ws->m_fAlpha.value() > 0.f && ws->m_bIsSpecialWorkspace) {
|
||||||
const auto SPECIALANIMPROGRS = ws->m_vRenderOffset.isBeingAnimated() ? ws->m_vRenderOffset.getCurveValue() : ws->m_fAlpha.getCurveValue();
|
const auto SPECIALANIMPROGRS = ws->m_vRenderOffset.isBeingAnimated() ? ws->m_vRenderOffset.getCurveValue() : ws->m_fAlpha.getCurveValue();
|
||||||
const bool ANIMOUT = !pMonitor->specialWorkspaceID;
|
const bool ANIMOUT = !pMonitor->specialWorkspaceID;
|
||||||
|
|
||||||
|
@ -758,7 +758,7 @@ void CHyprRenderer::renderAllClientsForWorkspace(CMonitor* pMonitor, CWorkspace*
|
||||||
|
|
||||||
// special
|
// special
|
||||||
for (auto& ws : g_pCompositor->m_vWorkspaces) {
|
for (auto& ws : g_pCompositor->m_vWorkspaces) {
|
||||||
if (ws->m_iMonitorID == pMonitor->ID && ws->m_fAlpha.fl() > 0.f && ws->m_bIsSpecialWorkspace)
|
if (ws->m_iMonitorID == pMonitor->ID && ws->m_fAlpha.value() > 0.f && ws->m_bIsSpecialWorkspace)
|
||||||
renderWorkspaceWindows(pMonitor, ws.get(), time);
|
renderWorkspaceWindows(pMonitor, ws.get(), time);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -863,7 +863,7 @@ void CHyprRenderer::calculateUVForSurface(CWindow* pWindow, wlr_surface* pSurfac
|
||||||
geom.applyFromWlr();
|
geom.applyFromWlr();
|
||||||
|
|
||||||
// ignore X and Y, adjust uv
|
// ignore X and Y, adjust uv
|
||||||
if (geom.x != 0 || geom.y != 0 || geom.width > pWindow->m_vRealSize.vec().x || geom.height > pWindow->m_vRealSize.vec().y) {
|
if (geom.x != 0 || geom.y != 0 || geom.width > pWindow->m_vRealSize.value().x || geom.height > pWindow->m_vRealSize.value().y) {
|
||||||
const auto XPERC = (double)geom.x / (double)pSurface->current.width;
|
const auto XPERC = (double)geom.x / (double)pSurface->current.width;
|
||||||
const auto YPERC = (double)geom.y / (double)pSurface->current.height;
|
const auto YPERC = (double)geom.y / (double)pSurface->current.height;
|
||||||
const auto WPERC = (double)(geom.x + geom.width) / (double)pSurface->current.width;
|
const auto WPERC = (double)(geom.x + geom.width) / (double)pSurface->current.width;
|
||||||
|
@ -874,7 +874,7 @@ void CHyprRenderer::calculateUVForSurface(CWindow* pWindow, wlr_surface* pSurfac
|
||||||
uvTL = uvTL + TOADDTL;
|
uvTL = uvTL + TOADDTL;
|
||||||
|
|
||||||
// TODO: make this passed to the func. Might break in the future.
|
// TODO: make this passed to the func. Might break in the future.
|
||||||
auto maxSize = pWindow->m_vRealSize.vec();
|
auto maxSize = pWindow->m_vRealSize.value();
|
||||||
|
|
||||||
if (pWindow->m_pWLSurface.small() && !pWindow->m_pWLSurface.m_bFillIgnoreSmall)
|
if (pWindow->m_pWLSurface.small() && !pWindow->m_pWLSurface.m_bFillIgnoreSmall)
|
||||||
maxSize = pWindow->m_pWLSurface.getViewporterCorrectedSize();
|
maxSize = pWindow->m_pWLSurface.getViewporterCorrectedSize();
|
||||||
|
@ -2307,8 +2307,8 @@ void CHyprRenderer::setOccludedForMainWorkspace(CRegion& region, CWorkspace* pWo
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const auto ROUNDING = w->rounding() * PMONITOR->scale;
|
const auto ROUNDING = w->rounding() * PMONITOR->scale;
|
||||||
const Vector2D POS = w->m_vRealPosition.vec() + Vector2D{ROUNDING, ROUNDING} - PMONITOR->vecPosition + (w->m_bPinned ? Vector2D{} : pWorkspace->m_vRenderOffset.vec());
|
const Vector2D POS = w->m_vRealPosition.value() + Vector2D{ROUNDING, ROUNDING} - PMONITOR->vecPosition + (w->m_bPinned ? Vector2D{} : pWorkspace->m_vRenderOffset.value());
|
||||||
const Vector2D SIZE = w->m_vRealSize.vec() - Vector2D{ROUNDING * 2, ROUNDING * 2};
|
const Vector2D SIZE = w->m_vRealSize.value() - Vector2D{ROUNDING * 2, ROUNDING * 2};
|
||||||
|
|
||||||
CBox box = {POS.x, POS.y, SIZE.x, SIZE.y};
|
CBox box = {POS.x, POS.y, SIZE.x, SIZE.y};
|
||||||
|
|
||||||
|
@ -2333,8 +2333,8 @@ void CHyprRenderer::setOccludedForBackLayers(CRegion& region, CWorkspace* pWorks
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const auto ROUNDING = w->rounding() * PMONITOR->scale;
|
const auto ROUNDING = w->rounding() * PMONITOR->scale;
|
||||||
const Vector2D POS = w->m_vRealPosition.vec() + Vector2D{ROUNDING, ROUNDING} - PMONITOR->vecPosition + (w->m_bPinned ? Vector2D{} : pWorkspace->m_vRenderOffset.vec());
|
const Vector2D POS = w->m_vRealPosition.value() + Vector2D{ROUNDING, ROUNDING} - PMONITOR->vecPosition + (w->m_bPinned ? Vector2D{} : pWorkspace->m_vRenderOffset.value());
|
||||||
const Vector2D SIZE = w->m_vRealSize.vec() - Vector2D{ROUNDING * 2, ROUNDING * 2};
|
const Vector2D SIZE = w->m_vRealSize.value() - Vector2D{ROUNDING * 2, ROUNDING * 2};
|
||||||
|
|
||||||
CBox box = {POS.x, POS.y, SIZE.x, SIZE.y};
|
CBox box = {POS.x, POS.y, SIZE.x, SIZE.y};
|
||||||
|
|
||||||
|
@ -2351,7 +2351,7 @@ bool CHyprRenderer::canSkipBackBufferClear(CMonitor* pMonitor) {
|
||||||
if (!ls->layerSurface)
|
if (!ls->layerSurface)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (ls->alpha.fl() < 1.f)
|
if (ls->alpha.value() < 1.f)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (ls->geometry.x != pMonitor->vecPosition.x || ls->geometry.y != pMonitor->vecPosition.y || ls->geometry.width != pMonitor->vecSize.x ||
|
if (ls->geometry.x != pMonitor->vecPosition.x || ls->geometry.y != pMonitor->vecPosition.y || ls->geometry.width != pMonitor->vecSize.x ||
|
||||||
|
@ -2381,7 +2381,7 @@ void CHyprRenderer::recheckSolitaryForMonitor(CMonitor* pMonitor) {
|
||||||
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(pMonitor->activeWorkspace);
|
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(pMonitor->activeWorkspace);
|
||||||
|
|
||||||
if (!PWORKSPACE || !PWORKSPACE->m_bHasFullscreenWindow || g_pInputManager->m_sDrag.drag || g_pCompositor->m_sSeat.exclusiveClient || pMonitor->specialWorkspaceID ||
|
if (!PWORKSPACE || !PWORKSPACE->m_bHasFullscreenWindow || g_pInputManager->m_sDrag.drag || g_pCompositor->m_sSeat.exclusiveClient || pMonitor->specialWorkspaceID ||
|
||||||
PWORKSPACE->m_fAlpha.fl() != 1.f || PWORKSPACE->m_vRenderOffset.vec() != Vector2D{})
|
PWORKSPACE->m_fAlpha.value() != 1.f || PWORKSPACE->m_vRenderOffset.value() != Vector2D{})
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const auto PCANDIDATE = g_pCompositor->getFullscreenWindowOnWorkspace(PWORKSPACE->m_iID);
|
const auto PCANDIDATE = g_pCompositor->getFullscreenWindowOnWorkspace(PWORKSPACE->m_iID);
|
||||||
|
@ -2392,7 +2392,7 @@ void CHyprRenderer::recheckSolitaryForMonitor(CMonitor* pMonitor) {
|
||||||
if (!PCANDIDATE->opaque())
|
if (!PCANDIDATE->opaque())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (PCANDIDATE->m_vRealSize.vec() != pMonitor->vecSize || PCANDIDATE->m_vRealPosition.vec() != pMonitor->vecPosition || PCANDIDATE->m_vRealPosition.isBeingAnimated() ||
|
if (PCANDIDATE->m_vRealSize.value() != pMonitor->vecSize || PCANDIDATE->m_vRealPosition.value() != pMonitor->vecPosition || PCANDIDATE->m_vRealPosition.isBeingAnimated() ||
|
||||||
PCANDIDATE->m_vRealSize.isBeingAnimated())
|
PCANDIDATE->m_vRealSize.isBeingAnimated())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -2400,7 +2400,7 @@ void CHyprRenderer::recheckSolitaryForMonitor(CMonitor* pMonitor) {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (auto& topls : pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]) {
|
for (auto& topls : pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]) {
|
||||||
if (topls->alpha.fl() != 0.f)
|
if (topls->alpha.value() != 0.f)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ CBox CHyprBorderDecoration::assignedBoxGlobal() {
|
||||||
if (!PWORKSPACE)
|
if (!PWORKSPACE)
|
||||||
return box;
|
return box;
|
||||||
|
|
||||||
const auto WORKSPACEOFFSET = PWORKSPACE && !m_pWindow->m_bPinned ? PWORKSPACE->m_vRenderOffset.vec() : Vector2D();
|
const auto WORKSPACEOFFSET = PWORKSPACE && !m_pWindow->m_bPinned ? PWORKSPACE->m_vRenderOffset.value() : Vector2D();
|
||||||
return box.translate(WORKSPACEOFFSET);
|
return box.translate(WORKSPACEOFFSET);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,10 +58,10 @@ void CHyprBorderDecoration::draw(CMonitor* pMonitor, float a, const Vector2D& of
|
||||||
|
|
||||||
auto grad = m_pWindow->m_cRealBorderColor;
|
auto grad = m_pWindow->m_cRealBorderColor;
|
||||||
const bool ANIMATED = m_pWindow->m_fBorderFadeAnimationProgress.isBeingAnimated();
|
const bool ANIMATED = m_pWindow->m_fBorderFadeAnimationProgress.isBeingAnimated();
|
||||||
float a1 = a * (ANIMATED ? m_pWindow->m_fBorderFadeAnimationProgress.fl() : 1.f);
|
float a1 = a * (ANIMATED ? m_pWindow->m_fBorderFadeAnimationProgress.value() : 1.f);
|
||||||
|
|
||||||
if (m_pWindow->m_fBorderAngleAnimationProgress.getConfig()->pValues->internalEnabled) {
|
if (m_pWindow->m_fBorderAngleAnimationProgress.getConfig()->pValues->internalEnabled) {
|
||||||
grad.m_fAngle += m_pWindow->m_fBorderAngleAnimationProgress.fl() * M_PI * 2;
|
grad.m_fAngle += m_pWindow->m_fBorderAngleAnimationProgress.value() * M_PI * 2;
|
||||||
grad.m_fAngle = normalizeAngleRad(grad.m_fAngle);
|
grad.m_fAngle = normalizeAngleRad(grad.m_fAngle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ void CHyprBorderDecoration::draw(CMonitor* pMonitor, float a, const Vector2D& of
|
||||||
g_pHyprOpenGL->renderBorder(&windowBox, grad, ROUNDING, borderSize, a1);
|
g_pHyprOpenGL->renderBorder(&windowBox, grad, ROUNDING, borderSize, a1);
|
||||||
|
|
||||||
if (ANIMATED) {
|
if (ANIMATED) {
|
||||||
float a2 = a * (1.f - m_pWindow->m_fBorderFadeAnimationProgress.fl());
|
float a2 = a * (1.f - m_pWindow->m_fBorderFadeAnimationProgress.value());
|
||||||
g_pHyprOpenGL->renderBorder(&windowBox, m_pWindow->m_cRealBorderColorPrevious, ROUNDING, borderSize, a2);
|
g_pHyprOpenGL->renderBorder(&windowBox, m_pWindow->m_cRealBorderColorPrevious, ROUNDING, borderSize, a2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,8 +46,8 @@ void CHyprDropShadowDecoration::damageEntire() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHyprDropShadowDecoration::updateWindow(CWindow* pWindow) {
|
void CHyprDropShadowDecoration::updateWindow(CWindow* pWindow) {
|
||||||
m_vLastWindowPos = m_pWindow->m_vRealPosition.vec();
|
m_vLastWindowPos = m_pWindow->m_vRealPosition.value();
|
||||||
m_vLastWindowSize = m_pWindow->m_vRealSize.vec();
|
m_vLastWindowSize = m_pWindow->m_vRealSize.value();
|
||||||
|
|
||||||
m_bLastWindowBox = {m_vLastWindowPos.x, m_vLastWindowPos.y, m_vLastWindowSize.x, m_vLastWindowSize.y};
|
m_bLastWindowBox = {m_vLastWindowPos.x, m_vLastWindowPos.y, m_vLastWindowSize.x, m_vLastWindowSize.y};
|
||||||
m_bLastWindowBoxWithDecos = g_pDecorationPositioner->getBoxWithIncludedDecos(pWindow);
|
m_bLastWindowBoxWithDecos = g_pDecorationPositioner->getBoxWithIncludedDecos(pWindow);
|
||||||
|
@ -58,7 +58,7 @@ void CHyprDropShadowDecoration::draw(CMonitor* pMonitor, float a, const Vector2D
|
||||||
if (!g_pCompositor->windowValidMapped(m_pWindow))
|
if (!g_pCompositor->windowValidMapped(m_pWindow))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (m_pWindow->m_cRealShadowColor.col() == CColor(0, 0, 0, 0))
|
if (m_pWindow->m_cRealShadowColor.value() == CColor(0, 0, 0, 0))
|
||||||
return; // don't draw invisible shadows
|
return; // don't draw invisible shadows
|
||||||
|
|
||||||
if (!m_pWindow->m_sSpecialRenderData.decorate)
|
if (!m_pWindow->m_sSpecialRenderData.decorate)
|
||||||
|
@ -82,7 +82,7 @@ void CHyprDropShadowDecoration::draw(CMonitor* pMonitor, float a, const Vector2D
|
||||||
const auto ROUNDINGBASE = m_pWindow->rounding();
|
const auto ROUNDINGBASE = m_pWindow->rounding();
|
||||||
const auto ROUNDING = ROUNDINGBASE > 0 ? ROUNDINGBASE + m_pWindow->getRealBorderSize() : 0;
|
const auto ROUNDING = ROUNDINGBASE > 0 ? ROUNDINGBASE + m_pWindow->getRealBorderSize() : 0;
|
||||||
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(m_pWindow->m_iWorkspaceID);
|
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(m_pWindow->m_iWorkspaceID);
|
||||||
const auto WORKSPACEOFFSET = PWORKSPACE && !m_pWindow->m_bPinned ? PWORKSPACE->m_vRenderOffset.vec() : Vector2D();
|
const auto WORKSPACEOFFSET = PWORKSPACE && !m_pWindow->m_bPinned ? PWORKSPACE->m_vRenderOffset.value() : Vector2D();
|
||||||
|
|
||||||
// draw the shadow
|
// draw the shadow
|
||||||
CBox fullBox = m_bLastWindowBoxWithDecos;
|
CBox fullBox = m_bLastWindowBoxWithDecos;
|
||||||
|
@ -147,7 +147,7 @@ void CHyprDropShadowDecoration::draw(CMonitor* pMonitor, float a, const Vector2D
|
||||||
g_pHyprOpenGL->renderRect(&fullBox, CColor(0, 0, 0, 1), 0);
|
g_pHyprOpenGL->renderRect(&fullBox, CColor(0, 0, 0, 1), 0);
|
||||||
|
|
||||||
// render white shadow with the alpha of the shadow color (otherwise we clear with alpha later and shit it to 2 bit)
|
// render white shadow with the alpha of the shadow color (otherwise we clear with alpha later and shit it to 2 bit)
|
||||||
g_pHyprOpenGL->renderRoundedShadow(&fullBox, ROUNDING * pMonitor->scale, **PSHADOWSIZE * pMonitor->scale, CColor(1, 1, 1, m_pWindow->m_cRealShadowColor.col().a), a);
|
g_pHyprOpenGL->renderRoundedShadow(&fullBox, ROUNDING * pMonitor->scale, **PSHADOWSIZE * pMonitor->scale, CColor(1, 1, 1, m_pWindow->m_cRealShadowColor.value().a), a);
|
||||||
|
|
||||||
// render black window box ("clip")
|
// render black window box ("clip")
|
||||||
g_pHyprOpenGL->renderRect(&windowBox, CColor(0, 0, 0, 1.0), ROUNDING * pMonitor->scale);
|
g_pHyprOpenGL->renderRect(&windowBox, CColor(0, 0, 0, 1.0), ROUNDING * pMonitor->scale);
|
||||||
|
@ -155,7 +155,7 @@ void CHyprDropShadowDecoration::draw(CMonitor* pMonitor, float a, const Vector2D
|
||||||
alphaSwapFB.bind();
|
alphaSwapFB.bind();
|
||||||
|
|
||||||
// alpha swap just has the shadow color. It will be the "texture" to render.
|
// alpha swap just has the shadow color. It will be the "texture" to render.
|
||||||
g_pHyprOpenGL->renderRect(&fullBox, m_pWindow->m_cRealShadowColor.col().stripA(), 0);
|
g_pHyprOpenGL->renderRect(&fullBox, m_pWindow->m_cRealShadowColor.value().stripA(), 0);
|
||||||
|
|
||||||
LASTFB->bind();
|
LASTFB->bind();
|
||||||
|
|
||||||
|
@ -166,7 +166,7 @@ void CHyprDropShadowDecoration::draw(CMonitor* pMonitor, float a, const Vector2D
|
||||||
|
|
||||||
g_pHyprOpenGL->m_RenderData.damage = saveDamage;
|
g_pHyprOpenGL->m_RenderData.damage = saveDamage;
|
||||||
} else {
|
} else {
|
||||||
g_pHyprOpenGL->renderRoundedShadow(&fullBox, ROUNDING * pMonitor->scale, **PSHADOWSIZE * pMonitor->scale, m_pWindow->m_cRealShadowColor.col(), a);
|
g_pHyprOpenGL->renderRoundedShadow(&fullBox, ROUNDING * pMonitor->scale, **PSHADOWSIZE * pMonitor->scale, m_pWindow->m_cRealShadowColor.value(), a);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_seExtents != m_seReportedExtents)
|
if (m_seExtents != m_seReportedExtents)
|
||||||
|
|
|
@ -504,6 +504,6 @@ CBox CHyprGroupBarDecoration::assignedBoxGlobal() {
|
||||||
if (!PWORKSPACE)
|
if (!PWORKSPACE)
|
||||||
return box;
|
return box;
|
||||||
|
|
||||||
const auto WORKSPACEOFFSET = PWORKSPACE && !m_pWindow->m_bPinned ? PWORKSPACE->m_vRenderOffset.vec() : Vector2D();
|
const auto WORKSPACEOFFSET = PWORKSPACE && !m_pWindow->m_bPinned ? PWORKSPACE->m_vRenderOffset.value() : Vector2D();
|
||||||
return box.translate(WORKSPACEOFFSET);
|
return box.translate(WORKSPACEOFFSET);
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,7 +124,7 @@ void CDecorationPositioner::onWindowUpdate(CWindow* pWindow) {
|
||||||
datas.push_back(getDataFor(wd.get(), pWindow));
|
datas.push_back(getDataFor(wd.get(), pWindow));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (WINDOWDATA->lastWindowSize == pWindow->m_vRealSize.vec() /* position not changed */
|
if (WINDOWDATA->lastWindowSize == pWindow->m_vRealSize.value() /* position not changed */
|
||||||
&&
|
&&
|
||||||
std::all_of(m_vWindowPositioningDatas.begin(), m_vWindowPositioningDatas.end(), [pWindow](const auto& data) { return pWindow != data->pWindow || !data->needsReposition; })
|
std::all_of(m_vWindowPositioningDatas.begin(), m_vWindowPositioningDatas.end(), [pWindow](const auto& data) { return pWindow != data->pWindow || !data->needsReposition; })
|
||||||
/* all window datas are either not for this window or don't need a reposition */
|
/* all window datas are either not for this window or don't need a reposition */
|
||||||
|
@ -132,7 +132,7 @@ void CDecorationPositioner::onWindowUpdate(CWindow* pWindow) {
|
||||||
)
|
)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
WINDOWDATA->lastWindowSize = pWindow->m_vRealSize.vec();
|
WINDOWDATA->lastWindowSize = pWindow->m_vRealSize.value();
|
||||||
WINDOWDATA->needsRecalc = false;
|
WINDOWDATA->needsRecalc = false;
|
||||||
const bool EPHEMERAL = pWindow->m_vRealSize.isBeingAnimated();
|
const bool EPHEMERAL = pWindow->m_vRealSize.isBeingAnimated();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue