summaryrefslogtreecommitdiff
path: root/src/layout
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-08-03 12:27:20 +0200
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-08-03 12:27:20 +0200
commitf36cd350ccb21260def0c02cb9de803a85c4b4b8 (patch)
treeb7afb67b6af994e817fa35823b3e7f3d1bc6a7d0 /src/layout
parentc779a7c03bef72aff78c14a29f5ba106de50b8d6 (diff)
do not animate mouse resizes in layouts
Diffstat (limited to 'src/layout')
-rw-r--r--src/layout/DwindleLayout.cpp23
-rw-r--r--src/layout/DwindleLayout.hpp4
-rw-r--r--src/layout/MasterLayout.cpp9
-rw-r--r--src/layout/MasterLayout.hpp2
4 files changed, 27 insertions, 11 deletions
diff --git a/src/layout/DwindleLayout.cpp b/src/layout/DwindleLayout.cpp
index be1c23d8..42f77760 100644
--- a/src/layout/DwindleLayout.cpp
+++ b/src/layout/DwindleLayout.cpp
@@ -1,7 +1,7 @@
#include "DwindleLayout.hpp"
#include "../Compositor.hpp"
-void SDwindleNodeData::recalcSizePosRecursive() {
+void SDwindleNodeData::recalcSizePosRecursive(bool force) {
// check the group, if we are in one and not active, ignore.
if (pGroupParent && pGroupParent->groupMembers[pGroupParent->groupMemberActive] != this) {
@@ -47,7 +47,7 @@ void SDwindleNodeData::recalcSizePosRecursive() {
children[0]->recalcSizePosRecursive();
children[1]->recalcSizePosRecursive();
} else {
- layout->applyNodeDataToWindow(this);
+ layout->applyNodeDataToWindow(this, force);
}
}
@@ -94,7 +94,7 @@ SDwindleNodeData* CHyprDwindleLayout::getMasterNodeOnWorkspace(const int& id) {
return nullptr;
}
-void CHyprDwindleLayout::applyNodeDataToWindow(SDwindleNodeData* pNode) {
+void CHyprDwindleLayout::applyNodeDataToWindow(SDwindleNodeData* pNode, bool force) {
// Don't set nodes, only windows.
if (pNode->isNode)
return;
@@ -203,6 +203,11 @@ void CHyprDwindleLayout::applyNodeDataToWindow(SDwindleNodeData* pNode) {
g_pXWaylandManager->setWindowSize(PWINDOW, calcSize);
}
+ if (force) {
+ PWINDOW->m_vRealPosition.warp();
+ PWINDOW->m_vRealSize.warp();
+ }
+
PWINDOW->updateWindowDecos();
}
@@ -504,11 +509,11 @@ void CHyprDwindleLayout::resizeActiveWindow(const Vector2D& pixResize, CWindow*
if (PARENTSIDEBYSIDE) {
allowedMovement.x *= 2.f / PPARENT->size.x;
PPARENT->splitRatio = std::clamp(PPARENT->splitRatio + allowedMovement.x, (double)0.1f, (double)1.9f);
- PPARENT->recalcSizePosRecursive();
+ PPARENT->recalcSizePosRecursive(true);
} else {
allowedMovement.y *= 2.f / PPARENT->size.y;
PPARENT->splitRatio = std::clamp(PPARENT->splitRatio + allowedMovement.y, (double)0.1f, (double)1.9f);
- PPARENT->recalcSizePosRecursive();
+ PPARENT->recalcSizePosRecursive(true);
}
return;
@@ -523,11 +528,11 @@ void CHyprDwindleLayout::resizeActiveWindow(const Vector2D& pixResize, CWindow*
if (PARENTSIDEBYSIDE) {
allowedMovement.x *= 2.f / PPARENT->size.x;
PPARENT->splitRatio = std::clamp(PPARENT->splitRatio + allowedMovement.x, (double)0.1f, (double)1.9f);
- PPARENT->recalcSizePosRecursive();
+ PPARENT->recalcSizePosRecursive(true);
} else {
allowedMovement.y *= 2.f / PPARENT->size.y;
PPARENT->splitRatio = std::clamp(PPARENT->splitRatio + allowedMovement.y, (double)0.1f, (double)1.9f);
- PPARENT->recalcSizePosRecursive();
+ PPARENT->recalcSizePosRecursive(true);
}
return;
@@ -542,8 +547,8 @@ void CHyprDwindleLayout::resizeActiveWindow(const Vector2D& pixResize, CWindow*
SIDECONTAINER->splitRatio = std::clamp(SIDECONTAINER->splitRatio + allowedMovement.x, (double)0.1f, (double)1.9f);
TOPCONTAINER->splitRatio = std::clamp(TOPCONTAINER->splitRatio + allowedMovement.y, (double)0.1f, (double)1.9f);
- SIDECONTAINER->recalcSizePosRecursive();
- TOPCONTAINER->recalcSizePosRecursive();
+ SIDECONTAINER->recalcSizePosRecursive(true);
+ TOPCONTAINER->recalcSizePosRecursive(true);
}
void CHyprDwindleLayout::fullscreenRequestForWindow(CWindow* pWindow, eFullscreenMode fullscreenMode, bool on) {
diff --git a/src/layout/DwindleLayout.hpp b/src/layout/DwindleLayout.hpp
index 1dceb0c5..3392efb2 100644
--- a/src/layout/DwindleLayout.hpp
+++ b/src/layout/DwindleLayout.hpp
@@ -37,7 +37,7 @@ struct SDwindleNodeData {
return pWindow == rhs.pWindow && workspaceID == rhs.workspaceID && position == rhs.position && size == rhs.size && pParent == rhs.pParent && children[0] == rhs.children[0] && children[1] == rhs.children[1];
}
- void recalcSizePosRecursive();
+ void recalcSizePosRecursive(bool force = false);
void getAllChildrenRecursive(std::deque<SDwindleNodeData*>*);
CHyprDwindleLayout* layout = nullptr;
};
@@ -65,7 +65,7 @@ private:
std::list<SDwindleNodeData> m_lDwindleNodesData;
int getNodesOnWorkspace(const int&);
- void applyNodeDataToWindow(SDwindleNodeData*);
+ void applyNodeDataToWindow(SDwindleNodeData*, bool force = false);
SDwindleNodeData* getNodeFromWindow(CWindow*);
SDwindleNodeData* getFirstNodeOnWorkspace(const int&);
SDwindleNodeData* getMasterNodeOnWorkspace(const int&);
diff --git a/src/layout/MasterLayout.cpp b/src/layout/MasterLayout.cpp
index edff28d0..5199f76f 100644
--- a/src/layout/MasterLayout.cpp
+++ b/src/layout/MasterLayout.cpp
@@ -250,6 +250,11 @@ void CHyprMasterLayout::applyNodeDataToWindow(SMasterNodeData* pNode) {
g_pXWaylandManager->setWindowSize(PWINDOW, calcSize);
}
+ if (m_bForceWarps) {
+ PWINDOW->m_vRealPosition.warp();
+ PWINDOW->m_vRealSize.warp();
+ }
+
PWINDOW->updateWindowDecos();
}
@@ -278,6 +283,8 @@ void CHyprMasterLayout::resizeActiveWindow(const Vector2D& pixResize, CWindow* p
if (getNodesOnWorkspace(PWINDOW->m_iWorkspaceID) < 2)
return;
+ m_bForceWarps = true;
+
float delta = pixResize.x / PMONITOR->vecSize.x;
PMASTER->percMaster += delta;
@@ -285,6 +292,8 @@ void CHyprMasterLayout::resizeActiveWindow(const Vector2D& pixResize, CWindow* p
std::clamp(PMASTER->percMaster, 0.05f, 0.95f);
recalculateMonitor(PMONITOR->ID);
+
+ m_bForceWarps = false;
}
void CHyprMasterLayout::fullscreenRequestForWindow(CWindow* pWindow, eFullscreenMode fullscreenMode, bool on) {
diff --git a/src/layout/MasterLayout.hpp b/src/layout/MasterLayout.hpp
index 318f8940..f7f40ea4 100644
--- a/src/layout/MasterLayout.hpp
+++ b/src/layout/MasterLayout.hpp
@@ -44,6 +44,8 @@ private:
std::list<SMasterNodeData> m_lMasterNodesData;
+ bool m_bForceWarps = false;
+
int getNodesOnWorkspace(const int&);
void applyNodeDataToWindow(SMasterNodeData*);
SMasterNodeData* getNodeFromWindow(CWindow*);