Fix crash in empty text state resolving.

This commit is contained in:
John Preston 2022-09-23 20:45:39 +04:00
parent 0f77143905
commit 1ceaa0bbcf

View file

@ -399,7 +399,9 @@ void Renderer::enumerate() {
} }
StateResult Renderer::getState(QPoint point, int w, StateRequest request) { StateResult Renderer::getState(QPoint point, int w, StateRequest request) {
if (!_t->isNull() && point.y() >= 0) { if (_t->isEmpty() || point.y() < 0) {
return {};
}
_lookupRequest = request; _lookupRequest = request;
_lookupX = point.x(); _lookupX = point.x();
_lookupY = point.y(); _lookupY = point.y();
@ -407,19 +409,21 @@ StateResult Renderer::getState(QPoint point, int w, StateRequest request) {
_breakEverywhere = (_lookupRequest.flags & StateRequest::Flag::BreakEverywhere); _breakEverywhere = (_lookupRequest.flags & StateRequest::Flag::BreakEverywhere);
_lookupSymbol = (_lookupRequest.flags & StateRequest::Flag::LookupSymbol); _lookupSymbol = (_lookupRequest.flags & StateRequest::Flag::LookupSymbol);
_lookupLink = (_lookupRequest.flags & StateRequest::Flag::LookupLink); _lookupLink = (_lookupRequest.flags & StateRequest::Flag::LookupLink);
if (_lookupSymbol || (_lookupX >= 0 && _lookupX < w)) { if (!_lookupSymbol && (_lookupX < 0 || _lookupX >= w)) {
return {};
}
_w = w; _w = w;
_yFrom = _lookupY; _yFrom = _lookupY;
_yTo = _lookupY + 1; _yTo = _lookupY + 1;
_align = _lookupRequest.align; _align = _lookupRequest.align;
enumerate(); enumerate();
}
}
return _lookupResult; return _lookupResult;
} }
StateResult Renderer::getStateElided(QPoint point, int w, StateRequestElided request) { StateResult Renderer::getStateElided(QPoint point, int w, StateRequestElided request) {
if (!_t->isNull() && point.y() >= 0 && request.lines > 0) { if (_t->isEmpty() || point.y() < 0 || request.lines <= 0) {
return {};
}
_lookupRequest = request; _lookupRequest = request;
_lookupX = point.x(); _lookupX = point.x();
_lookupY = point.y(); _lookupY = point.y();
@ -427,7 +431,9 @@ StateResult Renderer::getStateElided(QPoint point, int w, StateRequestElided req
_breakEverywhere = (_lookupRequest.flags & StateRequest::Flag::BreakEverywhere); _breakEverywhere = (_lookupRequest.flags & StateRequest::Flag::BreakEverywhere);
_lookupSymbol = (_lookupRequest.flags & StateRequest::Flag::LookupSymbol); _lookupSymbol = (_lookupRequest.flags & StateRequest::Flag::LookupSymbol);
_lookupLink = (_lookupRequest.flags & StateRequest::Flag::LookupLink); _lookupLink = (_lookupRequest.flags & StateRequest::Flag::LookupLink);
if (_lookupSymbol || (_lookupX >= 0 && _lookupX < w)) { if (!_lookupSymbol && (_lookupX < 0 || _lookupX >= w)) {
return {};
}
int yTo = _lookupY + 1; int yTo = _lookupY + 1;
if (yTo < 0 || (request.lines - 1) * _t->_st->font->height < yTo) { if (yTo < 0 || (request.lines - 1) * _t->_st->font->height < yTo) {
yTo = request.lines * _t->_st->font->height; yTo = request.lines * _t->_st->font->height;
@ -439,8 +445,6 @@ StateResult Renderer::getStateElided(QPoint point, int w, StateRequestElided req
_yTo = _lookupY + 1; _yTo = _lookupY + 1;
_align = _lookupRequest.align; _align = _lookupRequest.align;
enumerate(); enumerate();
}
}
return _lookupResult; return _lookupResult;
} }