Fix double click to select full words (#5243)

Co-authored-by: Rasmus Karlsson <rasmus.karlsson@pajlada.com>
This commit is contained in:
KleberPF
2024-03-17 10:43:55 -03:00
committed by GitHub
parent 46c5609736
commit c10e364e06
11 changed files with 224 additions and 22 deletions
@@ -51,6 +51,7 @@ void MessageLayoutContainer::beginLayout(int width, float scale,
this->textLineHeight_ = mediumFontMetrics.height();
this->spaceWidth_ = mediumFontMetrics.horizontalAdvance(' ');
this->dotdotdotWidth_ = mediumFontMetrics.horizontalAdvance("...");
this->currentWordId_ = 0;
this->canAddMessages_ = true;
this->isCollapsed_ = false;
this->wasPrevReversed_ = false;
@@ -456,6 +457,50 @@ size_t MessageLayoutContainer::getFirstMessageCharacterIndex() const
return index;
}
std::pair<int, int> MessageLayoutContainer::getWordBounds(
const MessageLayoutElement *hoveredElement) const
{
if (this->elements_.empty())
{
return {0, 0};
}
size_t index = 0;
size_t wordStart = 0;
for (; index < this->elements_.size(); index++)
{
const auto &element = this->elements_[index];
if (element->getWordId() == hoveredElement->getWordId())
{
break;
}
wordStart += element->getSelectionIndexCount();
}
size_t wordEnd = wordStart;
for (; index < this->elements_.size(); index++)
{
const auto &element = this->elements_[index];
if (element->getWordId() != hoveredElement->getWordId())
{
break;
}
wordEnd += element->getSelectionIndexCount();
}
const auto *lastElementInSelection = this->elements_[index - 1].get();
if (lastElementInSelection->hasTrailingSpace())
{
wordEnd--;
}
return {wordStart, wordEnd};
}
size_t MessageLayoutContainer::getLastCharacterIndex() const
{
if (this->lines_.empty())
@@ -505,6 +550,11 @@ int MessageLayoutContainer::remainingWidth() const
this->currentX_;
}
int MessageLayoutContainer::nextWordId()
{
return this->currentWordId_++;
}
void MessageLayoutContainer::addElement(MessageLayoutElement *element,
const bool forceAdd,
const int prevIndex)