diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2023-02-12 22:24:47 +0000 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2023-02-12 22:24:47 +0000 |
| commit | 6b7e409f05536e45baa3dabeab0df77d05c9a96f (patch) | |
| tree | d3afbb84678d19f3bcd7e63068a619495a4d7754 /src/layout/IHyprLayout.cpp | |
| parent | 79ad93d5366e3213abbf32394cc284855e39ba40 (diff) | |
properly clamp size in dragging floating corners
Diffstat (limited to 'src/layout/IHyprLayout.cpp')
| -rw-r--r-- | src/layout/IHyprLayout.cpp | 34 |
1 files changed, 15 insertions, 19 deletions
diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp index 23a10a26..888c159c 100644 --- a/src/layout/IHyprLayout.cpp +++ b/src/layout/IHyprLayout.cpp @@ -174,17 +174,15 @@ void IHyprLayout::onBeginDragWindow() { // get the grab corner if (m_vBeginDragXY.x < m_vBeginDragPositionXY.x + m_vBeginDragSizeXY.x / 2.0) { - // left if (m_vBeginDragXY.y < m_vBeginDragPositionXY.y + m_vBeginDragSizeXY.y / 2.0) - m_iGrabbedCorner = 0; + m_eGrabbedCorner = CORNER_TOPLEFT; else - m_iGrabbedCorner = 4; + m_eGrabbedCorner = CORNER_BOTTOMLEFT; } else { - // right if (m_vBeginDragXY.y < m_vBeginDragPositionXY.y + m_vBeginDragSizeXY.y / 2.0) - m_iGrabbedCorner = 1; + m_eGrabbedCorner = CORNER_TOPRIGHT; else - m_iGrabbedCorner = 3; + m_eGrabbedCorner = CORNER_BOTTOMRIGHT; } g_pInputManager->setCursorImageUntilUnset("grab"); @@ -258,21 +256,19 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) { Vector2D newSize = m_vBeginDragSizeXY; Vector2D newPos = m_vBeginDragPositionXY; - if (m_iGrabbedCorner == 3) { - newSize = newSize + DELTA; - } else if (m_iGrabbedCorner == 0) { - newSize = newSize - DELTA; - newPos = newPos + DELTA; - } else if (m_iGrabbedCorner == 1) { - newSize = newSize + Vector2D(DELTA.x, -DELTA.y); - newPos = newPos + Vector2D(0, DELTA.y); - } else if (m_iGrabbedCorner == 4) { - newSize = newSize + Vector2D(-DELTA.x, DELTA.y); - newPos = newPos + Vector2D(DELTA.x, 0); + if (m_eGrabbedCorner == CORNER_BOTTOMRIGHT) { + newSize = (newSize + DELTA).clamp(Vector2D(20, 20), MAXSIZE); + } else if (m_eGrabbedCorner == CORNER_TOPLEFT) { + newSize = (newSize - DELTA).clamp(Vector2D(20, 20), MAXSIZE); + newPos = newPos - newSize + m_vBeginDragSizeXY; + } else if (m_eGrabbedCorner == CORNER_TOPRIGHT) { + newSize = (newSize + Vector2D(DELTA.x, -DELTA.y)).clamp(Vector2D(20, 20), MAXSIZE); + newPos = newPos + Vector2D(0, (m_vBeginDragSizeXY - newSize).y); + } else if (m_eGrabbedCorner == CORNER_BOTTOMLEFT) { + newSize = (newSize + Vector2D(-DELTA.x, DELTA.y)).clamp(Vector2D(20, 20), MAXSIZE); + newPos = newPos + Vector2D((m_vBeginDragSizeXY - newSize).x, 0); } - newSize = newSize.clamp(Vector2D(20, 20), MAXSIZE); - if (*PANIMATE) { DRAGGINGWINDOW->m_vRealSize = newSize; DRAGGINGWINDOW->m_vRealPosition = newPos; |
