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()
|
? 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) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue