diff options
Diffstat (limited to 'src/widgets')
| -rw-r--r-- | src/widgets/itemviews/qtreeview.cpp | 11 | ||||
| -rw-r--r-- | src/widgets/kernel/qstandardgestures.cpp | 10 | ||||
| -rw-r--r-- | src/widgets/styles/qcommonstyle.cpp | 46 |
3 files changed, 33 insertions, 34 deletions
diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp index 570566793dc..0f0496ad04d 100644 --- a/src/widgets/itemviews/qtreeview.cpp +++ b/src/widgets/itemviews/qtreeview.cpp @@ -1622,12 +1622,6 @@ void QTreeViewPrivate::calcLogicalIndices( const auto indicesCount = logicalIndices->size(); itemPositions->resize(indicesCount); for (qsizetype currentLogicalSection = 0; currentLogicalSection < indicesCount; ++currentLogicalSection) { - // shortcut, no need to calc anything more - if (indicesCount == 1 || spanning) { - (*itemPositions)[currentLogicalSection] = QStyleOptionViewItem::OnlyOne; - continue; - } - const int headerSection = logicalIndices->at(currentLogicalSection); // determine the viewItemPosition depending on the position of column 0 int nextLogicalSection = currentLogicalSection + 1 >= indicesCount ? logicalIndexAfterRight @@ -1635,8 +1629,11 @@ void QTreeViewPrivate::calcLogicalIndices( int prevLogicalSection = currentLogicalSection - 1 < 0 ? logicalIndexBeforeLeft : logicalIndices->at(currentLogicalSection - 1); + const int headerSection = logicalIndices->at(currentLogicalSection); QStyleOptionViewItem::ViewItemPosition pos; - if ((nextLogicalSection != 0 && prevLogicalSection == -1) || isTreePosition(headerSection)) + if ((nextLogicalSection == -1 && prevLogicalSection == -1) || spanning) { + pos = QStyleOptionViewItem::OnlyOne; + } else if ((nextLogicalSection != 0 && prevLogicalSection == -1) || isTreePosition(headerSection)) pos = QStyleOptionViewItem::Beginning; else if (nextLogicalSection == 0 || nextLogicalSection == -1) pos = QStyleOptionViewItem::End; diff --git a/src/widgets/kernel/qstandardgestures.cpp b/src/widgets/kernel/qstandardgestures.cpp index e9de82d2357..314d82fd64f 100644 --- a/src/widgets/kernel/qstandardgestures.cpp +++ b/src/widgets/kernel/qstandardgestures.cpp @@ -348,8 +348,14 @@ QGestureRecognizer::Result QSwipeGestureRecognizer::recognize(QGesture *state, result = QGestureRecognizer::Ignore; break; case QSwipeGesturePrivate::ThreePointsReached: - result = (ev->touchPointStates() & QEventPoint::State::Pressed) - ? QGestureRecognizer::CancelGesture : QGestureRecognizer::Ignore; + if (ev->touchPointStates() & QEventPoint::State::Pressed) { + result = QGestureRecognizer::CancelGesture; + } else if (d->verticalDirection != QSwipeGesture::NoDirection || + d->horizontalDirection != QSwipeGesture::NoDirection) { + result = QGestureRecognizer::TriggerGesture; + } else { + result = QGestureRecognizer::Ignore; + } break; } } diff --git a/src/widgets/styles/qcommonstyle.cpp b/src/widgets/styles/qcommonstyle.cpp index 592b70ef8ba..1f026775435 100644 --- a/src/widgets/styles/qcommonstyle.cpp +++ b/src/widgets/styles/qcommonstyle.cpp @@ -1200,7 +1200,7 @@ void QCommonStylePrivate::tabLayout(const QStyleOptionTab *opt, const QWidget *w int vpadding = proxyStyle->pixelMetric(QStyle::PM_TabBarTabVSpace, opt, widget) / 2; if (opt->shape == QTabBar::RoundedSouth || opt->shape == QTabBar::TriangularSouth) verticalShift = -verticalShift; - tr.adjust(hpadding, verticalShift - vpadding, horizontalShift - hpadding, vpadding); + tr.adjust(hpadding, verticalShift + vpadding, horizontalShift - hpadding, -vpadding); bool selected = opt->state & QStyle::State_Selected; if (selected) { tr.setTop(tr.top() - verticalShift); @@ -1625,23 +1625,18 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, if (const QStyleOptionHeader *header = qstyleoption_cast<const QStyleOptionHeader *>(opt)) { QRect rect = header->rect; if (!header->icon.isNull()) { - int iconExtent = proxy()->pixelMetric(PM_SmallIconSize, opt, widget); - QPixmap pixmap - = header->icon.pixmap(QSize(iconExtent, iconExtent), QStyleHelper::getDpr(p), (header->state & State_Enabled) ? QIcon::Normal : QIcon::Disabled); - int pixw = pixmap.width() / pixmap.devicePixelRatio(); - - QRect aligned = alignedRect(header->direction, header->iconAlignment, pixmap.size() / pixmap.devicePixelRatio(), rect); - QRect inter = aligned.intersected(rect); - p->drawPixmap(inter.x(), inter.y(), pixmap, - inter.x() - aligned.x(), inter.y() - aligned.y(), - aligned.width() * pixmap.devicePixelRatio(), - pixmap.height() * pixmap.devicePixelRatio()); + const int iconExtent = proxy()->pixelMetric(PM_SmallIconSize, opt, widget); + const QRect aligned = alignedRect(header->direction, header->iconAlignment, + QSize(iconExtent, iconExtent), rect); + header->icon.paint(p, aligned, Qt::AlignCenter, + header->state.testFlag(State_Enabled) ? QIcon::Normal + : QIcon::Disabled); const int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, opt, widget); if (header->direction == Qt::LeftToRight) - rect.setLeft(rect.left() + pixw + margin); + rect.setLeft(rect.left() + iconExtent + margin); else - rect.setRight(rect.right() - pixw - margin); + rect.setRight(rect.right() - iconExtent - margin); } QFontMetrics fm(header->fontMetrics); if (header->state & QStyle::State_On) { @@ -2838,7 +2833,6 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt, int verticalShift = proxy()->pixelMetric(QStyle::PM_TabBarTabShiftVertical, tab, widget); int horizontalShift = proxy()->pixelMetric(QStyle::PM_TabBarTabShiftHorizontal, tab, widget); int hpadding = proxy()->pixelMetric(QStyle::PM_TabBarTabHSpace, opt, widget) / 2; - hpadding = qMax(hpadding, 4); //workaround KStyle returning 0 because they workaround an old bug in Qt bool verticalTabs = tab->shape == QTabBar::RoundedEast || tab->shape == QTabBar::RoundedWest @@ -2866,8 +2860,6 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt, QSize size = (sr == SE_TabBarTabLeftButton) ? tab->leftButtonSize : tab->rightButtonSize; int w = size.width(); int h = size.height(); - int midHeight = static_cast<int>(qCeil(float(tr.height() - h) / 2)); - int midWidth = ((tr.width() - w) / 2); bool atTheTop = true; switch (tab->shape) { @@ -2879,14 +2871,19 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt, case QTabBar::TriangularEast: atTheTop = (sr == SE_TabBarTabRightButton); break; - default: + default: { + const int midHeight = + tr.y() + static_cast<int>(qCeil(float(tr.height() - h) / 2)); if (sr == SE_TabBarTabLeftButton) r = QRect(tab->rect.x() + hpadding, midHeight, w, h); else r = QRect(tab->rect.right() - w - hpadding, midHeight, w, h); r = visualRect(tab->direction, tab->rect, r); + break; + } } if (verticalTabs) { + const int midWidth = tr.x() + ((tr.width() - w) / 2); if (atTheTop) r = QRect(midWidth, tr.y() + tab->rect.height() - hpadding - h, w, h); else @@ -4209,20 +4206,19 @@ QRect QCommonStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex #if QT_CONFIG(toolbutton) case CC_ToolButton: if (const QStyleOptionToolButton *tb = qstyleoption_cast<const QStyleOptionToolButton *>(opt)) { - int mbi = proxy()->pixelMetric(PM_MenuButtonIndicator, tb, widget); ret = tb->rect; switch (sc) { case SC_ToolButton: - if ((tb->features - & (QStyleOptionToolButton::MenuButtonPopup | QStyleOptionToolButton::PopupDelay)) - == QStyleOptionToolButton::MenuButtonPopup) + if (tb->features.testFlag(QStyleOptionToolButton::MenuButtonPopup)) { + const int mbi = proxy()->pixelMetric(PM_MenuButtonIndicator, tb, widget); ret.adjust(0, 0, -mbi, 0); + } break; case SC_ToolButtonMenu: - if ((tb->features - & (QStyleOptionToolButton::MenuButtonPopup | QStyleOptionToolButton::PopupDelay)) - == QStyleOptionToolButton::MenuButtonPopup) + if (tb->features.testFlag(QStyleOptionToolButton::MenuButtonPopup)) { + const int mbi = proxy()->pixelMetric(PM_MenuButtonIndicator, tb, widget); ret.adjust(ret.width() - mbi, 0, 0, 0); + } break; default: break; |
