summaryrefslogtreecommitdiff
path: root/src/render/decorations/CHyprDropShadowDecoration.cpp
diff options
context:
space:
mode:
authorTom Englund <tomenglund26@gmail.com>2025-09-27 18:48:00 +0200
committerVaxry <43317083+vaxerski@users.noreply.github.com>2025-09-28 23:20:52 +0200
commitf854b5bffbdd13cfe7edad0ee157d6947ff99619 (patch)
tree5dd07e0d2f2b2da264ccfe4633340bc232eac4ec /src/render/decorations/CHyprDropShadowDecoration.cpp
parenteb25dfd399d481ce770c8851416b70b077892afc (diff)
deco: reduce virtual calls in drop shadow
damageEntire() in CHyprdDropShadow is pretty much called per window per frame, instead of all the PWINDOW-> virtual calls, store pos and size once and move the duplicated code to a lambda. reducing it a bit. shows up in profiling as minor waste.
Diffstat (limited to 'src/render/decorations/CHyprDropShadowDecoration.cpp')
-rw-r--r--src/render/decorations/CHyprDropShadowDecoration.cpp22
1 files changed, 12 insertions, 10 deletions
diff --git a/src/render/decorations/CHyprDropShadowDecoration.cpp b/src/render/decorations/CHyprDropShadowDecoration.cpp
index 50841d6b..bcc4c84e 100644
--- a/src/render/decorations/CHyprDropShadowDecoration.cpp
+++ b/src/render/decorations/CHyprDropShadowDecoration.cpp
@@ -42,15 +42,19 @@ void CHyprDropShadowDecoration::damageEntire() {
return; // disabled
const auto PWINDOW = m_window.lock();
+ const auto pos = PWINDOW->m_realPosition->value();
+ const auto size = PWINDOW->m_realSize->value();
- CBox shadowBox = {PWINDOW->m_realPosition->value().x - m_extents.topLeft.x, PWINDOW->m_realPosition->value().y - m_extents.topLeft.y,
- PWINDOW->m_realSize->value().x + m_extents.topLeft.x + m_extents.bottomRight.x,
- PWINDOW->m_realSize->value().y + m_extents.topLeft.y + m_extents.bottomRight.y};
+ CBox shadowBox = {pos.x - m_extents.topLeft.x, pos.y - m_extents.topLeft.y, pos.x + size.x + m_extents.bottomRight.x, pos.y + size.y + m_extents.bottomRight.y};
- const auto PWORKSPACE = PWINDOW->m_workspace;
- if (PWORKSPACE && PWORKSPACE->m_renderOffset->isBeingAnimated() && !PWINDOW->m_pinned)
- shadowBox.translate(PWORKSPACE->m_renderOffset->value());
- shadowBox.translate(PWINDOW->m_floatingOffset);
+ const auto PWORKSPACE = PWINDOW->m_workspace;
+ const auto applyOffset = [&](CBox& b) {
+ if (PWORKSPACE && PWORKSPACE->m_renderOffset->isBeingAnimated() && !PWINDOW->m_pinned)
+ b.translate(PWORKSPACE->m_renderOffset->value());
+ b.translate(PWINDOW->m_floatingOffset);
+ };
+
+ applyOffset(shadowBox);
static auto PSHADOWIGNOREWINDOW = CConfigValue<Hyprlang::INT>("decoration:shadow:ignore_window");
const auto ROUNDING = PWINDOW->rounding();
@@ -59,9 +63,7 @@ void CHyprDropShadowDecoration::damageEntire() {
CRegion shadowRegion(shadowBox);
if (*PSHADOWIGNOREWINDOW) {
CBox surfaceBox = PWINDOW->getWindowMainSurfaceBox();
- if (PWORKSPACE && PWORKSPACE->m_renderOffset->isBeingAnimated() && !PWINDOW->m_pinned)
- surfaceBox.translate(PWORKSPACE->m_renderOffset->value());
- surfaceBox.translate(PWINDOW->m_floatingOffset);
+ applyOffset(surfaceBox);
surfaceBox.expand(-ROUNDINGSIZE);
shadowRegion.subtract(CRegion(surfaceBox));
}