aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/hyprerror
diff options
context:
space:
mode:
authorvaxerski <[email protected]>2023-01-20 20:48:07 +0100
committervaxerski <[email protected]>2023-01-20 20:48:07 +0100
commit5814d9b2a01c9c1d07fef023ad12196d49dd4780 (patch)
treecef3bf60e2961ddf1cd574d773baf7224c2425b8 /src/hyprerror
parent18330dec4e59529c396d3cdadb32fc9bd763f6b2 (diff)
downloadHyprland-5814d9b2a01c9c1d07fef023ad12196d49dd4780.tar.gz
Hyprland-5814d9b2a01c9c1d07fef023ad12196d49dd4780.zip
make hyprerror follow fadein anim
Diffstat (limited to 'src/hyprerror')
-rw-r--r--src/hyprerror/HyprError.cpp38
-rw-r--r--src/hyprerror/HyprError.hpp18
2 files changed, 42 insertions, 14 deletions
diff --git a/src/hyprerror/HyprError.cpp b/src/hyprerror/HyprError.cpp
index a0111c29..aff94a2d 100644
--- a/src/hyprerror/HyprError.cpp
+++ b/src/hyprerror/HyprError.cpp
@@ -1,6 +1,15 @@
#include "HyprError.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) {
m_szQueued = message;
m_cQueued = color;
@@ -12,6 +21,9 @@ void CHyprError::createQueued() {
m_tTexture.destroyTexture();
}
+ m_fFadeOpacity.setValueAndWarp(0.f);
+ m_fFadeOpacity = 1.f;
+
const auto PMONITOR = g_pCompositor->m_vMonitors.front().get();
const auto SCALE = PMONITOR->scale;
@@ -40,6 +52,8 @@ void CHyprError::createQueued() {
const double WIDTH = PMONITOR->vecPixelSize.x - PAD * 2;
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_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);
@@ -107,12 +121,17 @@ void CHyprError::draw() {
}
if (m_bQueuedDestroy) {
- m_bQueuedDestroy = false;
- m_tTexture.destroyTexture();
- m_bIsCreated = false;
- m_szQueued = "";
- g_pHyprRenderer->damageMonitor(g_pCompositor->m_vMonitors.front().get());
- return;
+ if (!m_fFadeOpacity.isBeingAnimated()) {
+ if (m_fFadeOpacity.fl() == 0.f) {
+ m_bQueuedDestroy = false;
+ m_tTexture.destroyTexture();
+ m_bIsCreated = false;
+ m_szQueued = "";
+ return;
+ } else {
+ m_fFadeOpacity = 0.f;
+ }
+ }
}
const auto PMONITOR = g_pCompositor->m_vMonitors.front().get();
@@ -120,9 +139,12 @@ void CHyprError::draw() {
if (g_pHyprOpenGL->m_RenderData.pMonitor != PMONITOR)
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};
+
+ if (m_fFadeOpacity.isBeingAnimated())
+ g_pHyprRenderer->damageBox(&m_bDamageBox);
- g_pHyprOpenGL->renderTexture(m_tTexture, &windowBox, 1.f, 0);
+ g_pHyprOpenGL->renderTexture(m_tTexture, &monbox, m_fFadeOpacity.fl(), 0);
}
void CHyprError::destroy() {
diff --git a/src/hyprerror/HyprError.hpp b/src/hyprerror/HyprError.hpp
index 4d01e78d..26f90e40 100644
--- a/src/hyprerror/HyprError.hpp
+++ b/src/hyprerror/HyprError.hpp
@@ -2,22 +2,28 @@
#include "../defines.hpp"
#include "../render/Texture.hpp"
+#include "../helpers/AnimatedVariable.hpp"
#include <cairo/cairo.h>
class CHyprError {
public:
+ CHyprError();
+ ~CHyprError();
+
void queueCreate(std::string message, const CColor& color);
void draw();
void destroy();
private:
- void createQueued();
- std::string m_szQueued = "";
- CColor m_cQueued;
- bool m_bQueuedDestroy = false;
- bool m_bIsCreated = false;
- CTexture m_tTexture;
+ void createQueued();
+ std::string m_szQueued = "";
+ CColor m_cQueued;
+ bool m_bQueuedDestroy = false;
+ bool m_bIsCreated = false;
+ 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. \ No newline at end of file