Configurable text shadow for window caption in Aurorae.

svn path=/trunk/KDE/kdebase/workspace/; revision=998382
This commit is contained in:
Martin Gräßlin 2009-07-17 14:46:03 +00:00
parent afeea76b4c
commit bc7fa77710
6 changed files with 107 additions and 8 deletions

View file

@ -694,12 +694,44 @@ void AuroraeClient::paintEvent(QPaintEvent *event)
frame->resizeFrame(rect.size());
frame->paintFrame(&painter, rect, sourceRect);
painter.setFont(options()->font(isActive()));
if (conf.useTextShadow()) {
// shadow code is inspired by Qt FAQ: How can I draw shadows behind text?
// see http://www.qtsoftware.com/developer/faqs/faq.2007-07-27.3052836051
const ThemeConfig &conf = AuroraeFactory::instance()->themeConfig();
painter.save();
if (isActive()) {
painter.setPen(conf.activeTextShadowColor());
}
else {
painter.setPen(conf.inactiveTextShadowColor());
}
int dx = conf.textShadowOffsetX();
int dy = conf.textShadowOffsetY();
painter.setOpacity(0.5);
painter.drawText(titleRect().translated(dx, dy),
conf.alignment() | conf.verticalAlignment() | Qt::TextSingleLine,
caption());
painter.setOpacity(0.2);
painter.drawText(titleRect().translated(dx+1, dy),
conf.alignment() | conf.verticalAlignment() | Qt::TextSingleLine,
caption());
painter.drawText(titleRect().translated(dx-1, dy),
conf.alignment() | conf.verticalAlignment() | Qt::TextSingleLine,
caption());
painter.drawText(titleRect().translated(dx, dy+1),
conf.alignment() | conf.verticalAlignment() | Qt::TextSingleLine,
caption());
painter.drawText(titleRect().translated(dx, dy-1),
conf.alignment() | conf.verticalAlignment() | Qt::TextSingleLine,
caption());
painter.restore();
}
if (isActive()) {
painter.setPen(conf.activeTextColor());
} else {
painter.setPen(conf.inactiveTextColor());
}
painter.setFont(options()->font(isActive()));
painter.drawText(titleRect(), conf.alignment() | conf.verticalAlignment() | Qt::TextSingleLine,
caption());
}

View file

