diff --git a/src/Model.cc b/src/Model.cc index 95b9933..111fc98 100644 --- a/src/Model.cc +++ b/src/Model.cc @@ -50,18 +50,18 @@ static Direction realizeDirection(const KWin::EffectWindow* window) const KWin::EffectWindow* dock = findDock(window); Direction direction; - QPoint screenDelta; + QPointF screenDelta; if (dock) { - const QRect screenRect = KWin::effects->clientArea(KWin::ScreenArea, dock); + const QRectF screenRect = KWin::effects->clientArea(KWin::ScreenArea, dock); if (dock->width() >= dock->height()) { - if (dock->y() == screenRect.y()) + if (qFuzzyIsNull(dock->y() - screenRect.y())) direction = Direction::Top; else direction = Direction::Bottom; } else { - if (dock->x() == screenRect.x()) + if (qFuzzyIsNull(dock->x() - screenRect.x())) direction = Direction::Left; else direction = Direction::Right; @@ -70,19 +70,19 @@ static Direction realizeDirection(const KWin::EffectWindow* window) screenDelta += screenRect.center(); } else { // Perhaps the dock is hidden, deduce direction to the icon. - const QRect iconRect = window->iconGeometry(); + const QRectF iconRect = window->iconGeometry(); - const KWin::EffectScreen* screen = KWin::effects->screenAt(iconRect.center()); + const KWin::EffectScreen* screen = KWin::effects->screenAt(iconRect.center().toPoint()); const int desktop = KWin::effects->currentDesktop(); - const QRect screenRect = KWin::effects->clientArea(KWin::ScreenArea, screen, desktop); - const QRect constrainedRect = screenRect.intersected(iconRect); + const QRectF screenRect = KWin::effects->clientArea(KWin::ScreenArea, screen, desktop); + const QRectF constrainedRect = screenRect.intersected(iconRect); - if (constrainedRect.left() == screenRect.left()) + if (qFuzzyIsNull(constrainedRect.left() - screenRect.left())) direction = Direction::Left; - else if (constrainedRect.top() == screenRect.top()) + else if (qFuzzyIsNull(constrainedRect.top() - screenRect.top())) direction = Direction::Top; - else if (constrainedRect.right() == screenRect.right()) + else if (qFuzzyIsNull(constrainedRect.right() - screenRect.right())) direction = Direction::Right; else direction = Direction::Bottom; @@ -90,7 +90,7 @@ static Direction realizeDirection(const KWin::EffectWindow* window) screenDelta += screenRect.center(); } - const QRect screenRect = KWin::effects->clientArea(KWin::ScreenArea, window); + const QRectF screenRect = KWin::effects->clientArea(KWin::ScreenArea, window); screenDelta -= screenRect.center(); // Dock and window are on the same screen, no further adjustments are required. @@ -302,8 +302,8 @@ static void transformQuadsLeft( // a better approach is to have a transform method that operates on each // individual vertex, e.g. void Model::transform(WindowVertex& vertex). - const QRect iconRect = window->iconGeometry(); - const QRect windowRect = window->frameGeometry(); + const QRectF iconRect = window->iconGeometry(); + const QRectF windowRect = window->frameGeometry(); const qreal distance = windowRect.right() - iconRect.right() + params.bumpDistance; @@ -345,8 +345,8 @@ static void transformQuadsTop( // a better approach is to have a transform method that operates on each // individual vertex, e.g. void Model::transform(WindowVertex& vertex). - const QRect iconRect = window->iconGeometry(); - const QRect windowRect = window->frameGeometry(); + const QRectF iconRect = window->iconGeometry(); + const QRectF windowRect = window->frameGeometry(); const qreal distance = windowRect.bottom() - iconRect.bottom() + params.bumpDistance; @@ -388,8 +388,8 @@ static void transformQuadsRight( // a better approach is to have a transform method that operates on each // individual vertex, e.g. void Model::transform(WindowVertex& vertex). - const QRect iconRect = window->iconGeometry(); - const QRect windowRect = window->frameGeometry(); + const QRectF iconRect = window->iconGeometry(); + const QRectF windowRect = window->frameGeometry(); const qreal distance = iconRect.left() - windowRect.left() + params.bumpDistance; @@ -431,8 +431,8 @@ static void transformQuadsBottom( // a better approach is to have a transform method that operates on each // individual vertex, e.g. void Model::transform(WindowVertex& vertex). - const QRect iconRect = window->iconGeometry(); - const QRect windowRect = window->frameGeometry(); + const QRectF iconRect = window->iconGeometry(); + const QRectF windowRect = window->frameGeometry(); const qreal distance = iconRect.top() - windowRect.top() + params.bumpDistance; @@ -588,8 +588,8 @@ bool Model::needsClip() const QRegion Model::clipRegion() const { - const QRect iconRect = m_window->iconGeometry(); - QRect clipRect = m_window->expandedGeometry(); + const QRectF iconRect = m_window->iconGeometry(); + QRectF clipRect = m_window->expandedGeometry(); switch (m_direction) { case Direction::Top: @@ -624,45 +624,45 @@ QRegion Model::clipRegion() const Q_UNREACHABLE(); } - return clipRect; + return clipRect.toAlignedRect(); } int Model::computeBumpDistance() const { - const QRect windowRect = m_window->frameGeometry(); - const QRect iconRect = m_window->iconGeometry(); + const QRectF windowRect = m_window->frameGeometry(); + const QRectF iconRect = m_window->iconGeometry(); - int bumpDistance = 0; + qreal bumpDistance = 0; switch (m_direction) { case Direction::Top: - bumpDistance = qMax(0, iconRect.y() + iconRect.height() - windowRect.y()); + bumpDistance = std::max(qreal(0), iconRect.y() + iconRect.height() - windowRect.y()); break; case Direction::Right: - bumpDistance = qMax(0, windowRect.x() + windowRect.width() - iconRect.x()); + bumpDistance = std::max(qreal(0), windowRect.x() + windowRect.width() - iconRect.x()); break; case Direction::Bottom: - bumpDistance = qMax(0, windowRect.y() + windowRect.height() - iconRect.y()); + bumpDistance = std::max(qreal(0), windowRect.y() + windowRect.height() - iconRect.y()); break; case Direction::Left: - bumpDistance = qMax(0, iconRect.x() + iconRect.width() - windowRect.x()); + bumpDistance = std::max(qreal(0), iconRect.x() + iconRect.width() - windowRect.x()); break; default: Q_UNREACHABLE(); } - bumpDistance += qMin(bumpDistance, m_parameters.bumpDistance); + bumpDistance += std::min(bumpDistance, m_parameters.bumpDistance); return bumpDistance; } qreal Model::computeShapeFactor() const { - const QRect windowRect = m_window->frameGeometry(); - const QRect iconRect = m_window->iconGeometry(); + const QRectF windowRect = m_window->frameGeometry(); + const QRectF iconRect = m_window->iconGeometry(); int movingExtent = 0; int distanceToIcon = 0; diff --git a/src/Model.h b/src/Model.h index f4132c7..5f0f713 100644 --- a/src/Model.h +++ b/src/Model.h @@ -45,7 +45,7 @@ class Model { qreal shapeFactor; // How much the transformed window should be raised. - int bumpDistance; + qreal bumpDistance; }; explicit Model(KWin::EffectWindow* window = nullptr); diff --git a/src/YetAnotherMagicLampEffect.cc b/src/YetAnotherMagicLampEffect.cc index 6ddeb37..2661a33 100644 --- a/src/YetAnotherMagicLampEffect.cc +++ b/src/YetAnotherMagicLampEffect.cc @@ -162,7 +162,7 @@ void YetAnotherMagicLampEffect::paintWindow(KWin::EffectWindow* w, int mask, QRe KWin::effects->paintWindow(w, mask, clip, data); } -void YetAnotherMagicLampEffect::deform(KWin::EffectWindow* window, int mask, KWin::WindowPaintData& data, KWin::WindowQuadList& quads) +void YetAnotherMagicLampEffect::apply(KWin::EffectWindow* window, int mask, KWin::WindowPaintData& data, KWin::WindowQuadList& quads) { Q_UNUSED(mask) Q_UNUSED(data) @@ -198,7 +198,7 @@ void YetAnotherMagicLampEffect::slotWindowMinimized(KWin::EffectWindow* w) return; } - const QRect iconRect = w->iconGeometry(); + const QRectF iconRect = w->iconGeometry(); if (!iconRect.isValid()) { return; } @@ -220,7 +220,7 @@ void YetAnotherMagicLampEffect::slotWindowUnminimized(KWin::EffectWindow* w) return; } - const QRect iconRect = w->iconGeometry(); + const QRectF iconRect = w->iconGeometry(); if (!iconRect.isValid()) { return; } diff --git a/src/YetAnotherMagicLampEffect.h b/src/YetAnotherMagicLampEffect.h index dc60d02..e53d474 100644 --- a/src/YetAnotherMagicLampEffect.h +++ b/src/YetAnotherMagicLampEffect.h @@ -22,14 +22,14 @@ #include "common.h" // kwineffects -#include +#include struct AnimationData { Model model; KWin::EffectWindowVisibleRef visibleRef; }; -class YetAnotherMagicLampEffect : public KWin::DeformEffect { +class YetAnotherMagicLampEffect : public KWin::OffscreenEffect { Q_OBJECT public: @@ -49,7 +49,7 @@ class YetAnotherMagicLampEffect : public KWin::DeformEffect { static bool supported(); protected: - void deform(KWin::EffectWindow* window, int mask, KWin::WindowPaintData& data, KWin::WindowQuadList& quads) override; + void apply(KWin::EffectWindow* window, int mask, KWin::WindowPaintData& data, KWin::WindowQuadList& quads) override; private Q_SLOTS: void slotWindowMinimized(KWin::EffectWindow* w);