/******************************************************************** KWin - the KDE window manager This file is part of the KDE project. Copyright (C) 2008 Louai Al-Khanji 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 . *********************************************************************/ // This contains code shared by the shadow effect and shadow effect configurator // Mark all functions static so the symbols are not exported! #ifndef KWIN_SHADOW_HELPER_H #define KWIN_SHADOW_HELPER_H #include #include static const int MAX_ITERS = 10; // should be enough static const qreal LUMA_THRESHOLD = 0.05; static const qreal MINIMUM_CONTRAST = 3.0; static bool contrastTooLow(const QColor& one, const QColor& two) { return KColorUtils::contrastRatio(one, two) < MINIMUM_CONTRAST; } static QColor schemeShadowColor() { QPalette palette; QColor shadowColor; QPalette::ColorRole shadowRole; QColor windowColor; windowColor = palette.color(QPalette::Window); if (KColorUtils::luma(windowColor) >= LUMA_THRESHOLD) shadowRole = QPalette::Shadow; else shadowRole = QPalette::Light; shadowColor = palette.color(shadowRole); // Some styles might set a weird shadow or light color. Make sure we // do not end up looping forever or we might lock up the desktop!! int iters = 0; while (contrastTooLow(shadowColor, windowColor) && iters < MAX_ITERS) { iters++; if (shadowRole == QPalette::Shadow) shadowColor = KColorUtils::darken(shadowColor); else shadowColor = KColorUtils::lighten(shadowColor); } return shadowColor; } #endif // KWIN_SHADOW_HELPER_H