mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-23 00:45:58 +01:00
make hyprerror follow fadein anim
This commit is contained in:
parent
18330dec4e
commit
5814d9b2a0
5 changed files with 50 additions and 21 deletions
|
@ -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>();
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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.
|
|
@ -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())
|
||||||
|
|
Loading…
Reference in a new issue