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
QRect DolphinViewContainer::preferredSmallStatusBarGeometry()
{
QRect DolphinViewContainer::preferredSmallStatusBarGeometry()
{
- // Adjust to clipping, we need to add 1 due to how QRects coordinates work.
- int clipAdjustment = m_statusBar->clippingAmount() + 1;
- // Add offset depending if horizontal scrollbar or filterbar is visible.
- const int yPos = m_view->geometry().bottom() - m_view->horizontalScrollBarHeight() - m_statusBar->minimumHeight() + clipAdjustment;
- QRect statusBarRect = rect().adjusted(-clipAdjustment, yPos, 0, 0);
+ // Add offset depending if horizontal scrollbar or filterbar is visible, we need to add 1 due to how QRect coordinates work.
+ const int yPos = m_view->geometry().bottom() - m_view->horizontalScrollBarHeight() - m_statusBar->minimumHeight() + 1;
+ QRect statusBarRect = rect().adjusted(0, yPos, 0, 0);
setProperty("_breeze_statusbar_separator", true);
QWidget *contentsContainer = prepareContentsContainer();
setProperty("_breeze_statusbar_separator", true);
QWidget *contentsContainer = prepareContentsContainer();
+ contentsContainer->setContentsMargins(0, 0, 0, 0);
// Initialize text label
m_label = new KSqueezedTextLabel(m_text, contentsContainer);
// Initialize text label
m_label = new KSqueezedTextLabel(m_text, contentsContainer);
// from "jumping around" when user tries to interact with them.
setFixedWidth(maximumViewWidth);
} else {
// 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();
setFixedWidth(qMin(contentWidth, maximumViewWidth));
}
Q_EMIT widthUpdated();
m_topLayout->setContentsMargins(6, 0, 2, 0);
} else {
// Add extra margins to toplayout to avoid clipping too early.
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);
}
}
setContentsMargins(0, 0, 0, 0);
}
if (m_label && !m_label->fullText().isEmpty()) {
opt.state = QStyle::State_Sunken;
QPainterPath path;
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) {
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 {
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);
clipRect = QRect(opt.rect.topLeft(), opt.rect.bottomRight()).adjusted(clippingAmount(), 0, 0, -clippingAmount());
}
path.addRect(clipRect);