be3bd8c535d6c9dd292f84691e0a7df514f6e25e

Author
outfoxxed <outfoxxed@outfoxxed.me>
Committer
outfoxxed <outfoxxed@outfoxxed.me>
Date

Message

Window resizing

Lots of code duplication that needs cleaning

Diff

This diff is truncated to protect this page.

  1diff --git a/src/Hy3Layout.cpp b/src/Hy3Layout.cpp
  2index 6cbd06e5a61dddc8bba4e910da886f29b0c6fd8d..967acd5b5381045ff6fecc5fd359e7d872919b60 100644
  3--- a/src/Hy3Layout.cpp
  4+++ b/src/Hy3Layout.cpp
  5@@ -150,7 +150,7 @@ void Hy3Node::recalcSizePosRecursive(bool force) {
  6 			break;
  7 		}
  8 
  9-		child->recalcSizePosRecursive();
 10+		child->recalcSizePosRecursive(force);
 11 		return;
 12 	}
 13 
 14@@ -166,20 +166,22 @@ void Hy3Node::recalcSizePosRecursive(bool force) {
 15 		break;
 16 	}
 17 
 18+	double ratio_mul = group->layout != Hy3GroupLayout::Tabbed ? group->children.empty() ? 0 : constraint / group->children.size() : 0;
 19+
 20 	double offset = 0;
 21 
 22 	for(auto child: group->children) {
 23 		switch (group->layout) {
 24 		case Hy3GroupLayout::SplitH:
 25 			child->position.x = this->position.x + offset;
 26-			child->size.x = child->size_ratio * ((double) constraint / group->children.size());
 27+			child->size.x = child->size_ratio * ratio_mul;
 28 			offset += child->size.x;
 29 			child->position.y = this->position.y;
 30 			child->size.y = this->size.y;
 31 			break;
 32 		case Hy3GroupLayout::SplitV:
 33 			child->position.y = this->position.y + offset;
 34-			child->size.y = child->size_ratio * ((double) constraint / group->children.size());
 35+			child->size.y = child->size_ratio * ratio_mul;
 36 			offset += child->size.y;
 37 			child->position.x = this->position.x;
 38 			child->size.x = this->size.x;
 39@@ -349,7 +351,7 @@ void Hy3Layout::applyNodeDataToWindow(Hy3Node* node, bool force) {
 40 			g_pHyprRenderer->damageWindow(window);
 41 
 42 			window->m_vRealPosition.warp();
 43-			window->m_vRealPosition.warp();
 44+			window->m_vRealSize.warp();
 45 
 46 			g_pHyprRenderer->damageWindow(window);
 47 		}
 48@@ -466,6 +468,12 @@ void Hy3Layout::onWindowRemovedTiling(CWindow* window) {
 49 	}
 50 
 51 	group->children.remove(node);
 52+
 53+	auto splitmod = group->children.empty() ? 0.0 : (1.0 - node->size_ratio) / group->children.size();
 54+	for (auto child: group->children) {
 55+		child->size_ratio -= splitmod;
 56+	}
 57+
 58 	this->nodes.remove(*node);
 59 
 60 	if (group->children.size() == 1) {
 61@@ -487,6 +495,12 @@ void Hy3Layout::onWindowRemovedTiling(CWindow* window) {
 62 		}
 63 
 64 		group->children.remove(child);
 65+
 66+		auto splitmod = group->children.empty() ? 0.0 : (1.0 - child->size_ratio) / group->children.size();
 67+		for (auto child: group->children) {
 68+				child->size_ratio -= splitmod;
 69+		}
 70+
 71 		this->nodes.remove(*child);
 72 
 73 		if (group->children.size() == 1) {
 74@@ -570,8 +584,203 @@ void Hy3Layout::recalculateWindow(CWindow* pWindow) {
 75     ; // empty
 76 }
 77 
 78+void Hy3Layout::onBeginDragWindow() {
 79+	this->drag_flags.started = false;
 80+	IHyprLayout::onBeginDragWindow();
 81+}
 82+
 83 void Hy3Layout::resizeActiveWindow(const Vector2D& delta, CWindow* pWindow) {
 84-    ; // empty
 85+	auto window = pWindow ? pWindow : g_pCompositor->m_pLastWindow;
 86+	if (!g_pCompositor->windowValidMapped(window)) return;
 87+
 88+	auto* node = this->getNodeFromWindow(window);
 89+	if (node == nullptr) return;
 90+
 91+	if (!this->drag_flags.started) {
 92+		auto mouse = g_pInputManager->getMouseCoordsInternal();
 93+		auto mouseOffset = mouse - window->m_vPosition;
 94+
 95+		this->drag_flags = {
 96+			.started = true,
 97+			.xExtent = mouseOffset.x > window->m_vSize.x / 2,
 98+			.yExtent = mouseOffset.y > window->m_vSize.y / 2,
 99+		};
100+
101+		Debug::log(LOG, "Positive offsets - x: %d, y: %d", this->drag_flags.xExtent, this->drag_flags.yExtent);
102+	}
103+
104+	const auto animate = &g_pConfigManager->getConfigValuePtr("misc:animate_manual_resizes")->intValue;
105diff --git a/src/Hy3Layout.hpp b/src/Hy3Layout.hpp
106index bbc5c33f2ff9e48487903c03f6bec91f198a69c4..c33c97c5e88b21848293cfd9303796851df4f370 100644
107--- a/src/Hy3Layout.hpp
108+++ b/src/Hy3Layout.hpp
109@@ -86,6 +86,7 @@ public:
110 	virtual bool isWindowTiled(CWindow*);
111 	virtual void recalculateMonitor(const int&);
112 	virtual void recalculateWindow(CWindow*);
113+	virtual void onBeginDragWindow();
114 	virtual void resizeActiveWindow(const Vector2D&, CWindow* pWindow = nullptr);
115 	virtual void fullscreenRequestForWindow(CWindow*, eFullscreenMode, bool);
116 	virtual std::any layoutMessage(SLayoutMessageHeader, std::string);
117@@ -107,6 +108,12 @@ public:
118 private:
119 	CWindow* lastActiveWindow = nullptr;
120 
121+	struct {
122+		bool started = false;
123+		bool xExtent = false;
124+		bool yExtent = false;
125+	} drag_flags;
126+
127 	int getWorkspaceNodeCount(const int&);
128 	Hy3Node* getNodeFromWindow(CWindow*);
129 	Hy3Node* getWorkspaceRootGroup(const int&);