make hyprerror follow fadein anim

This commit is contained in:
Vaxry 2023-01-20 20:48:07 +01:00
parent 18330dec4e
commit 5814d9b2a0
5 changed files with 50 additions and 21 deletions

View file

@ -306,8 +306,6 @@ void CCompositor::startCompositor() {
// Init all the managers BEFORE we start with the wayland server so that ALL of the stuff is initialized // Init all the managers BEFORE we start with the wayland server so that ALL of the stuff is initialized
// properly and we dont get any bad mem reads. // properly and we dont get any bad mem reads.
// //
Debug::log(LOG, "Creating the CHyprError!");
g_pHyprError = std::make_unique<CHyprError>();
Debug::log(LOG, "Creating the KeybindManager!"); Debug::log(LOG, "Creating the KeybindManager!");
g_pKeybindManager = std::make_unique<CKeybindManager>(); g_pKeybindManager = std::make_unique<CKeybindManager>();
@ -321,6 +319,9 @@ void CCompositor::startCompositor() {
Debug::log(LOG, "Creating the ConfigManager!"); Debug::log(LOG, "Creating the ConfigManager!");
g_pConfigManager = std::make_unique<CConfigManager>(); g_pConfigManager = std::make_unique<CConfigManager>();
Debug::log(LOG, "Creating the CHyprError!");
g_pHyprError = std::make_unique<CHyprError>();
Debug::log(LOG, "Creating the ThreadManager!"); Debug::log(LOG, "Creating the ThreadManager!");
g_pThreadManager = std::make_unique<CThreadManager>(); g_pThreadManager = std::make_unique<CThreadManager>();

View file

@ -11,8 +11,8 @@ enum ANIMATEDVARTYPE {
}; };
enum AVARDAMAGEPOLICY { enum AVARDAMAGEPOLICY {
AVARDAMAGE_INVALID = -1, AVARDAMAGE_NONE = -1,
AVARDAMAGE_ENTIRE = 0, AVARDAMAGE_ENTIRE = 0,
AVARDAMAGE_BORDER, AVARDAMAGE_BORDER,
AVARDAMAGE_SHADOW AVARDAMAGE_SHADOW
}; };
@ -243,7 +243,7 @@ class CAnimatedVariable {
std::chrono::system_clock::time_point animationBegin; std::chrono::system_clock::time_point animationBegin;
ANIMATEDVARTYPE m_eVarType = AVARTYPE_INVALID; ANIMATEDVARTYPE m_eVarType = AVARTYPE_INVALID;
AVARDAMAGEPOLICY m_eDamagePolicy = AVARDAMAGE_INVALID; AVARDAMAGEPOLICY m_eDamagePolicy = AVARDAMAGE_NONE;
bool m_bRemoveEndAfterRan = true; bool m_bRemoveEndAfterRan = true;
bool m_bRemoveBeginAfterRan = true; bool m_bRemoveBeginAfterRan = true;

View file

@ -1,6 +1,15 @@
#include "HyprError.hpp" #include "HyprError.hpp"
#include "../Compositor.hpp" #include "../Compositor.hpp"
CHyprError::CHyprError() {
m_fFadeOpacity.create(AVARTYPE_FLOAT, g_pConfigManager->getAnimationPropertyConfig("fadeIn"), nullptr, AVARDAMAGE_NONE);
m_fFadeOpacity.registerVar();
}
CHyprError::~CHyprError() {
m_fFadeOpacity.unregister();
}
void CHyprError::queueCreate(std::string message, const CColor& color) { void CHyprError::queueCreate(std::string message, const CColor& color) {
m_szQueued = message; m_szQueued = message;
m_cQueued = color; m_cQueued = color;
@ -12,6 +21,9 @@ void CHyprError::createQueued() {
m_tTexture.destroyTexture(); m_tTexture.destroyTexture();
} }
m_fFadeOpacity.setValueAndWarp(0.f);
m_fFadeOpacity = 1.f;
const auto PMONITOR = g_pCompositor->m_vMonitors.front().get(); const auto PMONITOR = g_pCompositor->m_vMonitors.front().get();
const auto SCALE = PMONITOR->scale; const auto SCALE = PMONITOR->scale;
@ -40,6 +52,8 @@ void CHyprError::createQueued() {
const double WIDTH = PMONITOR->vecPixelSize.x - PAD * 2; const double WIDTH = PMONITOR->vecPixelSize.x - PAD * 2;
const double HEIGHT = (FONTSIZE + 2 * (FONTSIZE / 10.0)) * LINECOUNT + 3; const double HEIGHT = (FONTSIZE + 2 * (FONTSIZE / 10.0)) * LINECOUNT + 3;
m_bDamageBox = {(int)PMONITOR->vecPosition.x, (int)PMONITOR->vecPosition.y, (int)PMONITOR->vecPixelSize.x, (int)HEIGHT + (int)PAD * 2};
cairo_new_sub_path(CAIRO); cairo_new_sub_path(CAIRO);
cairo_arc(CAIRO, X + WIDTH - RADIUS, Y + RADIUS, RADIUS, -90 * DEGREES, 0 * DEGREES); cairo_arc(CAIRO, X + WIDTH - RADIUS, Y + RADIUS, RADIUS, -90 * DEGREES, 0 * DEGREES);
cairo_arc(CAIRO, X + WIDTH - RADIUS, Y + HEIGHT - RADIUS, RADIUS, 0 * DEGREES, 90 * DEGREES); cairo_arc(CAIRO, X + WIDTH - RADIUS, Y + HEIGHT - RADIUS, RADIUS, 0 * DEGREES, 90 * DEGREES);
@ -107,12 +121,17 @@ void CHyprError::draw() {
} }
if (m_bQueuedDestroy) { if (m_bQueuedDestroy) {
m_bQueuedDestroy = false; if (!m_fFadeOpacity.isBeingAnimated()) {
m_tTexture.destroyTexture(); if (m_fFadeOpacity.fl() == 0.f) {
m_bIsCreated = false; m_bQueuedDestroy = false;
m_szQueued = ""; m_tTexture.destroyTexture();
g_pHyprRenderer->damageMonitor(g_pCompositor->m_vMonitors.front().get()); m_bIsCreated = false;
return; m_szQueued = "";
return;
} else {
m_fFadeOpacity = 0.f;
}
}
} }
const auto PMONITOR = g_pCompositor->m_vMonitors.front().get(); const auto PMONITOR = g_pCompositor->m_vMonitors.front().get();
@ -120,9 +139,12 @@ void CHyprError::draw() {
if (g_pHyprOpenGL->m_RenderData.pMonitor != PMONITOR) if (g_pHyprOpenGL->m_RenderData.pMonitor != PMONITOR)
return; // wrong mon return; // wrong mon
wlr_box windowBox = {0, 0, PMONITOR->vecPixelSize.x, PMONITOR->vecPixelSize.y}; wlr_box monbox = {0, 0, PMONITOR->vecPixelSize.x, PMONITOR->vecPixelSize.y};
g_pHyprOpenGL->renderTexture(m_tTexture, &windowBox, 1.f, 0); if (m_fFadeOpacity.isBeingAnimated())
g_pHyprRenderer->damageBox(&m_bDamageBox);
g_pHyprOpenGL->renderTexture(m_tTexture, &monbox, m_fFadeOpacity.fl(), 0);
} }
void CHyprError::destroy() { void CHyprError::destroy() {

View file

@ -2,22 +2,28 @@
#include "../defines.hpp" #include "../defines.hpp"
#include "../render/Texture.hpp" #include "../render/Texture.hpp"
#include "../helpers/AnimatedVariable.hpp"
#include <cairo/cairo.h> #include <cairo/cairo.h>
class CHyprError { class CHyprError {
public: public:
CHyprError();
~CHyprError();
void queueCreate(std::string message, const CColor& color); void queueCreate(std::string message, const CColor& color);
void draw(); void draw();
void destroy(); void destroy();
private: private:
void createQueued(); void createQueued();
std::string m_szQueued = ""; std::string m_szQueued = "";
CColor m_cQueued; CColor m_cQueued;
bool m_bQueuedDestroy = false; bool m_bQueuedDestroy = false;
bool m_bIsCreated = false; bool m_bIsCreated = false;
CTexture m_tTexture; CTexture m_tTexture;
CAnimatedVariable m_fFadeOpacity;
wlr_box m_bDamageBox = {0, 0, 0, 0};
}; };
inline std::unique_ptr<CHyprError> g_pHyprError; // This is a full-screen error. Treat it with respect, and there can only be one at a time. inline std::unique_ptr<CHyprError> g_pHyprError; // This is a full-screen error. Treat it with respect, and there can only be one at a time.

View file

@ -223,7 +223,6 @@ void CAnimationManager::tick() {
break; break;
} }
default: { default: {
Debug::log(ERR, "av has damage policy INVALID???");
break; break;
} }
} }
@ -233,7 +232,8 @@ void CAnimationManager::tick() {
g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.goalv()); g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.goalv());
// manually schedule a frame // manually schedule a frame
g_pCompositor->scheduleFrameForMonitor(PMONITOR); if (PMONITOR)
g_pCompositor->scheduleFrameForMonitor(PMONITOR);
// check if we did not finish animating. If so, trigger onAnimationEnd. // check if we did not finish animating. If so, trigger onAnimationEnd.
if (!av->isBeingAnimated()) if (!av->isBeingAnimated())