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