mirror of
https://github.com/hyprwm/hyprland-plugins.git
synced 2025-12-19 22:50:01 +01:00
stuff
This commit is contained in:
parent
7ea302b877
commit
53f9568ac9
2 changed files with 44 additions and 23 deletions
|
|
@ -34,10 +34,10 @@ class COverview : public IOverview {
|
||||||
virtual void onSwipeEnd();
|
virtual void onSwipeEnd();
|
||||||
|
|
||||||
// close without a selection
|
// close without a selection
|
||||||
virtual void close();
|
virtual void close();
|
||||||
virtual void selectHoveredWorkspace();
|
virtual void selectHoveredWorkspace();
|
||||||
|
|
||||||
virtual void fullRender();
|
virtual void fullRender();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void redrawID(int id, bool forcelowres = false);
|
void redrawID(int id, bool forcelowres = false);
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,8 @@
|
||||||
#include <hyprland/src/managers/animation/DesktopAnimationManager.hpp>
|
#include <hyprland/src/managers/animation/DesktopAnimationManager.hpp>
|
||||||
#include <hyprland/src/managers/input/InputManager.hpp>
|
#include <hyprland/src/managers/input/InputManager.hpp>
|
||||||
#include <hyprland/src/managers/LayoutManager.hpp>
|
#include <hyprland/src/managers/LayoutManager.hpp>
|
||||||
|
#include <hyprland/src/managers/cursor/CursorShapeOverrideController.hpp>
|
||||||
|
#include <hyprland/src/desktop/state/FocusState.hpp>
|
||||||
#include <hyprland/src/helpers/time/Time.hpp>
|
#include <hyprland/src/helpers/time/Time.hpp>
|
||||||
#undef private
|
#undef private
|
||||||
#include "OverviewPassElement.hpp"
|
#include "OverviewPassElement.hpp"
|
||||||
|
|
@ -24,14 +26,14 @@ static void removeOverview(WP<Hyprutils::Animation::CBaseAnimatedVariable> thisp
|
||||||
CScrollOverview::~CScrollOverview() {
|
CScrollOverview::~CScrollOverview() {
|
||||||
g_pHyprRenderer->makeEGLCurrent();
|
g_pHyprRenderer->makeEGLCurrent();
|
||||||
images.clear(); // otherwise we get a vram leak
|
images.clear(); // otherwise we get a vram leak
|
||||||
g_pInputManager->unsetCursorImage();
|
Cursor::overrideController->unsetOverride(Cursor::CURSOR_OVERRIDE_SPECIAL_ACTION);
|
||||||
g_pHyprOpenGL->markBlurDirtyForMonitor(pMonitor.lock());
|
g_pHyprOpenGL->markBlurDirtyForMonitor(pMonitor.lock());
|
||||||
}
|
}
|
||||||
|
|
||||||
CScrollOverview::CScrollOverview(PHLWORKSPACE startedOn_, bool swipe_) : startedOn(startedOn_), swipe(swipe_) {
|
CScrollOverview::CScrollOverview(PHLWORKSPACE startedOn_, bool swipe_) : startedOn(startedOn_), swipe(swipe_) {
|
||||||
static auto* const* PDEFAULTZOOM = (Hyprlang::FLOAT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprexpo:scrolling:default_zoom")->getDataStaticPtr();
|
static auto* const* PDEFAULTZOOM = (Hyprlang::FLOAT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprexpo:scrolling:default_zoom")->getDataStaticPtr();
|
||||||
|
|
||||||
const auto PMONITOR = g_pCompositor->m_lastMonitor.lock();
|
const auto PMONITOR = Desktop::focusState()->monitor();
|
||||||
pMonitor = PMONITOR;
|
pMonitor = PMONITOR;
|
||||||
|
|
||||||
for (const auto& w : g_pCompositor->getWorkspaces()) {
|
for (const auto& w : g_pCompositor->getWorkspaces()) {
|
||||||
|
|
@ -107,7 +109,7 @@ CScrollOverview::CScrollOverview(PHLWORKSPACE startedOn_, bool swipe_) : started
|
||||||
|
|
||||||
windowOpenHook = g_pHookSystem->hookDynamic("openWindow", onWindowOpen);
|
windowOpenHook = g_pHookSystem->hookDynamic("openWindow", onWindowOpen);
|
||||||
|
|
||||||
g_pInputManager->setCursorImageUntilUnset("left_ptr");
|
Cursor::overrideController->setOverride("left_ptr", Cursor::CURSOR_OVERRIDE_SPECIAL_ACTION);
|
||||||
|
|
||||||
redrawAll();
|
redrawAll();
|
||||||
|
|
||||||
|
|
@ -252,12 +254,12 @@ void CScrollOverview::redrawWorkspace(PHLWORKSPACE workspace, bool forcelowres)
|
||||||
auto img = image->windowImages.emplace_back(makeShared<SWindowImage>());
|
auto img = image->windowImages.emplace_back(makeShared<SWindowImage>());
|
||||||
img->pWindow = w;
|
img->pWindow = w;
|
||||||
img->fb.alloc(pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y, pMonitor->m_output->state->state().drmFormat);
|
img->fb.alloc(pMonitor->m_pixelSize.x, pMonitor->m_pixelSize.y, pMonitor->m_output->state->state().drmFormat);
|
||||||
if (!w->m_isX11 && w->m_wlSurface) {
|
if (!w->m_isX11 && w->wlSurface()) {
|
||||||
img->windowCommit = makeUnique<CHyprSignalListener>(w->m_wlSurface->resource()->m_events.commit.listen([wk = WP<SWindowImage>{img}] {
|
img->windowCommit = makeUnique<CHyprSignalListener>(w->wlSurface()->resource()->m_events.commit.listen([wk = WP<SWindowImage>{img}] {
|
||||||
if (!wk || !wk->pWindow)
|
if (!wk || !wk->pWindow)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (wk->pWindow->m_wlSurface->resource()->m_current.accumulateBufferDamage().empty())
|
if (wk->pWindow->wlSurface()->resource()->m_current.accumulateBufferDamage().empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
reinterpretPointerCast<CScrollOverview>(g_pOverview)->redrawWindowImage(wk.lock());
|
reinterpretPointerCast<CScrollOverview>(g_pOverview)->redrawWindowImage(wk.lock());
|
||||||
|
|
@ -339,16 +341,12 @@ void CScrollOverview::onDamageReported() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void CScrollOverview::close() {
|
void CScrollOverview::close() {
|
||||||
|
|
||||||
if (closing)
|
|
||||||
return;
|
|
||||||
|
|
||||||
closing = true;
|
closing = true;
|
||||||
|
|
||||||
if (!closeOnWindow)
|
if (!closeOnWindow)
|
||||||
closeOnWindow = g_pCompositor->m_lastWindow;
|
closeOnWindow = Desktop::focusState()->window();
|
||||||
|
|
||||||
if (closeOnWindow == g_pCompositor->m_lastWindow)
|
if (closeOnWindow == Desktop::focusState()->window())
|
||||||
*viewOffset = Vector2D{};
|
*viewOffset = Vector2D{};
|
||||||
else {
|
else {
|
||||||
|
|
||||||
|
|
@ -358,7 +356,7 @@ void CScrollOverview::close() {
|
||||||
pMonitor->changeWorkspace(closeOnWindow->m_workspace, true, true, true);
|
pMonitor->changeWorkspace(closeOnWindow->m_workspace, true, true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_pCompositor->focusWindow(closeOnWindow.lock());
|
Desktop::focusState()->fullWindowFocus(closeOnWindow.lock());
|
||||||
|
|
||||||
size_t activeIdx = 0;
|
size_t activeIdx = 0;
|
||||||
for (size_t i = 0; i < images.size(); ++i) {
|
for (size_t i = 0; i < images.size(); ++i) {
|
||||||
|
|
@ -487,26 +485,49 @@ void CScrollOverview::fullRender() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static float lerp(const float& from, const float& to, const float perc) {
|
static float hyprlerp(const float& from, const float& to, const float perc) {
|
||||||
return (to - from) * perc + from;
|
return (to - from) * perc + from;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Vector2D lerp(const Vector2D& from, const Vector2D& to, const float perc) {
|
static Vector2D hyprlerp(const Vector2D& from, const Vector2D& to, const float perc) {
|
||||||
return Vector2D{lerp(from.x, to.x, perc), lerp(from.y, to.y, perc)};
|
return Vector2D{hyprlerp(from.x, to.x, perc), hyprlerp(from.y, to.y, perc)};
|
||||||
}
|
}
|
||||||
|
|
||||||
void CScrollOverview::setClosing(bool closing_) {
|
void CScrollOverview::setClosing(bool closing_) {
|
||||||
// TODO:
|
closing = closing_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CScrollOverview::resetSwipe() {
|
void CScrollOverview::resetSwipe() {
|
||||||
// TODO:
|
static auto* const* PDEFAULTZOOM = (Hyprlang::FLOAT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprexpo:scrolling:default_zoom")->getDataStaticPtr();
|
||||||
|
|
||||||
|
if (closing) {
|
||||||
|
close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
(*scale) = **PDEFAULTZOOM;
|
||||||
|
m_isSwiping = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CScrollOverview::onSwipeUpdate(double delta) {
|
void CScrollOverview::onSwipeUpdate(double delta) {
|
||||||
// TODO:
|
static auto* const* PDEFAULTZOOM = (Hyprlang::FLOAT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprexpo:scrolling:default_zoom")->getDataStaticPtr();
|
||||||
|
static auto* const* PDISTANCE = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprexpo:gesture_distance")->getDataStaticPtr();
|
||||||
|
|
||||||
|
m_isSwiping = true;
|
||||||
|
|
||||||
|
const float PERC = closing ? std::clamp(delta / (double)**PDISTANCE, 0.0, 1.0) : 1.0 - std::clamp(delta / (double)**PDISTANCE, 0.0, 1.0);
|
||||||
|
|
||||||
|
scale->setValueAndWarp(hyprlerp(1.F, **PDEFAULTZOOM, PERC));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CScrollOverview::onSwipeEnd() {
|
void CScrollOverview::onSwipeEnd() {
|
||||||
// TODO:
|
static auto* const* PDEFAULTZOOM = (Hyprlang::FLOAT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprexpo:scrolling:default_zoom")->getDataStaticPtr();
|
||||||
|
|
||||||
|
if (closing) {
|
||||||
|
close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
(*scale) = **PDEFAULTZOOM;
|
||||||
|
m_isSwiping = false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue