diff options
author | Daniel Molkentin <daniel.molkentin@nokia.com> | 2010-01-22 18:04:24 +0100 |
---|---|---|
committer | Daniel Molkentin <daniel.molkentin@nokia.com> | 2010-01-22 18:04:42 +0100 |
commit | dbc295a07f725928eeab7f9c666049b73d624ac0 (patch) | |
tree | 88a960c72ac5fdd771916f54280e0b7c6d4125a5 /src/plugins/coreplugin/fancyactionbar.cpp | |
parent | d348e5099b3f64568c7d81c7f5cb5aacad4823be (diff) |
Fixes for FancyActionBar and TargetSelector.
- Improved icon and text positioning
- Improved readability and some gfx glitches on windows and mac
- Removed drop down functionality from Run/Debug/Build buttons
Diffstat (limited to 'src/plugins/coreplugin/fancyactionbar.cpp')
-rw-r--r-- | src/plugins/coreplugin/fancyactionbar.cpp | 158 |
1 files changed, 69 insertions, 89 deletions
diff --git a/src/plugins/coreplugin/fancyactionbar.cpp b/src/plugins/coreplugin/fancyactionbar.cpp index 18bca72f99..807ddf2c48 100644 --- a/src/plugins/coreplugin/fancyactionbar.cpp +++ b/src/plugins/coreplugin/fancyactionbar.cpp @@ -56,98 +56,98 @@ FancyToolButton::FancyToolButton(QWidget *parent) void FancyToolButton::paintEvent(QPaintEvent *event) { Q_UNUSED(event) - QPainter p(this); + QPainter painter(this); + // draw borders QLayout *parentLayout = qobject_cast<FancyActionBar*>(parentWidget())->actionsLayout(); - int lineHeight = fontMetrics().height(); bool isTitledAction = defaultAction()->property("titledAction").toBool(); #ifndef Q_WS_MAC // Mac UIs usually don't hover if (underMouse() && isEnabled() && !isDown()) { QColor whiteOverlay(Qt::white); whiteOverlay.setAlpha(20); - p.fillRect(rect().adjusted(1, 1, -1, -1), whiteOverlay); + painter.fillRect(rect().adjusted(1, 1, -1, -1), whiteOverlay); } #endif if (isDown()) { QColor whiteOverlay(Qt::black); whiteOverlay.setAlpha(20); - p.fillRect(rect().adjusted(1, 1, -1, -1), whiteOverlay); + painter.fillRect(rect().adjusted(1, 1, -1, -1), whiteOverlay); } - QPixmap borderPixmap; - QMargins margins; - if (parentLayout && parentLayout->count() > 0 && - parentLayout->itemAt(parentLayout->count()-1)->widget() == this) { - margins = QMargins(3, 3, 2, 0); - borderPixmap = QPixmap( - QLatin1String(":/fancyactionbar/images/fancytoolbutton_bottom_outline.png")); - } else if (parentLayout && parentLayout->count() > 0 && - parentLayout->itemAt(0)->widget() == this) { - margins = QMargins(3, 3, 2, 3); - borderPixmap = QPixmap( - QLatin1String(":/fancyactionbar/images/fancytoolbutton_top_outline.png")); - } else { - margins = QMargins(3, 3, 2, 0); - borderPixmap = QPixmap( - QLatin1String(":/fancyactionbar/images/fancytoolbutton_normal_outline.png")); - } - - QRect drawRect = rect(); - qDrawBorderPixmap(&p, drawRect, margins, borderPixmap); + QPixmap borderPixmap; + QMargins margins; + if (parentLayout && parentLayout->count() > 0 && + parentLayout->itemAt(parentLayout->count()-1)->widget() == this) { + margins = QMargins(3, 3, 2, 0); + borderPixmap = QPixmap( + QLatin1String(":/fancyactionbar/images/fancytoolbutton_bottom_outline.png")); + } else if (parentLayout && parentLayout->count() > 0 && + parentLayout->itemAt(0)->widget() == this) { + margins = QMargins(3, 3, 2, 3); + borderPixmap = QPixmap( + QLatin1String(":/fancyactionbar/images/fancytoolbutton_top_outline.png")); + } else { + margins = QMargins(3, 3, 2, 0); + borderPixmap = QPixmap( + QLatin1String(":/fancyactionbar/images/fancytoolbutton_normal_outline.png")); + } - QPixmap pix = icon().pixmap(size() - QSize(15, 15), isEnabled() ? QIcon::Normal : QIcon::Disabled); - QPoint center = rect().center(); - QSize halfPixSize = pix.size()/2; + // draw pixmap + QRect drawRect = rect(); + qDrawBorderPixmap(&painter, drawRect, margins, borderPixmap); - p.drawPixmap(center-QPoint(halfPixSize.width()-1, halfPixSize.height()-1), pix); + QPixmap pix = icon().pixmap(32, 32, isEnabled() ? QIcon::Normal : QIcon::Disabled); + QPoint center = rect().center(); + QSizeF halfPixSize = pix.size()/2.0; - if (popupMode() == QToolButton::DelayedPopup && !isTitledAction) { - QPoint arrowOffset = center + QPoint(pix.rect().width()/2, pix.rect().height()/2); - QStyleOption opt; - if (isEnabled()) - opt.state &= QStyle::State_Enabled; - else - opt.state |= QStyle::State_Enabled; - opt.rect = QRect(arrowOffset.x(), arrowOffset.y(), 6, 6); - style()->drawPrimitive(QStyle::PE_IndicatorArrowDown, - &opt, &p, this); - } + painter.drawPixmap(center-QPointF(halfPixSize.width()-1, halfPixSize.height()-1), pix); + // draw popup texts if (isTitledAction) { - QRect r(0, lineHeight/2, rect().width(), lineHeight); + QFont normalFont(painter.font()); + normalFont.setPointSizeF(Utils::StyleHelper::sidebarFontSize()); + QFont boldFont(normalFont); + boldFont.setBold(true); + QFontMetrics fm(normalFont); + QFontMetrics boldFm(boldFont); + int lineHeight = boldFm.height(); + + int textFlags = Qt::AlignVCenter|Qt::AlignHCenter; + + painter.setFont(normalFont); + + QPoint textOffset = center - QPoint(pix.rect().width()/2, pix.rect().height()/2); + textOffset = textOffset - QPoint(0, lineHeight+5); + QRectF r(0, textOffset.y(), rect().width(), lineHeight); QColor penColor; if (isEnabled()) penColor = Qt::white; else penColor = Qt::gray; - p.setPen(penColor); + painter.setPen(penColor); const QString projectName = defaultAction()->property("heading").toString(); - QFont f = font(); - f.setPointSize(f.pointSize()-1); - p.setFont(f); - QFontMetrics fm(f); QString ellidedProjectName = fm.elidedText(projectName, Qt::ElideMiddle, r.width()); if (isEnabled()) { - const QRect shadowR = r.translated(0, 1); - p.setPen(Qt::black); - p.drawText(shadowR, Qt::AlignVCenter|Qt::AlignHCenter, ellidedProjectName); - p.setPen(penColor); + const QRectF shadowR = r.translated(0, 1); + painter.setPen(QColor(30, 30, 30, 80)); + painter.drawText(shadowR, textFlags, ellidedProjectName); + painter.setPen(penColor); } - p.drawText(r, Qt::AlignVCenter|Qt::AlignHCenter, ellidedProjectName); - r = QRect(0, rect().bottom()-lineHeight*1.5, rect().width(), lineHeight); + painter.drawText(r, textFlags, ellidedProjectName); + textOffset = center + QPoint(pix.rect().width()/2, pix.rect().height()/2); + r = QRectF(0, textOffset.y()+5, rect().width(), lineHeight); const QString buildConfiguration = defaultAction()->property("subtitle").toString(); - f.setBold(true); - p.setFont(f); - QString ellidedBuildConfiguration = fm.elidedText(buildConfiguration, Qt::ElideMiddle, r.width()); + painter.setFont(boldFont); + QString ellidedBuildConfiguration = boldFm.elidedText(buildConfiguration, Qt::ElideMiddle, r.width()); if (isEnabled()) { - const QRect shadowR = r.translated(0, 1); - p.setPen(Qt::black); - p.drawText(shadowR, Qt::AlignVCenter|Qt::AlignHCenter, ellidedBuildConfiguration); - p.setPen(penColor); + const QRectF shadowR = r.translated(0, 1); + painter.setPen(QColor(30, 30, 30, 80)); + painter.drawText(shadowR, textFlags, ellidedBuildConfiguration); + painter.setPen(penColor); } - p.drawText(r, Qt::AlignVCenter|Qt::AlignHCenter, ellidedBuildConfiguration); + painter.drawText(r, textFlags, ellidedBuildConfiguration); } } @@ -156,15 +156,19 @@ void FancyActionBar::paintEvent(QPaintEvent *event) { Q_UNUSED(event) } - QSize FancyToolButton::sizeHint() const { - QSize buttonSize = iconSize().expandedTo(QSize(64, 40)); + QSizeF buttonSize = iconSize().expandedTo(QSize(64, 40)); if (defaultAction()->property("titledAction").toBool()) { - int lineHeight = fontMetrics().height(); - buttonSize += QSize(0, lineHeight*4); + QFont boldFont(font()); + boldFont.setPointSizeF(Utils::StyleHelper::sidebarFontSize()); + boldFont.setBold(true); + QFontMetrics fm(boldFont); + qreal lineHeight = fm.height(); + buttonSize += QSizeF(0, (lineHeight*3.5)); + } - return buttonSize; + return buttonSize.toSize(); } QSize FancyToolButton::minimumSizeHint() const @@ -209,38 +213,14 @@ void FancyActionBar::addProjectSelector(QAction *action) m_actionsLayout->insertWidget(0, toolButton); } -void FancyActionBar::insertAction(int index, QAction *action, QMenu *menu) +void FancyActionBar::insertAction(int index, QAction *action) { FancyToolButton *toolButton = new FancyToolButton(this); toolButton->setDefaultAction(action); connect(action, SIGNAL(changed()), toolButton, SLOT(actionChanged())); - - if (menu) { - toolButton->setMenu(menu); - toolButton->setPopupMode(QToolButton::DelayedPopup); - - // execute action also if a context menu item is select - connect(toolButton, SIGNAL(triggered(QAction*)), - this, SLOT(toolButtonContextMenuActionTriggered(QAction*)), - Qt::QueuedConnection); - } m_actionsLayout->insertWidget(index, toolButton); } -/* - This slot is invoked when a context menu action of a tool button is triggered. - In this case we also want to trigger the default action of the button. - - This allows the user e.g. to select and run a specific run configuration with one click. - */ -void FancyActionBar::toolButtonContextMenuActionTriggered(QAction* action) -{ - if (QToolButton *button = qobject_cast<QToolButton*>(sender())) { - if (action != button->defaultAction()) - button->defaultAction()->trigger(); - } -} - QLayout *FancyActionBar::actionsLayout() const { return m_actionsLayout; |