Make Aurorae themes with title on left/right somewhat work for shaded windows.

svn path=/trunk/KDE/kdebase/workspace/; revision=1129816
This commit is contained in:
Martin Gräßlin 2010-05-23 20:45:33 +00:00
parent 13f78bd02d
commit a2d331cc56
2 changed files with 34 additions and 10 deletions

View file

@ -332,8 +332,12 @@ void AuroraeScene::updateLayout()
const int right = sceneRect().width() - m_rightButtons->preferredWidth() - config.paddingRight(); const int right = sceneRect().width() - m_rightButtons->preferredWidth() - config.paddingRight();
const qreal titleHeight = qMax((qreal)config.titleHeight(), const qreal titleHeight = qMax((qreal)config.titleHeight(),
config.buttonHeight()*m_theme->buttonSizeFactor() + config.buttonMarginTop()); config.buttonHeight()*m_theme->buttonSizeFactor() + config.buttonMarginTop());
DecorationPosition decoPos = (DecorationPosition)config.decorationPosition();
if (isShade()) {
decoPos = DecorationTop;
}
if (m_maximizeMode == KDecorationDefines::MaximizeFull) { // TODO: check option if (m_maximizeMode == KDecorationDefines::MaximizeFull) { // TODO: check option
switch ((DecorationPosition)config.decorationPosition()) { switch (decoPos) {
case DecorationTop: { case DecorationTop: {
const int top = genericTop + config.titleEdgeTopMaximized(); const int top = genericTop + config.titleEdgeTopMaximized();
m_leftButtons->setGeometry(QRectF(QPointF(left + config.titleEdgeLeftMaximized(), top), m_leftButtons->setGeometry(QRectF(QPointF(left + config.titleEdgeLeftMaximized(), top),
@ -393,7 +397,7 @@ void AuroraeScene::updateLayout()
} }
m_title->layout()->invalidate(); m_title->layout()->invalidate();
} else { } else {
switch ((DecorationPosition)config.decorationPosition()) { switch (decoPos) {
case DecorationTop: { case DecorationTop: {
const int top = genericTop + config.titleEdgeTop(); const int top = genericTop + config.titleEdgeTop();
m_leftButtons->setGeometry(QRectF(QPointF(left + config.titleEdgeLeft(), top), m_leftButtons->size())); m_leftButtons->setGeometry(QRectF(QPointF(left + config.titleEdgeLeft(), top), m_leftButtons->size()));
@ -734,6 +738,27 @@ void AuroraeScene::setShade(bool shade)
} }
} }
} }
if ((DecorationPosition)m_theme->themeConfig().decorationPosition() != DecorationTop) {
Qt::Orientation orientation = Qt::Horizontal;
switch ((DecorationPosition)m_theme->themeConfig().decorationPosition()) {
case DecorationLeft: // fall through
case DecorationRight:
orientation = Qt::Vertical;
break;
case DecorationTop: // fall through
case DecorationBottom: // fall through
default: // fall through
orientation = Qt::Horizontal;
break;
}
if (m_shade) {
orientation = Qt::Horizontal;
}
static_cast<QGraphicsLinearLayout *>(m_rightButtons->layout())->setOrientation(orientation);
static_cast<QGraphicsLinearLayout *>(m_leftButtons->layout())->setOrientation(orientation);
static_cast<QGraphicsLinearLayout *>(m_title->layout())->setOrientation(orientation);
updateLayout();
}
} }
int AuroraeScene::leftButtonsWidth() const int AuroraeScene::leftButtonsWidth() const

View file

@ -94,6 +94,7 @@ void AuroraeTab::paint(QPainter *painter, const QStyleOptionGraphicsItem *option
const bool useTabs = (s->tabCount() > 1); const bool useTabs = (s->tabCount() > 1);
const bool focused = s->isFocusedTab(m_index); const bool focused = s->isFocusedTab(m_index);
const ThemeConfig &conf = m_theme->themeConfig(); const ThemeConfig &conf = m_theme->themeConfig();
const DecorationPosition decoPos = s->isShade() ? DecorationTop : m_theme->decorationPosition();
if (useTabs) { if (useTabs) {
painter->save(); painter->save();
Plasma::FrameSvg *decoration = m_theme->decoration(); Plasma::FrameSvg *decoration = m_theme->decoration();
@ -102,8 +103,7 @@ void AuroraeTab::paint(QPainter *painter, const QStyleOptionGraphicsItem *option
painter->setPen(color); painter->setPen(color);
QPointF point1 = rect().topRight(); QPointF point1 = rect().topRight();
QPointF point2 = rect().bottomRight(); QPointF point2 = rect().bottomRight();
if (m_theme->decorationPosition() == DecorationLeft || if (decoPos == DecorationLeft || decoPos == DecorationRight) {
m_theme->decorationPosition() == DecorationRight) {
point1 = rect().topRight(); point1 = rect().topRight();
point2 = rect().topLeft(); point2 = rect().topLeft();
} }
@ -144,8 +144,7 @@ void AuroraeTab::paint(QPainter *painter, const QStyleOptionGraphicsItem *option
} }
qreal w = rect().width(); qreal w = rect().width();
qreal h = rect().height(); qreal h = rect().height();
if (m_theme->themeConfig().decorationPosition() == DecorationLeft || if (decoPos == DecorationLeft || decoPos == DecorationRight) {
m_theme->themeConfig().decorationPosition() == DecorationRight) {
h = rect().width(); h = rect().width();
w = rect().height(); w = rect().height();
} }
@ -159,10 +158,10 @@ void AuroraeTab::paint(QPainter *painter, const QStyleOptionGraphicsItem *option
haloRect.setWidth(w); haloRect.setWidth(w);
} }
painter->save(); painter->save();
if (m_theme->themeConfig().decorationPosition() == DecorationLeft) { if (decoPos == DecorationLeft) {
painter->translate(rect().bottomLeft()); painter->translate(rect().bottomLeft());
painter->rotate(270); painter->rotate(270);
} else if (m_theme->themeConfig().decorationPosition() == DecorationRight) { } else if (decoPos == DecorationRight) {
painter->translate(rect().topRight()); painter->translate(rect().topRight());
painter->rotate(90); painter->rotate(90);
} }
@ -209,10 +208,10 @@ void AuroraeTab::paint(QPainter *painter, const QStyleOptionGraphicsItem *option
p.fillRect(r, alphaGradient); p.fillRect(r, alphaGradient);
} }
p.end(); p.end();
if (m_theme->themeConfig().decorationPosition() == DecorationLeft) { if (decoPos == DecorationLeft) {
painter->translate(rect().bottomLeft()); painter->translate(rect().bottomLeft());
painter->rotate(270); painter->rotate(270);
} else if (m_theme->themeConfig().decorationPosition() == DecorationRight) { } else if (decoPos == DecorationRight) {
painter->translate(rect().topRight()); painter->translate(rect().topRight());
painter->rotate(90); painter->rotate(90);
} }