plasma-framework/declarativeimports/core/theme.cpp
2013-02-01 17:26:26 +01:00

345 lines
9.6 KiB
C++

/***************************************************************************
* Copyright 2010 Marco Martin <mart@kde.org> *
* *
* 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, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
***************************************************************************/
#include "theme.h"
#include <QQmlPropertyMap>
#include <KIconLoader>
class FontProxySingleton
{
public:
FontProxySingleton()
: defaultFont(Plasma::Theme::DefaultFont),
desktopFont(Plasma::Theme::DesktopFont),
smallestFont(Plasma::Theme::SmallestFont)
{
}
FontProxy defaultFont;
FontProxy desktopFont;
FontProxy smallestFont;
};
K_GLOBAL_STATIC(FontProxySingleton, privateFontProxySingleton)
FontProxy::FontProxy(Plasma::Theme::FontRole role, QObject *parent)
: QObject(parent),
m_fontRole(role)
{
connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()),
this, SIGNAL(boldChanged()));
connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()),
this, SIGNAL(capitalizationChanged()));
connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()),
this, SIGNAL(familyChanged()));
connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()),
this, SIGNAL(italicChanged()));
connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()),
this, SIGNAL(letterSpacingChanged()));
connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()),
this, SIGNAL(pixelSizeChanged()));
connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()),
this, SIGNAL(pointSizeChanged()));
connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()),
this, SIGNAL(strikeoutChanged()));
connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()),
this, SIGNAL(underlineChanged()));
connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()),
this, SIGNAL(weightChanged()));
connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()),
this, SIGNAL(wordSpacingChanged()));
connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()),
this, SIGNAL(mSizeChanged()));
}
FontProxy::~FontProxy()
{
}
FontProxy *FontProxy::defaultFont()
{
return &privateFontProxySingleton->defaultFont;
}
FontProxy *FontProxy::desktopFont()
{
return &privateFontProxySingleton->desktopFont;
}
FontProxy *FontProxy::smallestFont()
{
return &privateFontProxySingleton->smallestFont;
}
bool FontProxy::bold() const
{
return Plasma::Theme::defaultTheme()->font(m_fontRole).bold();
}
FontProxy::Capitalization FontProxy::capitalization() const
{
return (FontProxy::Capitalization)Plasma::Theme::defaultTheme()->font(m_fontRole).capitalization();
}
QString FontProxy::family() const
{
return Plasma::Theme::defaultTheme()->font(m_fontRole).family();
}
bool FontProxy::italic() const
{
return Plasma::Theme::defaultTheme()->font(m_fontRole).italic();
}
qreal FontProxy::letterSpacing() const
{
return Plasma::Theme::defaultTheme()->font(m_fontRole).letterSpacing();
}
int FontProxy::pixelSize() const
{
return Plasma::Theme::defaultTheme()->font(m_fontRole).pixelSize();
}
qreal FontProxy::pointSize() const
{
return Plasma::Theme::defaultTheme()->font(m_fontRole).pointSizeF();
}
bool FontProxy::strikeout() const
{
return Plasma::Theme::defaultTheme()->font(m_fontRole).strikeOut();
}
bool FontProxy::underline() const
{
return Plasma::Theme::defaultTheme()->font(m_fontRole).underline();
}
FontProxy::Weight FontProxy::weight() const
{
return (FontProxy::Weight)Plasma::Theme::defaultTheme()->font(m_fontRole).weight();
}
qreal FontProxy::wordSpacing() const
{
return Plasma::Theme::defaultTheme()->font(m_fontRole).wordSpacing();
}
QSize FontProxy::mSize() const
{
return QFontMetrics(Plasma::Theme::defaultTheme()->font(m_fontRole)).boundingRect("M").size();
}
//********** Theme *************
ThemeProxy::ThemeProxy(QObject *parent)
: QObject(parent)
{
m_defaultIconSize = KIconLoader::global()->currentSize(KIconLoader::Desktop);
m_iconSizes = new QQmlPropertyMap(this);
m_iconSizes->insert("desktop", QVariant(KIconLoader::global()->currentSize(KIconLoader::Desktop)));
m_iconSizes->insert("toolbar", KIconLoader::global()->currentSize(KIconLoader::Toolbar));
m_iconSizes->insert("small", KIconLoader::global()->currentSize(KIconLoader::Small));
m_iconSizes->insert("dialog", KIconLoader::global()->currentSize(KIconLoader::Dialog));
connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()), this, SIGNAL(themeChanged()));
connect(KIconLoader::global(), SIGNAL(iconLoaderSettingsChanged()), this, SLOT(iconLoaderSettingsChanged()));
}
ThemeProxy::~ThemeProxy()
{
}
QString ThemeProxy::themeName() const
{
return Plasma::Theme::defaultTheme()->themeName();
}
QObject *ThemeProxy::defaultFont() const
{
return FontProxy::defaultFont();
}
QObject *ThemeProxy::desktopFont() const
{
return FontProxy::desktopFont();
}
QObject *ThemeProxy::smallestFont() const
{
return FontProxy::smallestFont();
}
bool ThemeProxy::windowTranslucencyEnabled() const
{
return Plasma::Theme::defaultTheme()->windowTranslucencyEnabled();
}
KUrl ThemeProxy::homepage() const
{
return Plasma::Theme::defaultTheme()->homepage();
}
bool ThemeProxy::useGlobalSettings() const
{
return Plasma::Theme::defaultTheme()->useGlobalSettings();
}
QString ThemeProxy::wallpaperPath() const
{
return Plasma::Theme::defaultTheme()->wallpaperPath();
}
QString ThemeProxy::wallpaperPathForSize(int width, int height) const
{
return Plasma::Theme::defaultTheme()->wallpaperPath(QSize(width, height));
}
QColor ThemeProxy::textColor() const
{
return Plasma::Theme::defaultTheme()->color(Plasma::Theme::TextColor);
}
QColor ThemeProxy::highlightColor() const
{
return Plasma::Theme::defaultTheme()->color(Plasma::Theme::HighlightColor);
}
QColor ThemeProxy::backgroundColor() const
{
return Plasma::Theme::defaultTheme()->color(Plasma::Theme::BackgroundColor);
}
QColor ThemeProxy::buttonTextColor() const
{
return Plasma::Theme::defaultTheme()->color(Plasma::Theme::ButtonTextColor);
}
QColor ThemeProxy::buttonBackgroundColor() const
{
return Plasma::Theme::defaultTheme()->color(Plasma::Theme::ButtonBackgroundColor);
}
QColor ThemeProxy::linkColor() const
{
return Plasma::Theme::defaultTheme()->color(Plasma::Theme::LinkColor);
}
QColor ThemeProxy::visitedLinkColor() const
{
return Plasma::Theme::defaultTheme()->color(Plasma::Theme::VisitedLinkColor);
}
QColor ThemeProxy::buttonHoverColor() const
{
return Plasma::Theme::defaultTheme()->color(Plasma::Theme::ButtonHoverColor);
}
QColor ThemeProxy::buttonFocusColor() const
{
return Plasma::Theme::defaultTheme()->color(Plasma::Theme::ButtonFocusColor);
}
QColor ThemeProxy::viewTextColor() const
{
return Plasma::Theme::defaultTheme()->color(Plasma::Theme::ViewTextColor);
}
QColor ThemeProxy::viewBackgroundColor() const
{
return Plasma::Theme::defaultTheme()->color(Plasma::Theme::ViewBackgroundColor);
}
QColor ThemeProxy::viewHoverColor() const
{
return Plasma::Theme::defaultTheme()->color(Plasma::Theme::ViewHoverColor);
}
QColor ThemeProxy::viewFocusColor() const
{
return Plasma::Theme::defaultTheme()->color(Plasma::Theme::ViewFocusColor);
}
QString ThemeProxy::styleSheet() const
{
return Plasma::Theme::defaultTheme()->styleSheet(QString());
}
int ThemeProxy::smallIconSize() const
{
return KIconLoader::SizeSmall;
}
int ThemeProxy::smallMediumIconSize() const
{
return KIconLoader::SizeSmallMedium;
}
int ThemeProxy::mediumIconSize() const
{
return KIconLoader::SizeMedium;
}
int ThemeProxy::largeIconSize() const
{
return KIconLoader::SizeLarge;
}
int ThemeProxy::hugeIconSize() const
{
return KIconLoader::SizeHuge;
}
int ThemeProxy::enormousIconSize() const
{
return KIconLoader::SizeEnormous;
}
void ThemeProxy::iconLoaderSettingsChanged()
{
m_defaultIconSize = KIconLoader::global()->currentSize(KIconLoader::Desktop);
m_iconSizes->insert("desktop", QVariant(KIconLoader::global()->currentSize(KIconLoader::Desktop)));
m_iconSizes->insert("toolbar", KIconLoader::global()->currentSize(KIconLoader::Toolbar));
m_iconSizes->insert("small", KIconLoader::global()->currentSize(KIconLoader::Small));
m_iconSizes->insert("dialog", KIconLoader::global()->currentSize(KIconLoader::Dialog));
emit defaultIconSizeChanged();
emit iconSizesChanged();
}
int ThemeProxy::defaultIconSize() const
{
return m_defaultIconSize;
}
QQmlPropertyMap *ThemeProxy::iconSizes() const
{
return m_iconSizes;
}
#include "theme.moc"