diff options
author | Oleg Yadrov <oleg.yadrov@qt.io> | 2017-01-31 13:38:01 -0800 |
---|---|---|
committer | Oleg Yadrov <oleg.yadrov@qt.io> | 2017-03-08 18:39:01 +0000 |
commit | 175f33ed855b0a8a30daafacd4f48fa3f8e76a9b (patch) | |
tree | 11a2e8b91a1f1145ada5f74d155e68f091617c23 /src/widgets/widgets | |
parent | 5675334b6e22786195fe69a1fc1f40c49aaea37c (diff) |
QMacStyle: update QTabBar style
Task-number: QTBUG-58266
Change-Id: I135e4dae44e2e97d73b7c7c97d8e682bcf459d75
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@qt.io>
Diffstat (limited to 'src/widgets/widgets')
-rw-r--r-- | src/widgets/widgets/qtabbar.cpp | 44 | ||||
-rw-r--r-- | src/widgets/widgets/qtabbar_p.h | 4 | ||||
-rw-r--r-- | src/widgets/widgets/qtabwidget.cpp | 1 |
3 files changed, 40 insertions, 9 deletions
diff --git a/src/widgets/widgets/qtabbar.cpp b/src/widgets/widgets/qtabbar.cpp index 9bf062b407..eeece1a42a 100644 --- a/src/widgets/widgets/qtabbar.cpp +++ b/src/widgets/widgets/qtabbar.cpp @@ -519,12 +519,14 @@ void QTabBarPrivate::layoutTabs() maxExtent = maxWidth; } + if (!expanding) { + // Mirror our front item. + tabChain[tabChainIndex].init(); + tabChain[tabChainIndex].expansive = (tabAlignment != Qt::AlignRight) + && (tabAlignment != Qt::AlignJustify); + tabChain[tabChainIndex].empty = true; + } Q_ASSERT(tabChainIndex == tabChain.count() - 1); // add an assert just to make sure. - // Mirror our front item. - tabChain[tabChainIndex].init(); - tabChain[tabChainIndex].expansive = (tabAlignment != Qt::AlignRight) - && (tabAlignment != Qt::AlignJustify); - tabChain[tabChainIndex].empty = true; // Do the calculation qGeomCalc(tabChain, 0, tabChain.count(), 0, qMax(available, last), 0); @@ -664,6 +666,15 @@ QRect QTabBarPrivate::normalizedScrollRect(int index) } } +int QTabBarPrivate::hoveredTabIndex() const +{ + if (dragInProgress) + return currentIndex; + if (hoverIndex >= 0) + return hoverIndex; + return -1; +} + void QTabBarPrivate::makeVisible(int index) { Q_Q(QTabBar); @@ -1053,6 +1064,17 @@ void QTabBar::removeTab(int index) } d->refresh(); d->autoHideTabs(); + if (!d->hoverRect.isEmpty()) { + for (int i = 0; i < d->tabList.count(); ++i) { + const QRect area = tabRect(i); + if (area.contains(mapFromGlobal(QCursor::pos()))) { + d->hoverIndex = i; + d->hoverRect = area; + break; + } + } + update(d->hoverRect); + } tabRemoved(index); } } @@ -1577,20 +1599,28 @@ bool QTabBar::event(QEvent *event) QHoverEvent *he = static_cast<QHoverEvent *>(event); if (!d->hoverRect.contains(he->pos())) { QRect oldHoverRect = d->hoverRect; + bool cursorOverTabs = false; for (int i = 0; i < d->tabList.count(); ++i) { QRect area = tabRect(i); if (area.contains(he->pos())) { + d->hoverIndex = i; d->hoverRect = area; + cursorOverTabs = true; break; } } + if (!cursorOverTabs) { + d->hoverIndex = -1; + d->hoverRect = QRect(); + } if (he->oldPos() != QPoint(-1, -1)) update(oldHoverRect); update(d->hoverRect); } return true; - } else if (event->type() == QEvent::HoverLeave ) { + } else if (event->type() == QEvent::HoverLeave) { QRect oldHoverRect = d->hoverRect; + d->hoverIndex = -1; d->hoverRect = QRect(); update(oldHoverRect); return true; @@ -2435,7 +2465,7 @@ void QTabBar::setMovable(bool movable) This property is used as a hint for styles to draw the tabs in a different way then they would normally look in a tab widget. On \macos this will - look similar to the tabs in Safari or Leopard's Terminal.app. + look similar to the tabs in Safari or Sierra's Terminal.app. \sa QTabWidget::documentMode */ diff --git a/src/widgets/widgets/qtabbar_p.h b/src/widgets/widgets/qtabbar_p.h index e8d5503fdf..7c653a95e9 100644 --- a/src/widgets/widgets/qtabbar_p.h +++ b/src/widgets/widgets/qtabbar_p.h @@ -87,7 +87,7 @@ class QTabBarPrivate : public QWidgetPrivate public: QTabBarPrivate() :currentIndex(-1), pressedIndex(-1), shape(QTabBar::RoundedNorth), layoutDirty(false), - drawBase(true), scrollOffset(0), elideModeSetByUser(false), useScrollButtonsSetByUser(false), expanding(true), closeButtonOnTabs(false), + drawBase(true), scrollOffset(0), hoverIndex(-1), elideModeSetByUser(false), useScrollButtonsSetByUser(false), expanding(true), closeButtonOnTabs(false), selectionBehaviorOnRemove(QTabBar::SelectRightTab), paintWithOffsets(true), movable(false), dragInProgress(false), documentMode(false), autoHide(false), changeCurrentOnDrag(false), switchTabCurrentIndex(-1), switchTabTimerId(0), movingTab(0) @@ -192,6 +192,7 @@ public: void moveTab(int index, int offset); void moveTabFinished(int index); QRect hoverRect; + int hoverIndex; void refresh(); void layoutTabs(); @@ -202,6 +203,7 @@ public: void setupMovableTab(); void autoHideTabs(); QRect normalizedScrollRect(int index = -1); + int hoveredTabIndex() const; void initBasicStyleOption(QStyleOptionTab *option, int tabIndex) const; diff --git a/src/widgets/widgets/qtabwidget.cpp b/src/widgets/widgets/qtabwidget.cpp index 1394c6b44c..be870133ee 100644 --- a/src/widgets/widgets/qtabwidget.cpp +++ b/src/widgets/widgets/qtabwidget.cpp @@ -209,7 +209,6 @@ public: bool dirty; QTabWidget::TabPosition pos; QTabWidget::TabShape shape; - int alignment; QWidget *leftCornerWidget; QWidget *rightCornerWidget; }; |