diff options
| author | Akseli Lahtinen <[email protected]> | 2025-04-24 15:03:42 +0300 |
|---|---|---|
| committer | Akseli Lahtinen <[email protected]> | 2025-04-24 15:08:25 +0300 |
| commit | be36fc1bc45b63693bd5861efed94c08cd9ffe2a (patch) | |
| tree | d28221d403d6b81ec1bf98c45467c31db0ff39e8 /src/statusbar | |
| parent | 98dfc4dc180386e79ce2914aab57b2944be83620 (diff) | |
DolphinStatusBar: Fix premature text squeezing
The text would get squeezed and elided prematurely due to some clipping
calculations and paddings created for the clipping.
This slightly modifies the clipping code, that we extend the painted
area and then clip off the excess, instead of moving the area to
specific place and then clipping off the excess.
This also makes sure the text width accounts for one extra character
plus the clippings we do, so that text will always fit the statusbar.
BUG: 503164
Diffstat (limited to 'src/statusbar')
| -rw-r--r-- | src/statusbar/dolphinstatusbar.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/statusbar/dolphinstatusbar.cpp b/src/statusbar/dolphinstatusbar.cpp index 17a29e84c..f81120a44 100644 --- a/src/statusbar/dolphinstatusbar.cpp +++ b/src/statusbar/dolphinstatusbar.cpp @@ -50,6 +50,7 @@ DolphinStatusBar::DolphinStatusBar(QWidget *parent) setProperty("_breeze_statusbar_separator", true); QWidget *contentsContainer = prepareContentsContainer(); + contentsContainer->setContentsMargins(0, 0, 0, 0); // Initialize text label m_label = new KSqueezedTextLabel(m_text, contentsContainer); @@ -292,8 +293,8 @@ void DolphinStatusBar::updateWidthToContent() // from "jumping around" when user tries to interact with them. setFixedWidth(maximumViewWidth); } else { - const int contentWidth = style()->pixelMetric(QStyle::PM_LayoutLeftMargin, &opt, this) + labelSize.width() - + style()->pixelMetric(QStyle::PM_LayoutRightMargin, &opt, this); + // Make sure we have room for the text + const int contentWidth = labelSize.width() + QFontMetrics(font()).averageCharWidth() + (clippingAmount() * 2); setFixedWidth(qMin(contentWidth, maximumViewWidth)); } Q_EMIT widthUpdated(); @@ -422,7 +423,7 @@ void DolphinStatusBar::updateContentsMargins() m_topLayout->setContentsMargins(6, 0, 2, 0); } else { // Add extra margins to toplayout to avoid clipping too early. - m_topLayout->setContentsMargins(clippingAmount() * 2, 0, clippingAmount(), clippingAmount()); + m_topLayout->setContentsMargins(clippingAmount() * 2, 0, clippingAmount(), 0); } setContentsMargins(0, 0, 0, 0); } @@ -438,11 +439,13 @@ void DolphinStatusBar::paintEvent(QPaintEvent *paintEvent) if (m_label && !m_label->fullText().isEmpty()) { opt.state = QStyle::State_Sunken; QPainterPath path; - // Clip the left and bottom border off. + // Adjust the rectangle to be a bit larger, then clip the left and bottom border off. QRect clipRect; if (layoutDirection() == Qt::RightToLeft) { + opt.rect = rect().adjusted(0, 0, clippingAmount(), clippingAmount()); clipRect = QRect(opt.rect.topLeft(), opt.rect.bottomRight()).adjusted(0, 0, -clippingAmount(), -clippingAmount()); } else { + opt.rect = rect().adjusted(-clippingAmount(), 0, 0, clippingAmount()); clipRect = QRect(opt.rect.topLeft(), opt.rect.bottomRight()).adjusted(clippingAmount(), 0, 0, -clippingAmount()); } path.addRect(clipRect); |
