plasma-framework/private/themedwidgetinterface_p.h
Aaron J. Seigo afe897be89 * restore the color alpha after altering it
* use button text color for button text (sounds more logically obvious than it was ;)
* optionally use button text color for regular text as well (used by spinbox, lineedit)

svn path=/trunk/KDE/kdelibs/; revision=1191135
2010-10-29 17:25:00 +00:00

122 lines
4.3 KiB
C++

/******************************************************************************
* Copyright 2009 by Aaron Seigo <aseigo@kde.org> *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Library General Public *
* License as published by the Free Software Foundation; either *
* version 2 of the License, or (at your option) any later version. *
* *
* This library 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 *
* Library General Public License for more details. *
* *
* You should have received a copy of the GNU Library General Public License *
* along with this library; see the file COPYING.LIB. If not, write to *
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, *
* Boston, MA 02110-1301, USA. *
*******************************************************************************/
#ifndef THEMEDWIDGETINTERFACE_P_H
#define THEMEDWIDGETINTERFACE_P_H
#include "kglobalsettings.h"
#include <QApplication>
#include "theme.h"
namespace Plasma
{
template <class T>
class ThemedWidgetInterface
{
public:
ThemedWidgetInterface(T *publicClass)
: q(publicClass),
customPalette(false),
customFont(false),
buttonColorForText(false)
{
QObject::connect(Theme::defaultTheme(), SIGNAL(themeChanged()), q, SLOT(setPalette()));
QObject::connect(KGlobalSettings::self(), SIGNAL(kdisplayPaletteChanged()), q, SLOT(setPalette()));
}
void initTheming()
{
customPalette = false;
customFont = false;
setPalette();
}
void setPalette()
{
if (!customPalette) {
QColor color = Theme::defaultTheme()->color(Theme::TextColor);
QPalette p = q->palette();
p.setColor(QPalette::Normal, QPalette::WindowText, color);
p.setColor(QPalette::Inactive, QPalette::WindowText, color);
p.setColor(QPalette::Normal, QPalette::Link, Theme::defaultTheme()->color(Theme::LinkColor));
p.setColor(QPalette::Normal, QPalette::LinkVisited, Theme::defaultTheme()->color(Theme::VisitedLinkColor));
qreal alpha = color.alpha();
color.setAlphaF(0.6);
p.setColor(QPalette::Disabled, QPalette::WindowText, color);
color.setAlphaF(alpha);
const QColor buttonColor = Theme::defaultTheme()->color(Theme::ButtonTextColor);
p.setColor(QPalette::Normal, QPalette::Text, buttonColorForText ? buttonColor : color);
p.setColor(QPalette::Inactive, QPalette::Text, buttonColorForText ? buttonColor : color);
p.setColor(QPalette::Normal, QPalette::ButtonText, buttonColor);
p.setColor(QPalette::Inactive, QPalette::ButtonText, buttonColor);
//FIXME: hardcoded colors .. looks incorrect
p.setColor(QPalette::Normal, QPalette::Base, QColor(0,0,0,0));
p.setColor(QPalette::Inactive, QPalette::Base, QColor(0,0,0,0));
q->setPalette(p);
customPalette = false;
}
if (!customFont) {
q->setFont(Plasma::Theme::defaultTheme()->font(Plasma::Theme::DefaultFont));
customFont = false;
}
}
void changeEvent(QEvent *event)
{
switch (event->type()) {
case QEvent::FontChange:
customFont = q->font() != QApplication::font();
break;
case QEvent::PaletteChange:
customPalette = true;
break;
default:
break;
}
}
void event(QEvent *event)
{
if (event->type() == QEvent::Show) {
customFont = q->font() != QApplication::font();
}
}
T *q;
bool customPalette : 1;
bool customFont : 1;
bool buttonColorForText : 1;
};
} // namespace Plasma
#endif