mirror of
https://github.com/hyprwm/hyprland-plugins.git
synced 2026-05-07 19:28:00 +02:00
fix CI against latest Hyprland
This commit is contained in:
parent
473804b359
commit
d09549230a
20 changed files with 184 additions and 238 deletions
|
|
@ -1,13 +1,15 @@
|
|||
#include "BorderppPassElement.hpp"
|
||||
#include <hyprland/src/render/OpenGL.hpp>
|
||||
#include <hyprland/src/render/Renderer.hpp>
|
||||
#include "borderDeco.hpp"
|
||||
|
||||
CBorderPPPassElement::CBorderPPPassElement(const CBorderPPPassElement::SBorderPPData& data_) : data(data_) {
|
||||
;
|
||||
}
|
||||
|
||||
void CBorderPPPassElement::draw(const CRegion& damage) {
|
||||
data.deco->drawPass(g_pHyprOpenGL->m_renderData.pMonitor.lock(), data.a);
|
||||
std::vector<UP<IPassElement>> CBorderPPPassElement::draw() {
|
||||
data.deco->drawPass(g_pHyprRenderer->m_renderData.pMonitor.lock(), data.a);
|
||||
return {};
|
||||
}
|
||||
|
||||
bool CBorderPPPassElement::needsLiveBlur() {
|
||||
|
|
@ -16,4 +18,4 @@ bool CBorderPPPassElement::needsLiveBlur() {
|
|||
|
||||
bool CBorderPPPassElement::needsPrecomputeBlur() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,14 +13,18 @@ class CBorderPPPassElement : public IPassElement {
|
|||
CBorderPPPassElement(const SBorderPPData& data_);
|
||||
virtual ~CBorderPPPassElement() = default;
|
||||
|
||||
virtual void draw(const CRegion& damage);
|
||||
virtual bool needsLiveBlur();
|
||||
virtual bool needsPrecomputeBlur();
|
||||
virtual std::vector<UP<IPassElement>> draw() override;
|
||||
virtual bool needsLiveBlur() override;
|
||||
virtual bool needsPrecomputeBlur() override;
|
||||
|
||||
virtual const char* passName() {
|
||||
virtual const char* passName() override {
|
||||
return "CBorderPPPassElement";
|
||||
}
|
||||
|
||||
virtual ePassElementType type() override {
|
||||
return EK_CUSTOM;
|
||||
}
|
||||
|
||||
private:
|
||||
SBorderPPData data;
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
#include <hyprland/src/render/Renderer.hpp>
|
||||
#include <hyprutils/memory/Casts.hpp>
|
||||
using namespace Hyprutils::Memory;
|
||||
using namespace Render::GL;
|
||||
#include "BorderppPassElement.hpp"
|
||||
#include "globals.hpp"
|
||||
|
||||
|
|
|
|||
94
flake.lock
generated
94
flake.lock
generated
|
|
@ -20,11 +20,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1765900596,
|
||||
"narHash": "sha256-+hn8v9jkkLP9m+o0Nm5SiEq10W0iWDSotH2XfjU45fA=",
|
||||
"lastModified": 1776876344,
|
||||
"narHash": "sha256-Ubqb/agkuMJK+k19gjQgHux/eOYRc1sRGoOZOho8+VY=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "aquamarine",
|
||||
"rev": "d83c97f8f5c0aae553c1489c7d9eff3eadcadace",
|
||||
"rev": "648a13d0ee1e03a843b3e145b8ece15393058701",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -36,15 +36,15 @@
|
|||
"flake-compat": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1761588595,
|
||||
"narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=",
|
||||
"owner": "edolstra",
|
||||
"lastModified": 1767039857,
|
||||
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
|
||||
"owner": "NixOS",
|
||||
"repo": "flake-compat",
|
||||
"rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5",
|
||||
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "edolstra",
|
||||
"owner": "NixOS",
|
||||
"repo": "flake-compat",
|
||||
"type": "github"
|
||||
}
|
||||
|
|
@ -87,11 +87,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1753964049,
|
||||
"narHash": "sha256-lIqabfBY7z/OANxHoPeIrDJrFyYy9jAM4GQLzZ2feCM=",
|
||||
"lastModified": 1776511930,
|
||||
"narHash": "sha256-fCpwFiTW0rT7oKJqr3cqHMnkwypSwQKpbtUEtxdkgrM=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprcursor",
|
||||
"rev": "44e91d467bdad8dcf8bbd2ac7cf49972540980a5",
|
||||
"rev": "39435900785d0c560c6ae8777d29f28617d031ef",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -116,11 +116,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1763733840,
|
||||
"narHash": "sha256-JnET78yl5RvpGuDQy3rCycOCkiKoLr5DN1fPhRNNMco=",
|
||||
"lastModified": 1776426399,
|
||||
"narHash": "sha256-RUESLKNikIeEq9ymGJ6nmcDXiSFQpUW1IhJ245nL3xM=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprgraphics",
|
||||
"rev": "8f1bec691b2d198c60cccabca7a94add2df4ed1a",
|
||||
"rev": "68d064434787cf1ed4a2fe257c03c5f52f33cf84",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -146,11 +146,11 @@
|
|||
"xdph": "xdph"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1767201430,
|
||||
"narHash": "sha256-2FF66EaIbsc7CL1jKHbRFslSePDq40fzlTTbUlm5v3k=",
|
||||
"lastModified": 1777469508,
|
||||
"narHash": "sha256-2j6wX8051O5KcLw03t9x/RsFUOIGmQ2BPMMEO//iF1o=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "Hyprland",
|
||||
"rev": "48a024e0322bbd7c4c88126498ec478444ec4cb2",
|
||||
"rev": "202cf48ecf627839c0a7433cbeb018c744214390",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -192,11 +192,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1765643131,
|
||||
"narHash": "sha256-CCGohW5EBIRy4B7vTyBMqPgsNcaNenVad/wszfddET0=",
|
||||
"lastModified": 1776426575,
|
||||
"narHash": "sha256-KI6nIfVihn/DPaeB5Et46Xg3dkNHrrEtUd5LBBVomB0=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-guiutils",
|
||||
"rev": "e50ae912813bdfa8372d62daf454f48d6df02297",
|
||||
"rev": "a968d211048e3ed538e47b84cb3649299578f19d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -217,11 +217,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1765214753,
|
||||
"narHash": "sha256-P9zdGXOzToJJgu5sVjv7oeOGPIIwrd9hAUAP3PsmBBs=",
|
||||
"lastModified": 1772460177,
|
||||
"narHash": "sha256-/6G/MsPvtn7bc4Y32pserBT/Z4SUUdBd4XYJpOEKVR4=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-protocols",
|
||||
"rev": "3f3860b869014c00e8b9e0528c7b4ddc335c21ab",
|
||||
"rev": "1cb6db5fd6bb8aee419f4457402fa18293ace917",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -246,11 +246,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1764612430,
|
||||
"narHash": "sha256-54ltTSbI6W+qYGMchAgCR6QnC1kOdKXN6X6pJhOWxFg=",
|
||||
"lastModified": 1776426736,
|
||||
"narHash": "sha256-rl7i4aY+9p8LysJp7o8uRWahCkpFznCgGHXszlTw7b0=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprlang",
|
||||
"rev": "0d00dc118981531aa731150b6ea551ef037acddd",
|
||||
"rev": "7833ff33b2e82d3406337b5dcf0d1cec595d83e9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -298,11 +298,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1764592794,
|
||||
"narHash": "sha256-7CcO+wbTJ1L1NBQHierHzheQGPWwkIQug/w+fhTAVuU=",
|
||||
"lastModified": 1772462885,
|
||||
"narHash": "sha256-5pHXrQK9zasMnIo6yME6EOXmWGFMSnCITcfKshhKJ9I=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprtoolkit",
|
||||
"rev": "5cfe0743f0e608e1462972303778d8a0859ee63e",
|
||||
"rev": "9af245a69fa6b286b88ddfc340afd288e00a6998",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -323,11 +323,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1766160771,
|
||||
"narHash": "sha256-roINUGikWRqqgKrD4iotKbGj3ZKJl3hjMz5l/SyKrHw=",
|
||||
"lastModified": 1777148223,
|
||||
"narHash": "sha256-PTf7kRFFzCW6rIYxLH2fWfVJmj86FSYe3k6L8B+IM9o=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprutils",
|
||||
"rev": "5ac060bfcf2f12b3a6381156ebbc13826a05b09f",
|
||||
"rev": "fa3992be2dfebe4ab06d753c6ca59bea298e798f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -348,11 +348,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1763640274,
|
||||
"narHash": "sha256-Uan1Nl9i4TF/kyFoHnTq1bd/rsWh4GAK/9/jDqLbY5A=",
|
||||
"lastModified": 1777148232,
|
||||
"narHash": "sha256-Uv0WZLhu89SafuSOmYDA7akrPt4wBRmsa1ucasO5aXg=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprwayland-scanner",
|
||||
"rev": "f6cf414ca0e16a4d30198fd670ec86df3c89f671",
|
||||
"rev": "fec9cf1abcc1011e46f0a0986f46bf93c6bf8b92",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -377,11 +377,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1766253200,
|
||||
"narHash": "sha256-26qPwrd3od+xoYVywSB7hC2cz9ivN46VPLlrsXyGxvE=",
|
||||
"lastModified": 1776728575,
|
||||
"narHash": "sha256-z9eGphrArEBpl1O/GCH0wlY6z4K9vA6yWh2gAS6qytU=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprwire",
|
||||
"rev": "1079777525b30a947c8d657fac158e00ae85de9d",
|
||||
"rev": "f3a80888783702a39691b684d099e16b83ed4702",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -392,11 +392,11 @@
|
|||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1766070988,
|
||||
"narHash": "sha256-G/WVghka6c4bAzMhTwT2vjLccg/awmHkdKSd2JrycLc=",
|
||||
"lastModified": 1776877367,
|
||||
"narHash": "sha256-EHq1/OX139R1RvBzOJ0aMRT3xnWyqtHBRUBuO1gFzjI=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "c6245e83d836d0433170a16eb185cefe0572f8b8",
|
||||
"rev": "0726a0ecb6d4e08f6adced58726b95db924cef57",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -416,11 +416,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1765911976,
|
||||
"narHash": "sha256-t3T/xm8zstHRLx+pIHxVpQTiySbKqcQbK+r+01XVKc0=",
|
||||
"lastModified": 1776796298,
|
||||
"narHash": "sha256-PcRvlWayisPSjd0UcRQbhG8Oqw78AcPE6x872cPRHN8=",
|
||||
"owner": "cachix",
|
||||
"repo": "git-hooks.nix",
|
||||
"rev": "b68b780b69702a090c8bb1b973bab13756cc7a27",
|
||||
"rev": "3cfd774b0a530725a077e17354fbdb87ea1c4aad",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -485,11 +485,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1761431178,
|
||||
"narHash": "sha256-xzjC1CV3+wpUQKNF+GnadnkeGUCJX+vgaWIZsnz9tzI=",
|
||||
"lastModified": 1777035886,
|
||||
"narHash": "sha256-m1TNuBoSXUBSKhD9UVMkU90M0wFTPTfvIOOltO8IM8A=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "xdg-desktop-portal-hyprland",
|
||||
"rev": "4b8801228ff958d028f588f0c2b911dbf32297f9",
|
||||
"rev": "ecfcdcc781f48821d83e1e2a0e30d7beca0eeb5e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
|
|||
|
|
@ -6,8 +6,9 @@ COverviewPassElement::COverviewPassElement() {
|
|||
;
|
||||
}
|
||||
|
||||
void COverviewPassElement::draw(const CRegion& damage) {
|
||||
std::vector<UP<IPassElement>> COverviewPassElement::draw() {
|
||||
g_pOverview->fullRender();
|
||||
return {};
|
||||
}
|
||||
|
||||
bool COverviewPassElement::needsLiveBlur() {
|
||||
|
|
|
|||
|
|
@ -8,13 +8,17 @@ class COverviewPassElement : public IPassElement {
|
|||
COverviewPassElement();
|
||||
virtual ~COverviewPassElement() = default;
|
||||
|
||||
virtual void draw(const CRegion& damage);
|
||||
virtual bool needsLiveBlur();
|
||||
virtual bool needsPrecomputeBlur();
|
||||
virtual std::optional<CBox> boundingBox();
|
||||
virtual CRegion opaqueRegion();
|
||||
virtual std::vector<UP<IPassElement>> draw() override;
|
||||
virtual bool needsLiveBlur() override;
|
||||
virtual bool needsPrecomputeBlur() override;
|
||||
virtual std::optional<CBox> boundingBox() override;
|
||||
virtual CRegion opaqueRegion() override;
|
||||
|
||||
virtual const char* passName() {
|
||||
virtual const char* passName() override {
|
||||
return "COverviewPassElement";
|
||||
}
|
||||
};
|
||||
|
||||
virtual ePassElementType type() override {
|
||||
return EK_CUSTOM;
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -263,5 +263,5 @@ APICALL EXPORT void PLUGIN_EXIT() {
|
|||
|
||||
g_unloading = true;
|
||||
|
||||
g_pConfigManager->reload(); // we need to reload now to clear all the gestures
|
||||
Config::mgr()->reload(); // we need to reload now to clear all the gestures
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,14 @@
|
|||
#include "overview.hpp"
|
||||
#include <any>
|
||||
#define private public
|
||||
#include <sstream>
|
||||
#define protected public
|
||||
#include <hyprland/src/render/Renderer.hpp>
|
||||
#undef protected
|
||||
#include "overview.hpp"
|
||||
#include <hyprland/src/render/gl/GLFramebuffer.hpp>
|
||||
#include <hyprland/src/render/pass/ClearPassElement.hpp>
|
||||
#include <hyprland/src/config/shared/animation/AnimationTree.hpp>
|
||||
#include <hyprland/src/config/shared/actions/ConfigActions.hpp>
|
||||
#include <hyprutils/string/ConstVarList.hpp>
|
||||
#include <hyprland/src/Compositor.hpp>
|
||||
#include <hyprland/src/desktop/state/FocusState.hpp>
|
||||
#include <hyprland/src/config/ConfigValue.hpp>
|
||||
|
|
@ -12,18 +19,20 @@
|
|||
#include <hyprland/src/managers/input/InputManager.hpp>
|
||||
#include <hyprland/src/managers/eventLoop/EventLoopManager.hpp>
|
||||
#include <hyprland/src/helpers/time/Time.hpp>
|
||||
#undef private
|
||||
#include "OverviewPassElement.hpp"
|
||||
|
||||
using namespace Hyprutils::String;
|
||||
using namespace Render;
|
||||
using namespace Render::GL;
|
||||
|
||||
static void damageMonitor(WP<Hyprutils::Animation::CBaseAnimatedVariable> thisptr) {
|
||||
g_pOverview->damage();
|
||||
}
|
||||
|
||||
COverview::~COverview() {
|
||||
g_pHyprRenderer->makeEGLCurrent();
|
||||
images.clear(); // otherwise we get a vram leak
|
||||
Cursor::overrideController->unsetOverride(Cursor::CURSOR_OVERRIDE_UNKNOWN);
|
||||
g_pHyprOpenGL->markBlurDirtyForMonitor(pMonitor.lock());
|
||||
g_pHyprRenderer->damageMonitor(pMonitor.lock());
|
||||
}
|
||||
|
||||
COverview::COverview(PHLWORKSPACE startedOn_, bool swipe_) : startedOn(startedOn_), swipe(swipe_) {
|
||||
|
|
@ -43,12 +52,12 @@ COverview::COverview(PHLWORKSPACE startedOn_, bool swipe_) : startedOn(startedOn
|
|||
// process the method
|
||||
bool methodCenter = true;
|
||||
int methodStartID = pMonitor->activeWorkspaceID();
|
||||
CVarList method{*PMETHOD, 0, 's', true};
|
||||
CConstVarList method{*PMETHOD, 0, 's', true};
|
||||
if (method.size() < 2)
|
||||
Log::logger->log(Log::ERR, "[he] invalid workspace_method");
|
||||
else {
|
||||
methodCenter = method[0] == "center";
|
||||
methodStartID = getWorkspaceIDNameFromString(method[1]).id;
|
||||
methodStartID = getWorkspaceIDNameFromString(std::string{method[1]}).id;
|
||||
if (methodStartID == WORKSPACE_INVALID)
|
||||
methodStartID = pMonitor->activeWorkspaceID();
|
||||
}
|
||||
|
|
@ -120,8 +129,6 @@ COverview::COverview(PHLWORKSPACE startedOn_, bool swipe_) : startedOn(startedOn
|
|||
pMonitor->m_activeWorkspace = startedOn;
|
||||
}
|
||||
|
||||
g_pHyprRenderer->makeEGLCurrent();
|
||||
|
||||
Vector2D tileSize = pMonitor->m_size / SIDE_LENGTH;
|
||||
Vector2D tileRenderSize = (pMonitor->m_size - Vector2D{GAP_WIDTH * pMonitor->m_scale, GAP_WIDTH * pMonitor->m_scale} * (SIDE_LENGTH - 1)) / SIDE_LENGTH;
|
||||
CBox monbox{0, 0, tileSize.x * 2, tileSize.y * 2};
|
||||
|
|
@ -141,12 +148,13 @@ COverview::COverview(PHLWORKSPACE startedOn_, bool swipe_) : startedOn(startedOn
|
|||
|
||||
for (size_t i = 0; i < (size_t)(SIDE_LENGTH * SIDE_LENGTH); ++i) {
|
||||
COverview::SWorkspaceImage& image = images[i];
|
||||
image.fb.alloc(monbox.w, monbox.h, PMONITOR->m_output->state->state().drmFormat);
|
||||
image.fb = makeShared<CGLFramebuffer>();
|
||||
image.fb->alloc(monbox.w, monbox.h, PMONITOR->m_output->state->state().drmFormat);
|
||||
|
||||
CRegion fakeDamage{0, 0, INT16_MAX, INT16_MAX};
|
||||
g_pHyprRenderer->beginRender(PMONITOR, fakeDamage, RENDER_MODE_FULL_FAKE, nullptr, &image.fb);
|
||||
g_pHyprRenderer->beginRender(PMONITOR, fakeDamage, RENDER_MODE_FULL_FAKE, nullptr, image.fb);
|
||||
|
||||
g_pHyprOpenGL->clear(CHyprColor{0, 0, 0, 1.0});
|
||||
g_pHyprRenderer->draw(CClearPassElement::SClearData{CHyprColor{0, 0, 0, 1.0}});
|
||||
|
||||
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(image.workspaceID);
|
||||
|
||||
|
|
@ -175,7 +183,7 @@ COverview::COverview(PHLWORKSPACE startedOn_, bool swipe_) : startedOn(startedOn
|
|||
image.box = {(i % SIDE_LENGTH) * tileRenderSize.x + (i % SIDE_LENGTH) * GAP_WIDTH, (i / SIDE_LENGTH) * tileRenderSize.y + (i / SIDE_LENGTH) * GAP_WIDTH, tileRenderSize.x,
|
||||
tileRenderSize.y};
|
||||
|
||||
g_pHyprOpenGL->m_renderData.blockScreenShader = true;
|
||||
g_pHyprRenderer->m_renderData.blockScreenShader = true;
|
||||
g_pHyprRenderer->endRender();
|
||||
}
|
||||
|
||||
|
|
@ -189,10 +197,10 @@ COverview::COverview(PHLWORKSPACE startedOn_, bool swipe_) : startedOn(startedOn
|
|||
// zoom on the current workspace.
|
||||
// const auto& TILE = images[std::clamp(currentid, 0, SIDE_LENGTH * SIDE_LENGTH)];
|
||||
|
||||
g_pAnimationManager->createAnimation(pMonitor->m_size * pMonitor->m_size / tileSize, size, g_pConfigManager->getAnimationPropertyConfig("windowsMove"), AVARDAMAGE_NONE);
|
||||
g_pAnimationManager->createAnimation(pMonitor->m_size * pMonitor->m_size / tileSize, size, Config::animationTree()->getAnimationPropertyConfig("windowsMove"), AVARDAMAGE_NONE);
|
||||
g_pAnimationManager->createAnimation((-((pMonitor->m_size / (double)SIDE_LENGTH) * Vector2D{currentid % SIDE_LENGTH, currentid / SIDE_LENGTH}) * pMonitor->m_scale) *
|
||||
(pMonitor->m_size / tileSize),
|
||||
pos, g_pConfigManager->getAnimationPropertyConfig("windowsMove"), AVARDAMAGE_NONE);
|
||||
pos, Config::animationTree()->getAnimationPropertyConfig("windowsMove"), AVARDAMAGE_NONE);
|
||||
|
||||
size->setUpdateCallback(damageMonitor);
|
||||
pos->setUpdateCallback(damageMonitor);
|
||||
|
|
@ -257,8 +265,6 @@ void COverview::redrawID(int id, bool forcelowres) {
|
|||
|
||||
blockOverviewRendering = true;
|
||||
|
||||
g_pHyprRenderer->makeEGLCurrent();
|
||||
|
||||
id = std::clamp(id, 0, SIDE_LENGTH * SIDE_LENGTH);
|
||||
|
||||
Vector2D tileSize = pMonitor->m_size / SIDE_LENGTH;
|
||||
|
|
@ -273,15 +279,16 @@ void COverview::redrawID(int id, bool forcelowres) {
|
|||
|
||||
auto& image = images[id];
|
||||
|
||||
if (image.fb.m_size != monbox.size()) {
|
||||
image.fb.release();
|
||||
image.fb.alloc(monbox.w, monbox.h, pMonitor->m_output->state->state().drmFormat);
|
||||
if (image.fb->m_size != monbox.size()) {
|
||||
image.fb->release();
|
||||
image.fb = makeShared<CGLFramebuffer>();
|
||||
image.fb->alloc(monbox.w, monbox.h, pMonitor->m_output->state->state().drmFormat);
|
||||
}
|
||||
|
||||
CRegion fakeDamage{0, 0, INT16_MAX, INT16_MAX};
|
||||
g_pHyprRenderer->beginRender(pMonitor.lock(), fakeDamage, RENDER_MODE_FULL_FAKE, nullptr, &image.fb);
|
||||
g_pHyprRenderer->beginRender(pMonitor.lock(), fakeDamage, RENDER_MODE_FULL_FAKE, nullptr, image.fb);
|
||||
|
||||
g_pHyprOpenGL->clear(CHyprColor{0, 0, 0, 1.0});
|
||||
g_pHyprRenderer->draw(CClearPassElement::SClearData{CHyprColor{0, 0, 0, 1.0}});
|
||||
|
||||
const auto PWORKSPACE = image.pWorkspace;
|
||||
|
||||
|
|
@ -309,7 +316,7 @@ void COverview::redrawID(int id, bool forcelowres) {
|
|||
} else
|
||||
g_pHyprRenderer->renderWorkspace(pMonitor.lock(), PWORKSPACE, Time::steadyNow(), monbox);
|
||||
|
||||
g_pHyprOpenGL->m_renderData.blockScreenShader = true;
|
||||
g_pHyprRenderer->m_renderData.blockScreenShader = true;
|
||||
g_pHyprRenderer->endRender();
|
||||
|
||||
pMonitor->m_activeSpecialWorkspace = openSpecial;
|
||||
|
|
@ -387,9 +394,9 @@ void COverview::close() {
|
|||
const auto OLDWS = pMonitor->m_activeWorkspace;
|
||||
|
||||
if (!NEWIDWS)
|
||||
g_pKeybindManager->changeworkspace(std::to_string(NEWID));
|
||||
Config::Actions::changeWorkspace(std::to_string(NEWID));
|
||||
else
|
||||
g_pKeybindManager->changeworkspace(NEWIDWS->getConfigName());
|
||||
Config::Actions::changeWorkspace(NEWIDWS->getConfigName());
|
||||
|
||||
g_pDesktopAnimationManager->startAnimation(pMonitor->m_activeWorkspace, CDesktopAnimationManager::ANIMATION_TYPE_IN, true, true);
|
||||
g_pDesktopAnimationManager->startAnimation(OLDWS, CDesktopAnimationManager::ANIMATION_TYPE_OUT, false, true);
|
||||
|
|
@ -443,7 +450,7 @@ void COverview::fullRender() {
|
|||
Vector2D tileSize = (SIZE / SIDE_LENGTH);
|
||||
Vector2D tileRenderSize = (SIZE - Vector2D{GAPSIZE, GAPSIZE} * (SIDE_LENGTH - 1)) / SIDE_LENGTH;
|
||||
|
||||
g_pHyprOpenGL->clear(BG_COLOR.stripA());
|
||||
g_pHyprRenderer->draw(CClearPassElement::SClearData{BG_COLOR.stripA()});
|
||||
|
||||
for (size_t y = 0; y < (size_t)SIDE_LENGTH; ++y) {
|
||||
for (size_t x = 0; x < (size_t)SIDE_LENGTH; ++x) {
|
||||
|
|
@ -451,7 +458,7 @@ void COverview::fullRender() {
|
|||
texbox.scale(pMonitor->m_scale).translate(pos->value());
|
||||
texbox.round();
|
||||
CRegion damage{0, 0, INT16_MAX, INT16_MAX};
|
||||
g_pHyprOpenGL->renderTextureInternal(images[x + y * SIDE_LENGTH].fb.getTexture(), texbox, {.damage = &damage, .a = 1.0});
|
||||
g_pHyprOpenGL->renderTexture(images[x + y * SIDE_LENGTH].fb->getTexture(), texbox, {.damage = &damage, .a = 1.0});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,11 +4,17 @@
|
|||
|
||||
#include "globals.hpp"
|
||||
#include <hyprland/src/desktop/DesktopTypes.hpp>
|
||||
#include <hyprland/src/render/Framebuffer.hpp>
|
||||
#include <hyprutils/memory/SharedPtr.hpp>
|
||||
#include <hyprland/src/helpers/AnimatedVariable.hpp>
|
||||
#include <hyprland/src/event/EventBus.hpp>
|
||||
#include <vector>
|
||||
|
||||
using namespace Hyprutils::Memory;
|
||||
|
||||
namespace Render {
|
||||
class IFramebuffer;
|
||||
}
|
||||
|
||||
// saves on resources, but is a bit broken rn with blur.
|
||||
// hyprland's fault, but cba to fix.
|
||||
constexpr bool ENABLE_LOWRES = false;
|
||||
|
|
@ -54,7 +60,7 @@ class COverview {
|
|||
bool damageDirty = false;
|
||||
|
||||
struct SWorkspaceImage {
|
||||
CFramebuffer fb;
|
||||
SP<Render::IFramebuffer> fb;
|
||||
int64_t workspaceID = -1;
|
||||
PHLWORKSPACE pWorkspace;
|
||||
CBox box;
|
||||
|
|
|
|||
|
|
@ -7,9 +7,7 @@ project(hyprscrolling
|
|||
|
||||
set(CMAKE_CXX_STANDARD 23)
|
||||
|
||||
file(GLOB_RECURSE SRC "*.cpp")
|
||||
|
||||
add_library(hyprscrolling SHARED ${SRC})
|
||||
add_library(hyprscrolling SHARED main.cpp)
|
||||
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(deps REQUIRED IMPORTED_TARGET
|
||||
|
|
|
|||
|
|
@ -9,6 +9,6 @@ CXXFLAGS ?= -O2
|
|||
CXXFLAGS += -shared -fPIC -std=c++2b
|
||||
|
||||
all:
|
||||
$(CXX) $(CXXFLAGS) $(LDFLAGS) $(EXTRA_FLAGS) main.cpp Scrolling.cpp -o hyprscrolling.so `pkg-config --cflags pixman-1 libdrm hyprland pangocairo libinput libudev wayland-server xkbcommon`
|
||||
$(CXX) $(CXXFLAGS) $(LDFLAGS) $(EXTRA_FLAGS) main.cpp -o hyprscrolling.so `pkg-config --cflags pixman-1 libdrm hyprland pangocairo libinput libudev wayland-server xkbcommon`
|
||||
clean:
|
||||
rm ./hyprscrolling.so
|
||||
|
|
|
|||
|
|
@ -1,33 +1,15 @@
|
|||
#define WLR_USE_UNSTABLE
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
#include <hyprland/src/includes.hpp>
|
||||
#include <sstream>
|
||||
|
||||
#define private public
|
||||
#include <hyprland/src/Compositor.hpp>
|
||||
#include <hyprland/src/desktop/DesktopTypes.hpp>
|
||||
#include <hyprland/src/config/ConfigManager.hpp>
|
||||
#include <hyprland/src/render/Renderer.hpp>
|
||||
#include <hyprland/src/managers/KeybindManager.hpp>
|
||||
#undef private
|
||||
|
||||
#include <hyprutils/string/VarList.hpp>
|
||||
using namespace Hyprutils::String;
|
||||
#include <hyprland/src/layout/algorithm/tiled/scrolling/ScrollingAlgorithm.hpp>
|
||||
|
||||
#include "globals.hpp"
|
||||
#include "Scrolling.hpp"
|
||||
|
||||
// Do NOT change this function.
|
||||
APICALL EXPORT std::string PLUGIN_API_VERSION() {
|
||||
return HYPRLAND_API_VERSION;
|
||||
}
|
||||
|
||||
UP<CScrollingLayout> g_pScrollingLayout;
|
||||
|
||||
//
|
||||
|
||||
APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) {
|
||||
PHANDLE = handle;
|
||||
|
||||
|
|
@ -40,9 +22,9 @@ APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) {
|
|||
throw std::runtime_error("[hs] Version mismatch");
|
||||
}
|
||||
|
||||
bool success = true;
|
||||
|
||||
g_pScrollingLayout = makeUnique<CScrollingLayout>();
|
||||
const bool success = HyprlandAPI::addTiledAlgo(PHANDLE, "scrolling", &typeid(Layout::Tiled::CScrollingAlgorithm), []() -> UP<Layout::ITiledAlgorithm> {
|
||||
return makeUnique<Layout::Tiled::CScrollingAlgorithm>();
|
||||
});
|
||||
|
||||
HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprscrolling:fullscreen_on_one_column", Hyprlang::INT{0});
|
||||
HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprscrolling:column_width", Hyprlang::FLOAT{0.5F});
|
||||
|
|
@ -50,17 +32,15 @@ APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) {
|
|||
HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprscrolling:follow_focus", Hyprlang::INT{1});
|
||||
HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprscrolling:follow_debounce_ms", Hyprlang::INT{0});
|
||||
HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprscrolling:explicit_column_widths", Hyprlang::STRING{"0.333, 0.5, 0.667, 1.0"});
|
||||
HyprlandAPI::addLayout(PHANDLE, "scrolling", g_pScrollingLayout.get());
|
||||
|
||||
if (!success) {
|
||||
HyprlandAPI::addNotification(PHANDLE, "[hyprscrolling] Failure in initialization: failed to register dispatchers", CHyprColor{1.0, 0.2, 0.2, 1.0}, 5000);
|
||||
throw std::runtime_error("[hs] Dispatchers failed");
|
||||
HyprlandAPI::addNotification(PHANDLE, "[hyprscrolling] Failure in initialization: failed to register layout algorithm", CHyprColor{1.0, 0.2, 0.2, 1.0}, 5000);
|
||||
throw std::runtime_error("[hs] Algorithm registration failed");
|
||||
}
|
||||
|
||||
return {"hyprscrolling", "A plugin to add a scrolling layout to hyprland", "Vaxry", "1.0"};
|
||||
}
|
||||
|
||||
APICALL EXPORT void PLUGIN_EXIT() {
|
||||
HyprlandAPI::removeLayout(PHANDLE, g_pScrollingLayout.get());
|
||||
g_pScrollingLayout.reset();
|
||||
HyprlandAPI::removeAlgo(PHANDLE, "scrolling");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,15 @@
|
|||
#include "TrailPassElement.hpp"
|
||||
#include <hyprland/src/render/OpenGL.hpp>
|
||||
#include <hyprland/src/render/Renderer.hpp>
|
||||
#include "trail.hpp"
|
||||
|
||||
CTrailPassElement::CTrailPassElement(const CTrailPassElement::STrailData& data_) : data(data_) {
|
||||
;
|
||||
}
|
||||
|
||||
void CTrailPassElement::draw(const CRegion& damage) {
|
||||
data.deco->renderPass(g_pHyprOpenGL->m_renderData.pMonitor.lock(), data.a);
|
||||
std::vector<UP<IPassElement>> CTrailPassElement::draw() {
|
||||
data.deco->renderPass(g_pHyprRenderer->m_renderData.pMonitor.lock(), data.a);
|
||||
return {};
|
||||
}
|
||||
|
||||
bool CTrailPassElement::needsLiveBlur() {
|
||||
|
|
@ -16,4 +18,4 @@ bool CTrailPassElement::needsLiveBlur() {
|
|||
|
||||
bool CTrailPassElement::needsPrecomputeBlur() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,14 +13,18 @@ class CTrailPassElement : public IPassElement {
|
|||
CTrailPassElement(const STrailData& data_);
|
||||
virtual ~CTrailPassElement() = default;
|
||||
|
||||
virtual void draw(const CRegion& damage);
|
||||
virtual bool needsLiveBlur();
|
||||
virtual bool needsPrecomputeBlur();
|
||||
virtual std::vector<UP<IPassElement>> draw() override;
|
||||
virtual bool needsLiveBlur() override;
|
||||
virtual bool needsPrecomputeBlur() override;
|
||||
|
||||
virtual const char* passName() {
|
||||
virtual const char* passName() override {
|
||||
return "CTrailPassElement";
|
||||
}
|
||||
|
||||
virtual ePassElementType type() override {
|
||||
return EK_CUSTOM;
|
||||
}
|
||||
|
||||
private:
|
||||
STrailData data;
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
#pragma once
|
||||
|
||||
#include <hyprland/src/plugins/PluginAPI.hpp>
|
||||
#include <hyprland/src/render/Shader.hpp>
|
||||
|
||||
inline HANDLE PHANDLE = nullptr;
|
||||
|
||||
struct SGlobalState {
|
||||
SShader trailShader;
|
||||
wl_event_source* tick = nullptr;
|
||||
CShader trailShader;
|
||||
};
|
||||
|
||||
inline UP<SGlobalState> g_pGlobalState;
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
#include <hyprland/src/config/ConfigManager.hpp>
|
||||
#include <hyprland/src/render/shaders/Shaders.hpp>
|
||||
#include <hyprland/src/render/Renderer.hpp>
|
||||
#include <hyprland/src/managers/HookSystemManager.hpp>
|
||||
#include <hyprland/src/event/EventBus.hpp>
|
||||
|
||||
#include "globals.hpp"
|
||||
#include "shaders.hpp"
|
||||
|
|
@ -19,82 +19,15 @@ APICALL EXPORT std::string PLUGIN_API_VERSION() {
|
|||
return HYPRLAND_API_VERSION;
|
||||
}
|
||||
|
||||
void onNewWindow(void* self, std::any data) {
|
||||
// data is guaranteed
|
||||
const auto PWINDOW = std::any_cast<PHLWINDOW>(data);
|
||||
|
||||
void onNewWindow(PHLWINDOW PWINDOW) {
|
||||
HyprlandAPI::addWindowDecoration(PHANDLE, PWINDOW, makeUnique<CTrail>(PWINDOW));
|
||||
}
|
||||
|
||||
GLuint CompileShader(const GLuint& type, std::string src) {
|
||||
auto shader = glCreateShader(type);
|
||||
|
||||
auto shaderSource = src.c_str();
|
||||
|
||||
glShaderSource(shader, 1, (const GLchar**)&shaderSource, nullptr);
|
||||
glCompileShader(shader);
|
||||
|
||||
GLint ok;
|
||||
glGetShaderiv(shader, GL_COMPILE_STATUS, &ok);
|
||||
|
||||
if (ok == GL_FALSE)
|
||||
throw std::runtime_error("compileShader() failed!");
|
||||
|
||||
return shader;
|
||||
}
|
||||
|
||||
GLuint CreateProgram(const std::string& vert, const std::string& frag) {
|
||||
auto vertCompiled = CompileShader(GL_VERTEX_SHADER, vert);
|
||||
|
||||
if (!vertCompiled)
|
||||
throw std::runtime_error("Compiling vshader failed.");
|
||||
|
||||
auto fragCompiled = CompileShader(GL_FRAGMENT_SHADER, frag);
|
||||
|
||||
if (!fragCompiled)
|
||||
throw std::runtime_error("Compiling fshader failed.");
|
||||
|
||||
auto prog = glCreateProgram();
|
||||
glAttachShader(prog, vertCompiled);
|
||||
glAttachShader(prog, fragCompiled);
|
||||
glLinkProgram(prog);
|
||||
|
||||
glDetachShader(prog, vertCompiled);
|
||||
glDetachShader(prog, fragCompiled);
|
||||
glDeleteShader(vertCompiled);
|
||||
glDeleteShader(fragCompiled);
|
||||
|
||||
GLint ok;
|
||||
glGetProgramiv(prog, GL_LINK_STATUS, &ok);
|
||||
|
||||
if (ok == GL_FALSE)
|
||||
throw std::runtime_error("createProgram() failed! GL_LINK_STATUS not OK!");
|
||||
|
||||
return prog;
|
||||
}
|
||||
|
||||
int onTick(void* data) {
|
||||
EMIT_HOOK_EVENT("trailTick", nullptr);
|
||||
|
||||
const int TIMEOUT = g_pHyprRenderer->m_mostHzMonitor ? 1000.0 / g_pHyprRenderer->m_mostHzMonitor->m_refreshRate : 16;
|
||||
wl_event_source_timer_update(g_pGlobalState->tick, TIMEOUT);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void initGlobal() {
|
||||
g_pHyprRenderer->makeEGLCurrent();
|
||||
Render::GL::g_pHyprOpenGL->makeEGLCurrent();
|
||||
|
||||
GLuint prog = CreateProgram(QUADTRAIL, FRAGTRAIL);
|
||||
g_pGlobalState->trailShader.program = prog;
|
||||
g_pGlobalState->trailShader.uniformLocations[SHADER_PROJ] = glGetUniformLocation(prog, "proj");
|
||||
g_pGlobalState->trailShader.uniformLocations[SHADER_TEX] = glGetUniformLocation(prog, "tex");
|
||||
g_pGlobalState->trailShader.uniformLocations[SHADER_COLOR] = glGetUniformLocation(prog, "color");
|
||||
g_pGlobalState->trailShader.uniformLocations[SHADER_POS_ATTRIB] = glGetAttribLocation(prog, "pos");
|
||||
g_pGlobalState->trailShader.uniformLocations[SHADER_GRADIENT] = glGetUniformLocation(prog, "snapshots");
|
||||
|
||||
g_pGlobalState->tick = wl_event_loop_add_timer(g_pCompositor->m_wlEventLoop, &onTick, nullptr);
|
||||
wl_event_source_timer_update(g_pGlobalState->tick, 1);
|
||||
if (!g_pGlobalState->trailShader.createProgram(QUADTRAIL, FRAGTRAIL, true, false))
|
||||
throw std::runtime_error("[ht] Failed to create trail shader");
|
||||
}
|
||||
|
||||
APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) {
|
||||
|
|
@ -115,7 +48,7 @@ APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) {
|
|||
HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprtrails:history_step", Hyprlang::INT{2});
|
||||
HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprtrails:color", Hyprlang::INT{*configStringToInt("rgba(ffaa00ff)")});
|
||||
|
||||
static auto P = HyprlandAPI::registerCallbackDynamic(PHANDLE, "openWindow", [&](void* self, SCallbackInfo& info, std::any data) { onNewWindow(self, data); });
|
||||
static auto P = Event::bus()->m_events.window.open.listen([&](PHLWINDOW w) { onNewWindow(w); });
|
||||
|
||||
g_pGlobalState = makeUnique<SGlobalState>();
|
||||
initGlobal();
|
||||
|
|
@ -136,6 +69,5 @@ APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) {
|
|||
}
|
||||
|
||||
APICALL EXPORT void PLUGIN_EXIT() {
|
||||
wl_event_source_remove(g_pGlobalState->tick);
|
||||
g_pHyprRenderer->m_renderPass.removeAllOfType("CTrailPassElement");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
#include <hyprland/src/render/Renderer.hpp>
|
||||
#include <hyprutils/memory/Casts.hpp>
|
||||
using namespace Hyprutils::Memory;
|
||||
using namespace Render::GL;
|
||||
#include "globals.hpp"
|
||||
#include "TrailPassElement.hpp"
|
||||
|
||||
|
|
@ -35,13 +36,10 @@ void CTrail::onTick() {
|
|||
CTrail::CTrail(PHLWINDOW pWindow) : IHyprWindowDecoration(pWindow), m_pWindow(pWindow) {
|
||||
m_lastWindowPos = pWindow->m_realPosition->value();
|
||||
m_lastWindowSize = pWindow->m_realSize->value();
|
||||
|
||||
pTickCb = HyprlandAPI::registerCallbackDynamic(PHANDLE, "trailTick", [this](void* self, SCallbackInfo& info, std::any data) { this->onTick(); });
|
||||
}
|
||||
|
||||
CTrail::~CTrail() {
|
||||
damageEntire();
|
||||
HyprlandAPI::unregisterCallback(PHANDLE, pTickCb);
|
||||
}
|
||||
|
||||
SDecorationPositioningInfo CTrail::getPositioningInfo() {
|
||||
|
|
@ -85,6 +83,8 @@ void CTrail::draw(PHLMONITOR pMonitor, const float& a) {
|
|||
if (!validMapped(m_pWindow))
|
||||
return;
|
||||
|
||||
onTick();
|
||||
|
||||
const auto PWINDOW = m_pWindow.lock();
|
||||
|
||||
if (!PWINDOW->m_ruleApplicator->decorate().valueOrDefault())
|
||||
|
|
@ -127,14 +127,13 @@ void CTrail::renderPass(PHLMONITOR pMonitor, const float& a) {
|
|||
glStencilFunc(GL_NOTEQUAL, 1, -1);
|
||||
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
|
||||
|
||||
CBox monbox = {0, 0, g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.x, g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.y};
|
||||
CBox monbox = {0, 0, g_pHyprRenderer->m_renderData.pMonitor->m_transformedSize.x, g_pHyprRenderer->m_renderData.pMonitor->m_transformedSize.y};
|
||||
|
||||
Mat3x3 matrix = g_pHyprOpenGL->m_renderData.monitorProjection.projectBox(monbox, Math::wlTransformToHyprutils(Math::invertTransform(WL_OUTPUT_TRANSFORM_NORMAL)), monbox.rot);
|
||||
Mat3x3 glMatrix = g_pHyprOpenGL->m_renderData.projection.copy().multiply(matrix);
|
||||
Mat3x3 glMatrix = g_pHyprRenderer->projectBoxToTarget(monbox, Math::wlTransformToHyprutils(Math::invertTransform(WL_OUTPUT_TRANSFORM_NORMAL)));
|
||||
|
||||
g_pHyprOpenGL->blend(true);
|
||||
|
||||
glUseProgram(g_pGlobalState->trailShader.program);
|
||||
glUseProgram(g_pGlobalState->trailShader.program());
|
||||
|
||||
glMatrix.transpose();
|
||||
g_pGlobalState->trailShader.setUniformMatrix3fv(SHADER_PROJ, 1, GL_FALSE, glMatrix.getMatrix());
|
||||
|
|
@ -246,21 +245,21 @@ void CTrail::renderPass(PHLMONITOR pMonitor, const float& a) {
|
|||
sc<float>((PWINDOW->m_realPosition->value().y - pMonitor->m_position.y) / pMonitor->m_size.y),
|
||||
sc<float>((PWINDOW->m_realPosition->value().x + PWINDOW->m_realSize->value().x) / pMonitor->m_size.x),
|
||||
sc<float>((PWINDOW->m_realPosition->value().y + PWINDOW->m_realSize->value().y) / pMonitor->m_size.y)};
|
||||
glUniform4f(g_pGlobalState->trailShader.uniformLocations[SHADER_GRADIENT], thisboxopengl.x, thisboxopengl.y, thisboxopengl.w, thisboxopengl.h);
|
||||
glUniform4f(g_pGlobalState->trailShader.uniformLocations[SHADER_COLOR], COLOR.r, COLOR.g, COLOR.b, COLOR.a);
|
||||
glUniform4f(g_pGlobalState->trailShader.getUniformLocation(SHADER_GRADIENT), thisboxopengl.x, thisboxopengl.y, thisboxopengl.w, thisboxopengl.h);
|
||||
glUniform4f(g_pGlobalState->trailShader.getUniformLocation(SHADER_COLOR), COLOR.r, COLOR.g, COLOR.b, COLOR.a);
|
||||
|
||||
CBox transformedBox = monbox;
|
||||
transformedBox.transform(Math::wlTransformToHyprutils(Math::invertTransform(g_pHyprOpenGL->m_renderData.pMonitor->m_transform)), g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.x,
|
||||
g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.y);
|
||||
transformedBox.transform(Math::wlTransformToHyprutils(Math::invertTransform(g_pHyprRenderer->m_renderData.pMonitor->m_transform)), g_pHyprRenderer->m_renderData.pMonitor->m_transformedSize.x,
|
||||
g_pHyprRenderer->m_renderData.pMonitor->m_transformedSize.y);
|
||||
|
||||
glVertexAttribPointer(g_pGlobalState->trailShader.uniformLocations[SHADER_POS_ATTRIB], 2, GL_FLOAT, GL_FALSE, 0, (float*)points.data());
|
||||
glVertexAttribPointer(g_pGlobalState->trailShader.getUniformLocation(SHADER_POS_ATTRIB), 2, GL_FLOAT, GL_FALSE, 0, (float*)points.data());
|
||||
|
||||
glEnableVertexAttribArray(g_pGlobalState->trailShader.uniformLocations[SHADER_POS_ATTRIB]);
|
||||
glEnableVertexAttribArray(g_pGlobalState->trailShader.getUniformLocation(SHADER_POS_ATTRIB));
|
||||
|
||||
if (g_pHyprOpenGL->m_renderData.clipBox.width != 0 && g_pHyprOpenGL->m_renderData.clipBox.height != 0) {
|
||||
CRegion damageClip{g_pHyprOpenGL->m_renderData.clipBox.x, g_pHyprOpenGL->m_renderData.clipBox.y, g_pHyprOpenGL->m_renderData.clipBox.width,
|
||||
g_pHyprOpenGL->m_renderData.clipBox.height};
|
||||
damageClip.intersect(g_pHyprOpenGL->m_renderData.damage);
|
||||
if (g_pHyprRenderer->m_renderData.clipBox.width != 0 && g_pHyprRenderer->m_renderData.clipBox.height != 0) {
|
||||
CRegion damageClip{g_pHyprRenderer->m_renderData.clipBox.x, g_pHyprRenderer->m_renderData.clipBox.y, g_pHyprRenderer->m_renderData.clipBox.width,
|
||||
g_pHyprRenderer->m_renderData.clipBox.height};
|
||||
damageClip.intersect(g_pHyprRenderer->m_renderData.damage);
|
||||
|
||||
if (!damageClip.empty()) {
|
||||
for (auto& RECT : damageClip.getRects()) {
|
||||
|
|
@ -269,13 +268,13 @@ void CTrail::renderPass(PHLMONITOR pMonitor, const float& a) {
|
|||
}
|
||||
}
|
||||
} else {
|
||||
for (auto& RECT : g_pHyprOpenGL->m_renderData.damage.getRects()) {
|
||||
for (auto& RECT : g_pHyprRenderer->m_renderData.damage.getRects()) {
|
||||
g_pHyprOpenGL->scissor(&RECT);
|
||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, points.size());
|
||||
}
|
||||
}
|
||||
|
||||
glDisableVertexAttribArray(g_pGlobalState->trailShader.uniformLocations[SHADER_POS_ATTRIB]);
|
||||
glDisableVertexAttribArray(g_pGlobalState->trailShader.getUniformLocation(SHADER_POS_ATTRIB));
|
||||
|
||||
glClearStencil(0);
|
||||
glClear(GL_STENCIL_BUFFER_BIT);
|
||||
|
|
|
|||
|
|
@ -46,7 +46,6 @@ class CTrail : public IHyprWindowDecoration {
|
|||
virtual void damageEntire();
|
||||
|
||||
private:
|
||||
SP<HOOK_CALLBACK_FN> pTickCb;
|
||||
void onTick();
|
||||
void renderPass(PHLMONITOR pMonitor, const float& a);
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
#include <sstream>
|
||||
|
||||
#define private public
|
||||
#define protected public
|
||||
#include <hyprland/src/Compositor.hpp>
|
||||
#include <hyprland/src/desktop/view/Window.hpp>
|
||||
#include <hyprland/src/config/ConfigManager.hpp>
|
||||
|
|
@ -17,6 +18,10 @@
|
|||
#include <hyprland/src/layout/LayoutManager.hpp>
|
||||
#include <hyprland/src/event/EventBus.hpp>
|
||||
#undef private
|
||||
#undef protected
|
||||
|
||||
using namespace Render;
|
||||
using namespace Render::GL;
|
||||
|
||||
#include "globals.hpp"
|
||||
|
||||
|
|
@ -121,13 +126,13 @@ void onRenderStage(eRenderStage stage) {
|
|||
for (auto& bg : bgWindows) {
|
||||
const auto bgw = bg.lock();
|
||||
|
||||
if (bgw->m_monitor != g_pHyprOpenGL->m_renderData.pMonitor)
|
||||
if (bgw->m_monitor != g_pHyprRenderer->m_renderData.pMonitor)
|
||||
continue;
|
||||
|
||||
// cant use setHidden cuz that sends suspended and shit too that would be laggy
|
||||
bgw->m_hidden = false;
|
||||
|
||||
g_pHyprRenderer->renderWindow(bgw, g_pHyprOpenGL->m_renderData.pMonitor.lock(), Time::steadyNow(), false, RENDER_PASS_ALL, false, true);
|
||||
g_pHyprRenderer->renderWindow(bgw, g_pHyprRenderer->m_renderData.pMonitor.lock(), Time::steadyNow(), false, RENDER_PASS_ALL, false, true);
|
||||
|
||||
bgw->m_hidden = true;
|
||||
}
|
||||
|
|
@ -146,7 +151,7 @@ void onCommitSubsurface(Desktop::View::CSubsurface* thisptr) {
|
|||
|
||||
((origCommitSubsurface)subsurfaceHook->m_original)(thisptr);
|
||||
if (const auto MON = PWINDOW->m_monitor.lock(); MON)
|
||||
g_pHyprOpenGL->markBlurDirtyForMonitor(MON);
|
||||
g_pHyprRenderer->damageMonitor(MON);
|
||||
|
||||
PWINDOW->m_hidden = true;
|
||||
}
|
||||
|
|
@ -164,7 +169,7 @@ void onCommit(void* owner, void* data) {
|
|||
|
||||
((origCommit)commitHook->m_original)(owner, data);
|
||||
if (const auto MON = PWINDOW->m_monitor.lock(); MON)
|
||||
g_pHyprOpenGL->markBlurDirtyForMonitor(MON);
|
||||
g_pHyprRenderer->damageMonitor(MON);
|
||||
|
||||
PWINDOW->m_hidden = true;
|
||||
}
|
||||
|
|
@ -173,15 +178,15 @@ void onConfigReloaded() {
|
|||
static auto* const PCLASS = (Hyprlang::STRING const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprwinwrap:class")->getDataStaticPtr();
|
||||
const std::string classRule(*PCLASS);
|
||||
if (!classRule.empty()) {
|
||||
g_pConfigManager->parseKeyword("windowrulev2", std::string{"float, class:^("} + classRule + ")$");
|
||||
g_pConfigManager->parseKeyword("windowrulev2", std::string{"size 100\% 100\%, class:^("} + classRule + ")$");
|
||||
HyprlandAPI::invokeHyprctlCommand("keyword", std::string{"windowrulev2 float, class:^("} + classRule + ")$");
|
||||
HyprlandAPI::invokeHyprctlCommand("keyword", std::string{"windowrulev2 size 100% 100%, class:^("} + classRule + ")$");
|
||||
}
|
||||
|
||||
static auto* const PTITLE = (Hyprlang::STRING const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprwinwrap:title")->getDataStaticPtr();
|
||||
const std::string titleRule(*PTITLE);
|
||||
if (!titleRule.empty()) {
|
||||
g_pConfigManager->parseKeyword("windowrulev2", std::string{"float, title:^("} + titleRule + ")$");
|
||||
g_pConfigManager->parseKeyword("windowrulev2", std::string{"size 100\% 100\%, title:^("} + titleRule + ")$");
|
||||
HyprlandAPI::invokeHyprctlCommand("keyword", std::string{"windowrulev2 float, title:^("} + titleRule + ")$");
|
||||
HyprlandAPI::invokeHyprctlCommand("keyword", std::string{"windowrulev2 size 100% 100%, title:^("} + titleRule + ")$");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,8 @@
|
|||
#include <hyprland/src/desktop/state/FocusState.hpp>
|
||||
#include <hyprland/src/desktop/view/Window.hpp>
|
||||
#include <hyprland/src/config/ConfigManager.hpp>
|
||||
#include <hyprland/src/config/shared/actions/ConfigActions.hpp>
|
||||
#include <hyprland/src/config/supplementary/executor/Executor.hpp>
|
||||
#include <hyprland/src/render/Renderer.hpp>
|
||||
#include <hyprland/src/managers/KeybindManager.hpp>
|
||||
#undef private
|
||||
|
|
@ -38,7 +40,7 @@ static SDispatchResult moveOrExec(std::string in) {
|
|||
const auto PWINDOW = g_pCompositor->getWindowByRegex(vars[0]);
|
||||
|
||||
if (!PWINDOW)
|
||||
g_pKeybindManager->spawn(vars[1]);
|
||||
Config::Supplementary::executor()->spawn(vars[1]);
|
||||
else {
|
||||
if (monitor->m_activeWorkspace != PWINDOW->m_workspace)
|
||||
g_pCompositor->moveWindowToWorkspaceSafe(PWINDOW, monitor->m_activeWorkspace);
|
||||
|
|
@ -122,7 +124,7 @@ static SDispatchResult closeUnfocused(std::string in) {
|
|||
if (w->m_workspace != monitor->m_activeWorkspace || w->m_monitor != monitor || !w->m_isMapped || w == window)
|
||||
continue;
|
||||
|
||||
g_pCompositor->closeWindow(w);
|
||||
Config::Actions::closeWindow(w);
|
||||
}
|
||||
|
||||
return SDispatchResult{};
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue