summaryrefslogtreecommitdiff
path: root/src/render/pass/RectPassElement.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/render/pass/RectPassElement.cpp')
-rw-r--r--src/render/pass/RectPassElement.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/render/pass/RectPassElement.cpp b/src/render/pass/RectPassElement.cpp
new file mode 100644
index 00000000..73727e58
--- /dev/null
+++ b/src/render/pass/RectPassElement.cpp
@@ -0,0 +1,29 @@
+#include "RectPassElement.hpp"
+#include "../OpenGL.hpp"
+
+CRectPassElement::CRectPassElement(const CRectPassElement::SRectData& data_) : data(data_) {
+ ;
+}
+
+void CRectPassElement::draw(const CRegion& damage) {
+ if (data.color.a == 1.F || !data.blur)
+ g_pHyprOpenGL->renderRectWithDamage(&data.box, data.color, damage, data.round);
+ else
+ g_pHyprOpenGL->renderRectWithBlur(&data.box, data.color, data.round, data.blurA, data.xray);
+}
+
+bool CRectPassElement::needsLiveBlur() {
+ return data.color.a < 1.F && !data.xray && data.blur;
+}
+
+bool CRectPassElement::needsPrecomputeBlur() {
+ return data.color.a < 1.F && data.xray && data.blur;
+}
+
+std::optional<CBox> CRectPassElement::boundingBox() {
+ return data.box.expand(-data.round);
+}
+
+CRegion CRectPassElement::opaqueRegion() {
+ return data.color.a >= 1.F ? *boundingBox() : CRegion{};
+}