14#include "kscreenconfig.h"
42Q_LOGGING_CATEGORY(KWIN_KSCREEN,
"kwin_effect_kscreen", QtWarningMsg)
49 , m_atom(
effects->waylandDisplay() ? XCB_ATOM_NONE :
effects->announceSupportProperty(
"_KDE_KWIN_KSCREEN_SUPPORT", this))
61 for (
auto screen : screens) {
66 m_waylandStates.remove(screen);
74void KscreenEffect::addScreen(
Output *screen)
77 auto &state = m_waylandStates[screen];
78 state.m_timeLine.setDuration(std::chrono::milliseconds(animationTime<KscreenConfig>(250)));
79 setState(state, StateFadingIn);
82 auto &state = m_waylandStates[screen];
83 state.m_timeLine.setDuration(dimmingIn);
84 setState(state, StateFadingOut);
90 KscreenConfig::self()->read();
92 std::chrono::milliseconds(animationTime<KscreenConfig>(250)));
97 if (isScreenActive(data.
screen)) {
99 m_currentScreen = data.
screen;
101 if (state.m_state == StateFadingIn || state.m_state == StateFadingOut) {
102 state.m_timeLine.advance(presentTime);
103 if (state.m_timeLine.done()) {
105 if (state.m_state == StateNormal) {
106 m_waylandStates.remove(data.
screen);
117 if (isScreenActive(m_currentScreen)) {
119 if (state.m_state == StateFadingIn || state.m_state == StateFadingOut) {
123 m_currentScreen =
nullptr;
128 auto screen = w->
screen();
129 if (isScreenActive(screen)) {
131 if (state.m_state != StateNormal) {
140 auto screen = w->
screen();
141 if (isScreenActive(screen)) {
144 switch (state.m_state) {
165void KscreenEffect::setState(ScreenState &state, FadeOutState newState)
167 if (state.m_state == newState) {
171 state.m_state = newState;
172 state.m_timeLine.reset();
176void KscreenEffect::propertyNotify(EffectWindow *window,
long int atom)
178 if (window || atom != m_atom || m_atom == XCB_ATOM_NONE) {
183 const uint32_t *data = byteData.isEmpty() ? nullptr :
reinterpret_cast<const uint32_t *
>(byteData.data());
184 if (!data || data[0] >= LastState) {
186 qCDebug(KWIN_KSCREEN) <<
"Incorrect Property state, immediate stop: " << data[0];
188 setState(m_xcbState, StateNormal);
192 setState(m_xcbState, FadeOutState(data[0]));
195void KscreenEffect::switchState(ScreenState &state)
198 if (state.m_state == StateFadingOut) {
199 state.m_state = StateFadedOut;
201 }
else if (state.m_state == StateFadingIn) {
202 state.m_state = StateNormal;
205 if (value != -1l && m_atom != XCB_ATOM_NONE) {
212 return !m_waylandStates.isEmpty() || (!
effects->
waylandDisplay() && m_atom && m_xcbState.m_state != StateNormal);
215bool KscreenEffect::isScreenActive(
Output *screen)
const
217 return m_waylandStates.contains(screen) || (!
effects->
waylandDisplay() && m_atom && m_xcbState.m_state != StateNormal);
222#include "moc_kscreen.cpp"
Base class for all KWin effects.
Representation of a window used by/for Effect classes.
void screenAdded(KWin::Output *screen)
Display * waylandDisplay() const
void propertyNotify(KWin::EffectWindow *w, long atom)
void screenRemoved(KWin::Output *screen)
QByteArray readRootProperty(long atom, long type, int format) const
void paintWindow(const RenderTarget &renderTarget, const RenderViewport &viewport, EffectWindow *w, int mask, const QRegion ®ion, WindowPaintData &data)
xcb_atom_t announceSupportProperty(const QByteArray &propertyName, Effect *effect)
Announces support for the feature with the given name. If no other Effect has announced support for t...
void prePaintScreen(ScreenPrePaintData &data, std::chrono::milliseconds presentTime)
QList< Output * > screens() const
void xcbConnectionChanged()
void prePaintWindow(EffectWindow *w, WindowPrePaintData &data, std::chrono::milliseconds presentTime)
xcb_connection_t * xcbConnection() const
xcb_window_t x11RootWindow() const
KSharedConfigPtr config() const
Q_SCRIPTABLE void addRepaintFull()
void prePaintScreen(ScreenPrePaintData &data, std::chrono::milliseconds presentTime) override
~KscreenEffect() override
void prePaintWindow(EffectWindow *w, WindowPrePaintData &data, std::chrono::milliseconds presentTime) override
void reconfigure(ReconfigureFlags flags) override
void paintWindow(const RenderTarget &renderTarget, const RenderViewport &viewport, EffectWindow *w, int mask, QRegion region, WindowPaintData &data) override
bool isActive() const override
void postPaintScreen() override
void aboutToTurnOff(std::chrono::milliseconds time)
void setDuration(std::chrono::milliseconds duration)
qreal multiplyOpacity(qreal factor)
void setOpacity(qreal opacity)
qreal multiplyBrightness(qreal factor)