From b39bbc95f685e59744fd282b006d3fa7b247ed36 Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Wed, 12 Nov 2014 14:13:13 +0100 Subject: QHeaderView: take the sort indicator into account when eliding text MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit By adding PM_HeaderMarkSize to the margins if the section is showing a sort indicator. Turns out that that particular enum was actually unused in QtWidgets (!), so tune the value to match reality. Task-number: QTBUG-629 Change-Id: I8bc70451656d634a064c8b5014e449977c55aa9d Reviewed-by: Cristian Oneț Reviewed-by: Thorbjørn Lund Martsum Reviewed-by: Friedemann Kleint --- src/widgets/itemviews/qheaderview.cpp | 11 +++++++++-- src/widgets/styles/qcommonstyle.cpp | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/widgets/itemviews/qheaderview.cpp b/src/widgets/itemviews/qheaderview.cpp index b609134322..beade16339 100644 --- a/src/widgets/itemviews/qheaderview.cpp +++ b/src/widgets/itemviews/qheaderview.cpp @@ -1550,7 +1550,7 @@ int QHeaderView::minimumSectionSize() const Q_D(const QHeaderView); if (d->minimumSectionSize == -1) { QSize strut = QApplication::globalStrut(); - int margin = style()->pixelMetric(QStyle::PM_HeaderMargin, 0, this); + int margin = 2 * style()->pixelMetric(QStyle::PM_HeaderMargin, 0, this); if (d->orientation == Qt::Horizontal) return qMax(strut.width(), (fontMetrics().maxWidth() + margin)); return qMax(strut.height(), (fontMetrics().height() + margin)); @@ -2663,7 +2663,14 @@ void QHeaderView::paintSection(QPainter *painter, const QRect &rect, int logical opt.iconAlignment = Qt::AlignVCenter; opt.text = d->model->headerData(logicalIndex, d->orientation, Qt::DisplayRole).toString(); - const int margin = 2 * style()->pixelMetric(QStyle::PM_HeaderMargin, 0, this); + + int margin = 2 * style()->pixelMetric(QStyle::PM_HeaderMargin, 0, this); + + const Qt::Alignment headerArrowAlignment = static_cast(style()->styleHint(QStyle::SH_Header_ArrowAlignment, 0, this)); + const bool isHeaderArrowOnTheSide = headerArrowAlignment & Qt::AlignVCenter; + if (isSortIndicatorShown() && sortIndicatorSection() == logicalIndex && isHeaderArrowOnTheSide) + margin += style()->pixelMetric(QStyle::PM_HeaderMarkSize, 0, this); + if (d->textElideMode != Qt::ElideNone) opt.text = opt.fontMetrics.elidedText(opt.text, d->textElideMode , rect.width() - margin); diff --git a/src/widgets/styles/qcommonstyle.cpp b/src/widgets/styles/qcommonstyle.cpp index aeffa6195d..c688462794 100644 --- a/src/widgets/styles/qcommonstyle.cpp +++ b/src/widgets/styles/qcommonstyle.cpp @@ -4587,7 +4587,7 @@ int QCommonStyle::pixelMetric(PixelMetric m, const QStyleOption *opt, const QWid ret = int(QStyleHelper::dpiScaled(4.)); break; case PM_HeaderMarkSize: - ret = int(QStyleHelper::dpiScaled(32.)); + ret = int(QStyleHelper::dpiScaled(16.)); break; case PM_HeaderGripMargin: ret = int(QStyleHelper::dpiScaled(4.)); -- cgit v1.2.3