@ -428,19 +428,51 @@ void ThemeDelegate::paintDeco(QPainter *painter, bool active, const QStyleOption
int titleRight = x;
// draw text
painter->save();
if (active) {
painter->setPen(themeConfig->activeTextColor());
}
else {
painter->setPen(themeConfig->inactiveTextColor());
}
y = option.rect.top() + topMargin + themeConfig->paddingTop() + themeConfig->titleEdgeTop();
QRectF titleRect(QPointF(titleLeft, y), QPointF(titleRight, y + themeConfig->titleHeight()));
QString caption = i18n("Active Window");
if (!active) {
caption = i18n("Inactive Window");
}
painter->setFont(KGlobalSettings::windowTitleFont());
if (themeConfig->useTextShadow()) {
// shadow code is inspired by Qt FAQ: How can I draw shadows behind text?
// see http://www.qtsoftware.com/developer/faqs/faq.2007-07-27.3052836051
painter->save();
if (active) {
painter->setPen(themeConfig->activeTextShadowColor());
}
else {
painter->setPen(themeConfig->inactiveTextShadowColor());
}
int dx = themeConfig->textShadowOffsetX();
int dy = themeConfig->textShadowOffsetY();
painter->setOpacity(0.5);
painter->drawText(titleRect.translated(dx, dy),
themeConfig->alignment() | themeConfig->verticalAlignment() | Qt::TextSingleLine,
caption);
painter->setOpacity(0.2);
painter->drawText(titleRect.translated(dx+1, dy),
themeConfig->alignment() | themeConfig->verticalAlignment() | Qt::TextSingleLine,
caption);
painter->drawText(titleRect.translated(dx-1, dy),
themeConfig->alignment() | themeConfig->verticalAlignment() | Qt::TextSingleLine,
caption);
painter->drawText(titleRect.translated(dx, dy+1),
themeConfig->alignment() | themeConfig->verticalAlignment() | Qt::TextSingleLine,
caption);
painter->drawText(titleRect.translated(dx, dy-1),
themeConfig->alignment() | themeConfig->verticalAlignment() | Qt::TextSingleLine,
caption);
painter->restore();
painter->save();
}
if (active) {
painter->setPen(themeConfig->activeTextColor());
}
else {
painter->setPen(themeConfig->inactiveTextColor());
}
painter->drawText(titleRect,
themeConfig->alignment() | themeConfig->verticalAlignment() | Qt::TextSingleLine,
caption);

View file

@ -31,6 +31,11 @@ void ThemeConfig::load(KConfig *conf)
KConfigGroup general(conf, "General");
m_activeTextColor = general.readEntry("ActiveTextColor", QColor(Qt::black));
m_inactiveTextColor = general.readEntry("InactiveTextColor", QColor(Qt::black));
m_useTextShadow = general.readEntry("UseTextShadow", false);
m_activeTextShadowColor = general.readEntry("ActiveTextShadowColor", QColor(Qt::white));
m_inactiveTextShadowColor = general.readEntry("InactiveTextShadowColor", QColor(Qt::white));
m_textShadowOffsetX = general.readEntry("TextShadowOffsetX", 0);
m_textShadowOffsetY = general.readEntry("TextShadowOffsetY", 0);
QString alignment = (general.readEntry("TitleAlignment", "Left")).toLower();
if (alignment == "left") {
m_alignment = Qt::AlignLeft;

View file

@ -40,6 +40,21 @@ public:
QColor inactiveTextColor() const {
return m_inactiveTextColor;
}
QColor activeTextShadowColor() const {
return m_activeTextShadowColor;
}
QColor inactiveTextShadowColor() const {
return m_inactiveTextShadowColor;
}
int textShadowOffsetX() const {
return m_textShadowOffsetX;
}
int textShadowOffsetY() const {
return m_textShadowOffsetY;
}
bool useTextShadow() const {
return m_useTextShadow;
}
// Alignment
Qt::Alignment alignment() const {
return m_alignment;
@ -152,6 +167,11 @@ public:
private:
QColor m_activeTextColor;
QColor m_inactiveTextColor;
QColor m_activeTextShadowColor;
QColor m_inactiveTextShadowColor;
int m_textShadowOffsetX;
int m_textShadowOffsetY;
bool m_useTextShadow;
Qt::Alignment m_alignment;
Qt::Alignment m_verticalAlignment;
// borders

View file

@ -89,6 +89,11 @@ TitleVerticalAlignment=Center # vertical alignment of window title
Animation=0 # animation duration in msec when hovering a button
ActiveTextColor=0,0,0,255 # title text color of active window
InactiveTextColor=0,0,0,255 # title text color of inactive window
UseTextShadow=false # Draw Shadow behind title text
ActiveTextShadowColor=255,255,255,255 # Shadow text color of active window
InactiveTextShadowColor=255,255,255,255 # Shadow text color of active window
TextShadowOffsetX=0 # Offset of shadow in x direction
TextShadowOffsetY=0 # Offset of shadow in y direction
LeftButtons=MS # buttons in left button group (see http://api.kde.org/4.x-api/kdebase-workspace-apidocs/kwin/lib/html/classKDecorationOptions.html#8ad12d76c93c5f1a12ea07b30f92d2fa)
RightButtons=HIA__X # buttons in right button group
Shadow=true # decoration provides shadows: you have to add padding

View file

@ -1,6 +1,11 @@
[General]
ActiveTextColor=0,0,0,255
InactiveTextColor=178,178,178,178
UseTextShadow=true
ActiveTextShadowColor=178,178,178
InactiveTextShadowColor=0,0,0,255
TextShadowOffsetX=1
TextShadowOffsetY=1
TitleAlignment=Center
TitleVerticalAlignment=Bottom
Animation=200