mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-05 09:05:59 +01:00
hyprerror: make hyprerror reserve space (#8040)
This commit is contained in:
parent
60308a2bb5
commit
91299f7039
3 changed files with 45 additions and 4 deletions
|
@ -3,6 +3,9 @@
|
||||||
#include "../Compositor.hpp"
|
#include "../Compositor.hpp"
|
||||||
#include "../config/ConfigValue.hpp"
|
#include "../config/ConfigValue.hpp"
|
||||||
|
|
||||||
|
#include <hyprutils/utils/ScopeGuard.hpp>
|
||||||
|
using namespace Hyprutils::Utils;
|
||||||
|
|
||||||
CHyprError::CHyprError() {
|
CHyprError::CHyprError() {
|
||||||
m_fFadeOpacity.create(AVARTYPE_FLOAT, g_pConfigManager->getAnimationPropertyConfig("fadeIn"), AVARDAMAGE_NONE);
|
m_fFadeOpacity.create(AVARTYPE_FLOAT, g_pConfigManager->getAnimationPropertyConfig("fadeIn"), AVARDAMAGE_NONE);
|
||||||
m_fFadeOpacity.registerVar();
|
m_fFadeOpacity.registerVar();
|
||||||
|
@ -130,6 +133,8 @@ void CHyprError::createQueued() {
|
||||||
}
|
}
|
||||||
m_szQueued = "";
|
m_szQueued = "";
|
||||||
|
|
||||||
|
m_fLastHeight = yoffset + PAD + 1;
|
||||||
|
|
||||||
pango_font_description_free(pangoFD);
|
pango_font_description_free(pangoFD);
|
||||||
g_object_unref(layoutText);
|
g_object_unref(layoutText);
|
||||||
|
|
||||||
|
@ -158,6 +163,8 @@ void CHyprError::createQueued() {
|
||||||
m_cQueued = CColor();
|
m_cQueued = CColor();
|
||||||
|
|
||||||
g_pHyprRenderer->damageMonitor(PMONITOR);
|
g_pHyprRenderer->damageMonitor(PMONITOR);
|
||||||
|
|
||||||
|
g_pHyprRenderer->arrangeLayersForMonitor(PMONITOR->ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CHyprError::draw() {
|
void CHyprError::draw() {
|
||||||
|
@ -174,6 +181,11 @@ void CHyprError::draw() {
|
||||||
m_pTexture->destroyTexture();
|
m_pTexture->destroyTexture();
|
||||||
m_bIsCreated = false;
|
m_bIsCreated = false;
|
||||||
m_szQueued = "";
|
m_szQueued = "";
|
||||||
|
|
||||||
|
for (auto& m : g_pCompositor->m_vMonitors) {
|
||||||
|
g_pHyprRenderer->arrangeLayersForMonitor(m->ID);
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
m_fFadeOpacity.setConfig(g_pConfigManager->getAnimationPropertyConfig("fadeOut"));
|
m_fFadeOpacity.setConfig(g_pConfigManager->getAnimationPropertyConfig("fadeOut"));
|
||||||
|
@ -203,3 +215,11 @@ void CHyprError::destroy() {
|
||||||
else
|
else
|
||||||
m_szQueued = "";
|
m_szQueued = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CHyprError::active() {
|
||||||
|
return m_bIsCreated;
|
||||||
|
}
|
||||||
|
|
||||||
|
float CHyprError::height() {
|
||||||
|
return m_fLastHeight;
|
||||||
|
}
|
||||||
|
|
|
@ -15,6 +15,9 @@ class CHyprError {
|
||||||
void draw();
|
void draw();
|
||||||
void destroy();
|
void destroy();
|
||||||
|
|
||||||
|
bool active();
|
||||||
|
float height(); // logical
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void createQueued();
|
void createQueued();
|
||||||
std::string m_szQueued = "";
|
std::string m_szQueued = "";
|
||||||
|
@ -24,6 +27,7 @@ class CHyprError {
|
||||||
SP<CTexture> m_pTexture;
|
SP<CTexture> m_pTexture;
|
||||||
CAnimatedVariable<float> m_fFadeOpacity;
|
CAnimatedVariable<float> m_fFadeOpacity;
|
||||||
CBox m_bDamageBox = {0, 0, 0, 0};
|
CBox m_bDamageBox = {0, 0, 0, 0};
|
||||||
|
float m_fLastHeight = 0.F;
|
||||||
|
|
||||||
bool m_bMonitorChanged = false;
|
bool m_bMonitorChanged = false;
|
||||||
};
|
};
|
||||||
|
|
|
@ -97,6 +97,16 @@ CHyprRenderer::CHyprRenderer() {
|
||||||
ensureCursorRenderingMode();
|
ensureCursorRenderingMode();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
static auto P3 = g_pHookSystem->hookDynamic("focusedMon", [&](void* self, SCallbackInfo& info, std::any param) {
|
||||||
|
g_pEventLoopManager->doLater([this]() {
|
||||||
|
if (!g_pHyprError->active())
|
||||||
|
return;
|
||||||
|
for (auto& m : g_pCompositor->m_vMonitors) {
|
||||||
|
arrangeLayersForMonitor(m->ID);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
m_pCursorTicker = wl_event_loop_add_timer(g_pCompositor->m_sWLEventLoop, cursorTicker, nullptr);
|
m_pCursorTicker = wl_event_loop_add_timer(g_pCompositor->m_sWLEventLoop, cursorTicker, nullptr);
|
||||||
wl_event_source_timer_update(m_pCursorTicker, 500);
|
wl_event_source_timer_update(m_pCursorTicker, 500);
|
||||||
|
|
||||||
|
@ -1757,6 +1767,13 @@ void CHyprRenderer::arrangeLayersForMonitor(const MONITORID& monitor) {
|
||||||
|
|
||||||
CBox usableArea = {PMONITOR->vecPosition.x, PMONITOR->vecPosition.y, PMONITOR->vecSize.x, PMONITOR->vecSize.y};
|
CBox usableArea = {PMONITOR->vecPosition.x, PMONITOR->vecPosition.y, PMONITOR->vecSize.x, PMONITOR->vecSize.y};
|
||||||
|
|
||||||
|
if (g_pHyprError->active() && g_pCompositor->m_pLastMonitor == PMONITOR->self) {
|
||||||
|
const auto HEIGHT = g_pHyprError->height();
|
||||||
|
PMONITOR->vecReservedTopLeft.y = HEIGHT;
|
||||||
|
usableArea.y += HEIGHT;
|
||||||
|
usableArea.h -= HEIGHT;
|
||||||
|
}
|
||||||
|
|
||||||
for (auto& la : PMONITOR->m_aLayerSurfaceLayers) {
|
for (auto& la : PMONITOR->m_aLayerSurfaceLayers) {
|
||||||
std::stable_sort(la.begin(), la.end(), [](const PHLLSREF& a, const PHLLSREF& b) { return a->order > b->order; });
|
std::stable_sort(la.begin(), la.end(), [](const PHLLSREF& a, const PHLLSREF& b) { return a->order > b->order; });
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue