|
@@ -13,6 +13,24 @@
|
|
|
|
|
|
|
|
using namespace WallpaperEngine::Input::Drivers;
|
|
using namespace WallpaperEngine::Input::Drivers;
|
|
|
|
|
|
|
|
|
|
+namespace {
|
|
|
|
|
+const WallpaperEngine::Render::Drivers::Output::WaylandOutputViewport* getActiveViewport (
|
|
|
|
|
+ const WallpaperEngine::Render::Drivers::WaylandOpenGLDriver& driver
|
|
|
|
|
+) {
|
|
|
|
|
+ if (driver.viewportInFocus && driver.viewportInFocus->rendering) {
|
|
|
|
|
+ return driver.viewportInFocus;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ for (const auto* viewport : driver.m_screens) {
|
|
|
|
|
+ if (viewport && viewport->rendering) {
|
|
|
|
|
+ return viewport;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return nullptr;
|
|
|
|
|
+}
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
WaylandMouseInput::WaylandMouseInput (const WallpaperEngine::Render::Drivers::WaylandOpenGLDriver& driver) :
|
|
WaylandMouseInput::WaylandMouseInput (const WallpaperEngine::Render::Drivers::WaylandOpenGLDriver& driver) :
|
|
|
m_waylandDriver (driver) { }
|
|
m_waylandDriver (driver) { }
|
|
|
|
|
|
|
@@ -62,16 +80,29 @@ glm::dvec2 WaylandMouseInput::position () const {
|
|
|
return { 0, 0 };
|
|
return { 0, 0 };
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if (m_waylandDriver.viewportInFocus && m_waylandDriver.viewportInFocus->rendering) {
|
|
|
|
|
- return m_waylandDriver.viewportInFocus->mousePos;
|
|
|
|
|
|
|
+ const auto* viewport = getActiveViewport (m_waylandDriver);
|
|
|
|
|
+ if (!viewport) {
|
|
|
|
|
+ return { 0, 0 };
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (viewport == m_waylandDriver.viewportInFocus) {
|
|
|
|
|
+ return viewport->mousePos;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- return this->m_pos;
|
|
|
|
|
|
|
+ if (viewport->mousePos.x != 0 || viewport->mousePos.y != 0) {
|
|
|
|
|
+ return viewport->mousePos;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return {
|
|
|
|
|
+ static_cast<double> (viewport->size.x * viewport->scale) / 2.0,
|
|
|
|
|
+ static_cast<double> (viewport->size.y * viewport->scale) / 2.0,
|
|
|
|
|
+ };
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
WallpaperEngine::Input::MouseClickStatus WaylandMouseInput::leftClick () const {
|
|
WallpaperEngine::Input::MouseClickStatus WaylandMouseInput::leftClick () const {
|
|
|
- if (m_waylandDriver.viewportInFocus && m_waylandDriver.viewportInFocus->rendering) {
|
|
|
|
|
- return m_waylandDriver.viewportInFocus->leftClick;
|
|
|
|
|
|
|
+ const auto* viewport = getActiveViewport (m_waylandDriver);
|
|
|
|
|
+ if (viewport) {
|
|
|
|
|
+ return viewport->leftClick;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return MouseClickStatus::Released;
|
|
return MouseClickStatus::Released;
|
|
@@ -145,8 +176,9 @@ std::optional<glm::dvec2> WaylandMouseInput::queryHyprlandCursorPosition () cons
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
WallpaperEngine::Input::MouseClickStatus WaylandMouseInput::rightClick () const {
|
|
WallpaperEngine::Input::MouseClickStatus WaylandMouseInput::rightClick () const {
|
|
|
- if (m_waylandDriver.viewportInFocus && m_waylandDriver.viewportInFocus->rendering) {
|
|
|
|
|
- return m_waylandDriver.viewportInFocus->rightClick;
|
|
|
|
|
|
|
+ const auto* viewport = getActiveViewport (m_waylandDriver);
|
|
|
|
|
+ if (viewport) {
|
|
|
|
|
+ return viewport->rightClick;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return MouseClickStatus::Released;
|
|
return MouseClickStatus::Released;
|