diff options
| author | Tom Englund <tomenglund26@gmail.com> | 2025-09-27 18:48:00 +0200 |
|---|---|---|
| committer | Vaxry <43317083+vaxerski@users.noreply.github.com> | 2025-09-28 23:20:52 +0200 |
| commit | f854b5bffbdd13cfe7edad0ee157d6947ff99619 (patch) | |
| tree | 5dd07e0d2f2b2da264ccfe4633340bc232eac4ec /src/render/decorations/CHyprDropShadowDecoration.cpp | |
| parent | eb25dfd399d481ce770c8851416b70b077892afc (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.cpp | 22 |
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)); } |
