|
4 | 4 | #include "../../helpers/Color.hpp" |
5 | 5 | #include "../../config/ConfigDataValues.hpp" |
6 | 6 | #include "../../config/LoginSessionManager.hpp" |
| 7 | +#include "../../core/Seat.hpp" |
| 8 | +#include "../../core/hyprlock.hpp" |
7 | 9 | #include <algorithm> |
8 | 10 | #include <hyprlang.hpp> |
9 | 11 | #include <hyprutils/math/Vector2D.hpp> |
@@ -44,21 +46,21 @@ bool CSessionPicker::draw(const SRenderData& data) { |
44 | 46 |
|
45 | 47 | const double PAD = std::abs((m_size.y - m_biggestEntryAssetSize.y) / 2); |
46 | 48 | const Vector2D SIZE{std::max(m_size.x, m_biggestEntryAssetSize.x + PAD), m_size.y}; |
47 | | - const CBox RECTBOX{ |
| 49 | + m_box = CBox{ |
48 | 50 | posFromHVAlign(m_viewport, SIZE, m_configPos, m_halign, m_valign), |
49 | 51 | SIZE, |
50 | 52 | }; |
51 | 53 |
|
52 | | - const auto ENTRYHEIGHT = RECTBOX.h / (m_loginSessions.size() + 1); |
53 | | - const auto TOPLEFT = RECTBOX.pos() + Vector2D{0.0, RECTBOX.h}; |
| 54 | + const auto ENTRYHEIGHT = m_box.h / (m_loginSessions.size() + 1); |
| 55 | + const auto TOPLEFT = m_box.pos() + Vector2D{0.0, m_box.h}; |
54 | 56 |
|
55 | 57 | for (size_t i = 0; i < m_loginSessions.size(); ++i) { |
56 | 58 | auto& sessionEntry = m_loginSessions[i]; |
57 | 59 |
|
58 | 60 | const CBox ENTRYBOX{ |
59 | 61 | TOPLEFT.x, |
60 | 62 | TOPLEFT.y - ENTRYHEIGHT - (i * (ENTRYHEIGHT + m_entrySpacing)), |
61 | | - RECTBOX.w, |
| 63 | + m_box.w, |
62 | 64 | ENTRYHEIGHT, |
63 | 65 | }; |
64 | 66 |
|
@@ -121,3 +123,23 @@ void CSessionPicker::setupSessionEntryTexts() { |
121 | 123 | }; |
122 | 124 | }; |
123 | 125 | } |
| 126 | + |
| 127 | +CBox CSessionPicker::getBoundingBoxWl() const { |
| 128 | + return { |
| 129 | + Vector2D{m_box.pos().x, m_viewport.y - m_box.pos().y - m_box.size().y}, |
| 130 | + m_box.size(), |
| 131 | + }; |
| 132 | +} |
| 133 | + |
| 134 | +void CSessionPicker::onClick(uint32_t button, bool down, const Vector2D& pos) { |
| 135 | + const auto DIFFERENTIAL = pos.y - (m_viewport.y - m_box.pos().y - m_box.size().y); |
| 136 | + const auto HEIGHTPERENTRY = m_box.size().y / m_loginSessions.size(); |
| 137 | + const size_t SELECTEDENTRY = std::floor(DIFFERENTIAL / HEIGHTPERENTRY); |
| 138 | + g_pLoginSessionManager->selectSession(SELECTEDENTRY); |
| 139 | + Debug::log(LOG, "clicked on entry: DIFF {} H/E {} SEL {}", DIFFERENTIAL, HEIGHTPERENTRY, SELECTEDENTRY); |
| 140 | + g_pHyprlock->renderAllOutputs(); |
| 141 | +} |
| 142 | + |
| 143 | +void CSessionPicker::onHover(const Vector2D& pos) { |
| 144 | + g_pSeatManager->m_pCursorShape->setShape(WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_TEXT); |
| 145 | +} |
0 commit comments