Fix new spoilers with elided text.
This commit is contained in:
parent
73b6bc5e13
commit
bd7098ef42
1 changed files with 28 additions and 2 deletions
|
|
@ -950,10 +950,29 @@ bool Renderer::drawLine(uint16 _lineEnd, const String::TextBlocks::const_iterato
|
|||
? fillSpoilerOpacity()
|
||||
: 0.;
|
||||
const auto opacity = _p->opacity();
|
||||
const auto isElidedBlock = (!rtl)
|
||||
const auto isElidedBlock = !rtl
|
||||
&& (_indexOfElidedBlock == blockIndex);
|
||||
const auto complexClipping = hasSpoiler
|
||||
&& isElidedBlock
|
||||
&& spoilerOpacity == 1.;
|
||||
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));
|
||||
}
|
||||
if (Q_UNLIKELY(hasSelected)) {
|
||||
|
|
@ -999,6 +1018,13 @@ bool Renderer::drawLine(uint16 _lineEnd, const String::TextBlocks::const_iterato
|
|||
_p->setPen(*_currentPen);
|
||||
_p->drawTextItem(QPointF(x.toReal(), textY), gf);
|
||||
}
|
||||
if (complexClipping) {
|
||||
if (complexClippingEnabled) {
|
||||
_p->setClipRegion(complexClippingRegion);
|
||||
} else {
|
||||
_p->setClipping(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (hasSpoiler) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue