mirror of
https://github.com/hyprwm/hyprland-plugins.git
synced 2026-05-07 19:28:00 +02:00
fix(hyprexpo): update for latest hyprland - Migrate globals to Config and Render::GL namespaces - Update IPassElement interface (type, draw) - Replace CFramebuffer with SP<IFramebuffer> - Remove obsolete renderer calls (clear, makeEGLCurrent) - Switch to CConstVarList for config parsing
This commit is contained in:
parent
3e38db916a
commit
4a3cfcbc34
5 changed files with 36 additions and 24 deletions
|
|
@ -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,12 +8,14 @@ class COverviewPassElement : public IPassElement {
|
|||
COverviewPassElement();
|
||||
virtual ~COverviewPassElement() = default;
|
||||
|
||||
virtual void draw(const CRegion& damage);
|
||||
virtual std::vector<UP<IPassElement>> draw() override;
|
||||
virtual bool needsLiveBlur();
|
||||
virtual bool needsPrecomputeBlur();
|
||||
virtual std::optional<CBox> boundingBox();
|
||||
virtual CRegion opaqueRegion();
|
||||
|
||||
virtual ePassElementType type() override { return EK_CUSTOM; }
|
||||
|
||||
virtual const char* passName() {
|
||||
return "COverviewPassElement";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,6 +1,12 @@
|
|||
#include "overview.hpp"
|
||||
#include <any>
|
||||
#include <hyprland/src/render/gl/GLFramebuffer.hpp>
|
||||
#include <hyprland/src/render/pass/ClearPassElement.hpp>
|
||||
#include <hyprland/src/config/shared/animation/AnimationTree.hpp>
|
||||
#include <hyprutils/string/ConstVarList.hpp>
|
||||
using namespace Hyprutils::String;
|
||||
#define private public
|
||||
#define protected public
|
||||
#include <hyprland/src/render/Renderer.hpp>
|
||||
#include <hyprland/src/Compositor.hpp>
|
||||
#include <hyprland/src/desktop/state/FocusState.hpp>
|
||||
|
|
@ -20,10 +26,10 @@ static void damageMonitor(WP<Hyprutils::Animation::CBaseAnimatedVariable> thispt
|
|||
}
|
||||
|
||||
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());
|
||||
// (pMonitor.lock());
|
||||
}
|
||||
|
||||
COverview::COverview(PHLWORKSPACE startedOn_, bool swipe_) : startedOn(startedOn_), swipe(swipe_) {
|
||||
|
|
@ -43,12 +49,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,7 +126,7 @@ 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;
|
||||
|
|
@ -141,12 +147,12 @@ 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<Render::GL::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::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 +181,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 +195,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,7 +263,7 @@ void COverview::redrawID(int id, bool forcelowres) {
|
|||
|
||||
blockOverviewRendering = true;
|
||||
|
||||
g_pHyprRenderer->makeEGLCurrent();
|
||||
|
||||
|
||||
id = std::clamp(id, 0, SIDE_LENGTH * SIDE_LENGTH);
|
||||
|
||||
|
|
@ -273,15 +279,15 @@ 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<Render::GL::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::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 +315,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;
|
||||
|
|
@ -443,7 +449,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 +457,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});
|
||||
Render::GL::g_pHyprOpenGL->renderTextureInternal(images[x + y * SIDE_LENGTH].fb->getTexture(), texbox, {.damage = &damage, .a = 1.0});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,9 @@
|
|||
#include "globals.hpp"
|
||||
#include <hyprland/src/desktop/DesktopTypes.hpp>
|
||||
#include <hyprland/src/render/Framebuffer.hpp>
|
||||
#include <hyprutils/memory/SharedPtr.hpp>
|
||||
#include <hyprutils/memory/UniquePtr.hpp>
|
||||
using namespace Hyprutils::Memory;
|
||||
#include <hyprland/src/helpers/AnimatedVariable.hpp>
|
||||
#include <hyprland/src/event/EventBus.hpp>
|
||||
#include <vector>
|
||||
|
|
@ -54,7 +57,7 @@ class COverview {
|
|||
bool damageDirty = false;
|
||||
|
||||
struct SWorkspaceImage {
|
||||
CFramebuffer fb;
|
||||
SP<Render::IFramebuffer> fb;
|
||||
int64_t workspaceID = -1;
|
||||
PHLWORKSPACE pWorkspace;
|
||||
CBox box;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue