Fix new spoilers with elided text.

This commit is contained in:
John Preston 2022-09-17 01:22:22 +04:00
parent 73b6bc5e13
commit bd7098ef42

View file

@ -950,10 +950,29 @@ bool Renderer::drawLine(uint16 _lineEnd, const String::TextBlocks::const_iterato
? fillSpoilerOpacity() ? fillSpoilerOpacity()
: 0.; : 0.;
const auto opacity = _p->opacity(); const auto opacity = _p->opacity();
const auto isElidedBlock = (!rtl) const auto isElidedBlock = !rtl
&& (_indexOfElidedBlock == blockIndex); && (_indexOfElidedBlock == blockIndex);
const auto complexClipping = hasSpoiler
&& isElidedBlock
&& spoilerOpacity == 1.;
if ((spoilerOpacity < 1.) || isElidedBlock) { if ((spoilerOpacity < 1.) || isElidedBlock) {
if (hasSpoiler && !isElidedBlock) { const auto complexClippingEnabled = complexClipping
&& _p->hasClipping();
const auto complexClippingRegion = complexClipping
? _p->clipRegion()
: QRegion();
if (complexClipping) {
const auto elided = (_indexOfElidedBlock == blockIndex)
? (_elideRemoveFromEnd + _f->elidew)
: 0;
_p->setClipRect(
QRect(
(x + itemWidth).toInt() - elided,
_y - _lineHeight,
elided,
_y + 2 * _lineHeight),
Qt::IntersectClip);
} else if (hasSpoiler && !isElidedBlock) {
_p->setOpacity(opacity * (1. - spoilerOpacity)); _p->setOpacity(opacity * (1. - spoilerOpacity));
} }
if (Q_UNLIKELY(hasSelected)) { if (Q_UNLIKELY(hasSelected)) {
@ -999,6 +1018,13 @@ bool Renderer::drawLine(uint16 _lineEnd, const String::TextBlocks::const_iterato
_p->setPen(*_currentPen); _p->setPen(*_currentPen);
_p->drawTextItem(QPointF(x.toReal(), textY), gf); _p->drawTextItem(QPointF(x.toReal(), textY), gf);
} }
if (complexClipping) {
if (complexClippingEnabled) {
_p->setClipRegion(complexClippingRegion);
} else {
_p->setClipping(false);
}
}
} }
if (hasSpoiler) { if (hasSpoiler) {