kwin/effects/diminactive/diminactive.h

131 lines
3.5 KiB
C
Raw Normal View History

/********************************************************************
KWin - the KDE window manager
This file is part of the KDE project.
Copyright (C) 2007 Lubos Lunak <l.lunak@kde.org>
Copyright (C) 2007 Christian Nitschkowski <christian.nitschkowski@kdemail.net>
[effects] Rewrite the Dim Inactive effect Summary: The Dim Inactive effect was rewritten mostly to fix most of issues with it, e.g. after leaving a full screen effect(e.g. Desktop Grid) windows sometimes are not dimmed back, or when a window becomes inactive there is no smooth transition, etc. {F5956124} //Before: the window is not smoothly dimmed.// {F5956127} //After: the window is smoothly dimmed.// In combination with an effect that animates the disappearing of windows, e.g. Glide, the rewritten Dim Inactive effect doesn't "flash" windows. If an active window has been closed, it will stay bright. If an inactive window has been closed, it will stay dimmed. Among other changes, the KCM has been re-designed to follow common KCM design in Plasma: {F5956128, layout=center, size=full} The way the rewritten Dim Inactive effect handles flashing/flickering problem can be reused in the Dialog Parent effect. ### Demo {F5959885} //Before: dimming of a window group.// {F5959886} //After: Dimming of a window group.// Depends on D13740 CCBUG: 359251 Test Plan: Test plan #1 * Activated the Desktop Grid effect * Dimmed windows smoothly brightened * Left desktop grid * Windows dimmed back Test plan #2 * Opened Dolphin and its Preferences window * Clicked on desktop, both Dolphin and the Preferences window dimmed * Clicked on Dolphin, both windows smoothly brightened back Reviewers: #kwin, #plasma, #vdg, davidedmundson Reviewed By: #kwin, #plasma, #vdg, davidedmundson Subscribers: davidedmundson, abetts, ngraham, kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D13720
2018-06-20 10:16:31 +00:00
Copyright (C) 2018 Vlad Zagorodniy <vladzzag@gmail.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************/
#ifndef KWIN_DIMINACTIVE_H
#define KWIN_DIMINACTIVE_H
[effects] Rewrite the Dim Inactive effect Summary: The Dim Inactive effect was rewritten mostly to fix most of issues with it, e.g. after leaving a full screen effect(e.g. Desktop Grid) windows sometimes are not dimmed back, or when a window becomes inactive there is no smooth transition, etc. {F5956124} //Before: the window is not smoothly dimmed.// {F5956127} //After: the window is smoothly dimmed.// In combination with an effect that animates the disappearing of windows, e.g. Glide, the rewritten Dim Inactive effect doesn't "flash" windows. If an active window has been closed, it will stay bright. If an inactive window has been closed, it will stay dimmed. Among other changes, the KCM has been re-designed to follow common KCM design in Plasma: {F5956128, layout=center, size=full} The way the rewritten Dim Inactive effect handles flashing/flickering problem can be reused in the Dialog Parent effect. ### Demo {F5959885} //Before: dimming of a window group.// {F5959886} //After: Dimming of a window group.// Depends on D13740 CCBUG: 359251 Test Plan: Test plan #1 * Activated the Desktop Grid effect * Dimmed windows smoothly brightened * Left desktop grid * Windows dimmed back Test plan #2 * Opened Dolphin and its Preferences window * Clicked on desktop, both Dolphin and the Preferences window dimmed * Clicked on Dolphin, both windows smoothly brightened back Reviewers: #kwin, #plasma, #vdg, davidedmundson Reviewed By: #kwin, #plasma, #vdg, davidedmundson Subscribers: davidedmundson, abetts, ngraham, kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D13720
2018-06-20 10:16:31 +00:00
// kwineffects
#include <kwineffects.h>
namespace KWin
{
[effects] Rewrite the Dim Inactive effect Summary: The Dim Inactive effect was rewritten mostly to fix most of issues with it, e.g. after leaving a full screen effect(e.g. Desktop Grid) windows sometimes are not dimmed back, or when a window becomes inactive there is no smooth transition, etc. {F5956124} //Before: the window is not smoothly dimmed.// {F5956127} //After: the window is smoothly dimmed.// In combination with an effect that animates the disappearing of windows, e.g. Glide, the rewritten Dim Inactive effect doesn't "flash" windows. If an active window has been closed, it will stay bright. If an inactive window has been closed, it will stay dimmed. Among other changes, the KCM has been re-designed to follow common KCM design in Plasma: {F5956128, layout=center, size=full} The way the rewritten Dim Inactive effect handles flashing/flickering problem can be reused in the Dialog Parent effect. ### Demo {F5959885} //Before: dimming of a window group.// {F5959886} //After: Dimming of a window group.// Depends on D13740 CCBUG: 359251 Test Plan: Test plan #1 * Activated the Desktop Grid effect * Dimmed windows smoothly brightened * Left desktop grid * Windows dimmed back Test plan #2 * Opened Dolphin and its Preferences window * Clicked on desktop, both Dolphin and the Preferences window dimmed * Clicked on Dolphin, both windows smoothly brightened back Reviewers: #kwin, #plasma, #vdg, davidedmundson Reviewed By: #kwin, #plasma, #vdg, davidedmundson Subscribers: davidedmundson, abetts, ngraham, kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D13720
2018-06-20 10:16:31 +00:00
class DimInactiveEffect : public Effect
2011-01-30 14:34:42 +00:00
{
Q_OBJECT
[effects] Rewrite the Dim Inactive effect Summary: The Dim Inactive effect was rewritten mostly to fix most of issues with it, e.g. after leaving a full screen effect(e.g. Desktop Grid) windows sometimes are not dimmed back, or when a window becomes inactive there is no smooth transition, etc. {F5956124} //Before: the window is not smoothly dimmed.// {F5956127} //After: the window is smoothly dimmed.// In combination with an effect that animates the disappearing of windows, e.g. Glide, the rewritten Dim Inactive effect doesn't "flash" windows. If an active window has been closed, it will stay bright. If an inactive window has been closed, it will stay dimmed. Among other changes, the KCM has been re-designed to follow common KCM design in Plasma: {F5956128, layout=center, size=full} The way the rewritten Dim Inactive effect handles flashing/flickering problem can be reused in the Dialog Parent effect. ### Demo {F5959885} //Before: dimming of a window group.// {F5959886} //After: Dimming of a window group.// Depends on D13740 CCBUG: 359251 Test Plan: Test plan #1 * Activated the Desktop Grid effect * Dimmed windows smoothly brightened * Left desktop grid * Windows dimmed back Test plan #2 * Opened Dolphin and its Preferences window * Clicked on desktop, both Dolphin and the Preferences window dimmed * Clicked on Dolphin, both windows smoothly brightened back Reviewers: #kwin, #plasma, #vdg, davidedmundson Reviewed By: #kwin, #plasma, #vdg, davidedmundson Subscribers: davidedmundson, abetts, ngraham, kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D13720
2018-06-20 10:16:31 +00:00
Q_PROPERTY(int dimStrength READ dimStrength)
Q_PROPERTY(bool dimPanels READ dimPanels)
Q_PROPERTY(bool dimDesktop READ dimDesktop)
Q_PROPERTY(bool dimKeepAbove READ dimKeepAbove)
Q_PROPERTY(bool dimByGroup READ dimByGroup)
2011-01-30 14:34:42 +00:00
public:
DimInactiveEffect();
[effects] Rewrite the Dim Inactive effect Summary: The Dim Inactive effect was rewritten mostly to fix most of issues with it, e.g. after leaving a full screen effect(e.g. Desktop Grid) windows sometimes are not dimmed back, or when a window becomes inactive there is no smooth transition, etc. {F5956124} //Before: the window is not smoothly dimmed.// {F5956127} //After: the window is smoothly dimmed.// In combination with an effect that animates the disappearing of windows, e.g. Glide, the rewritten Dim Inactive effect doesn't "flash" windows. If an active window has been closed, it will stay bright. If an inactive window has been closed, it will stay dimmed. Among other changes, the KCM has been re-designed to follow common KCM design in Plasma: {F5956128, layout=center, size=full} The way the rewritten Dim Inactive effect handles flashing/flickering problem can be reused in the Dialog Parent effect. ### Demo {F5959885} //Before: dimming of a window group.// {F5959886} //After: Dimming of a window group.// Depends on D13740 CCBUG: 359251 Test Plan: Test plan #1 * Activated the Desktop Grid effect * Dimmed windows smoothly brightened * Left desktop grid * Windows dimmed back Test plan #2 * Opened Dolphin and its Preferences window * Clicked on desktop, both Dolphin and the Preferences window dimmed * Clicked on Dolphin, both windows smoothly brightened back Reviewers: #kwin, #plasma, #vdg, davidedmundson Reviewed By: #kwin, #plasma, #vdg, davidedmundson Subscribers: davidedmundson, abetts, ngraham, kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D13720
2018-06-20 10:16:31 +00:00
~DimInactiveEffect() override;
void reconfigure(ReconfigureFlags flags) override;
void prePaintScreen(ScreenPrePaintData &data, int time) override;
void paintWindow(EffectWindow *w, int mask, QRegion region, WindowPaintData &data) override;
void postPaintScreen() override;
int requestedEffectChainPosition() const override;
bool isActive() const override;
int dimStrength() const;
bool dimPanels() const;
bool dimDesktop() const;
bool dimKeepAbove() const;
bool dimByGroup() const;
private Q_SLOTS:
void windowActivated(EffectWindow *w);
void windowClosed(EffectWindow *w);
void windowDeleted(EffectWindow *w);
void activeFullScreenEffectChanged();
2011-01-30 14:34:42 +00:00
private:
[effects] Rewrite the Dim Inactive effect Summary: The Dim Inactive effect was rewritten mostly to fix most of issues with it, e.g. after leaving a full screen effect(e.g. Desktop Grid) windows sometimes are not dimmed back, or when a window becomes inactive there is no smooth transition, etc. {F5956124} //Before: the window is not smoothly dimmed.// {F5956127} //After: the window is smoothly dimmed.// In combination with an effect that animates the disappearing of windows, e.g. Glide, the rewritten Dim Inactive effect doesn't "flash" windows. If an active window has been closed, it will stay bright. If an inactive window has been closed, it will stay dimmed. Among other changes, the KCM has been re-designed to follow common KCM design in Plasma: {F5956128, layout=center, size=full} The way the rewritten Dim Inactive effect handles flashing/flickering problem can be reused in the Dialog Parent effect. ### Demo {F5959885} //Before: dimming of a window group.// {F5959886} //After: Dimming of a window group.// Depends on D13740 CCBUG: 359251 Test Plan: Test plan #1 * Activated the Desktop Grid effect * Dimmed windows smoothly brightened * Left desktop grid * Windows dimmed back Test plan #2 * Opened Dolphin and its Preferences window * Clicked on desktop, both Dolphin and the Preferences window dimmed * Clicked on Dolphin, both windows smoothly brightened back Reviewers: #kwin, #plasma, #vdg, davidedmundson Reviewed By: #kwin, #plasma, #vdg, davidedmundson Subscribers: davidedmundson, abetts, ngraham, kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D13720
2018-06-20 10:16:31 +00:00
void dimWindow(WindowPaintData &data, qreal strength);
bool canDimWindow(const EffectWindow *w) const;
void scheduleInTransition(EffectWindow *w);
void scheduleGroupInTransition(EffectWindow *w);
void scheduleOutTransition(EffectWindow *w);
void scheduleGroupOutTransition(EffectWindow *w);
void scheduleRepaint(EffectWindow *w);
private:
qreal m_dimStrength;
bool m_dimPanels;
bool m_dimDesktop;
bool m_dimKeepAbove;
bool m_dimByGroup;
EffectWindow *m_activeWindow;
const EffectWindowGroup *m_activeWindowGroup;
QHash<EffectWindow*, TimeLine> m_transitions;
QHash<EffectWindow*, qreal> m_forceDim;
struct {
bool active = false;
TimeLine timeLine;
} m_fullScreenTransition;
2011-01-30 14:34:42 +00:00
};
[effects] Rewrite the Dim Inactive effect Summary: The Dim Inactive effect was rewritten mostly to fix most of issues with it, e.g. after leaving a full screen effect(e.g. Desktop Grid) windows sometimes are not dimmed back, or when a window becomes inactive there is no smooth transition, etc. {F5956124} //Before: the window is not smoothly dimmed.// {F5956127} //After: the window is smoothly dimmed.// In combination with an effect that animates the disappearing of windows, e.g. Glide, the rewritten Dim Inactive effect doesn't "flash" windows. If an active window has been closed, it will stay bright. If an inactive window has been closed, it will stay dimmed. Among other changes, the KCM has been re-designed to follow common KCM design in Plasma: {F5956128, layout=center, size=full} The way the rewritten Dim Inactive effect handles flashing/flickering problem can be reused in the Dialog Parent effect. ### Demo {F5959885} //Before: dimming of a window group.// {F5959886} //After: Dimming of a window group.// Depends on D13740 CCBUG: 359251 Test Plan: Test plan #1 * Activated the Desktop Grid effect * Dimmed windows smoothly brightened * Left desktop grid * Windows dimmed back Test plan #2 * Opened Dolphin and its Preferences window * Clicked on desktop, both Dolphin and the Preferences window dimmed * Clicked on Dolphin, both windows smoothly brightened back Reviewers: #kwin, #plasma, #vdg, davidedmundson Reviewed By: #kwin, #plasma, #vdg, davidedmundson Subscribers: davidedmundson, abetts, ngraham, kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D13720
2018-06-20 10:16:31 +00:00
inline int DimInactiveEffect::requestedEffectChainPosition() const
{
return 50;
}
inline bool DimInactiveEffect::isActive() const
{
return true;
}
inline int DimInactiveEffect::dimStrength() const
{
return qRound(m_dimStrength * 100.0);
}
inline bool DimInactiveEffect::dimPanels() const
{
return m_dimPanels;
}
inline bool DimInactiveEffect::dimDesktop() const
{
return m_dimDesktop;
}
inline bool DimInactiveEffect::dimKeepAbove() const
{
return m_dimKeepAbove;
}
inline bool DimInactiveEffect::dimByGroup() const
{
return m_dimByGroup;
}
} // namespace KWin
#endif