[Webkit-unassigned] [Bug 261651] SVGTextQuery Performance Optimizations
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Sun Sep 17 11:26:00 PDT 2023
https://bugs.webkit.org/show_bug.cgi?id=261651
--- Comment #1 from Ahmad Saleem <ahmad.saleem792 at gmail.com> ---
Manage to sort out other as well:
void SVGTextQuery::modifyStartEndPositionsRespectingLigatures(Data* queryData, const SVGTextFragment& fragment, unsigned& startPosition, unsigned& endPosition) const
{
SVGTextLayoutAttributes* layoutAttributes = queryData->textRenderer->layoutAttributes();
Vector<SVGTextMetrics>& textMetricsValues = layoutAttributes->textMetricsValues();
unsigned textMetricsOffset = fragment.metricsListOffset;
// Compute the offset of the fragment within the box, since that's the
// space <startPosition, endPosition> is in (and that's what we need).
int fragmentOffsetInBox = fragment.characterOffset - queryData->textBox->start();
int fragmentEndInBox = fragmentOffsetInBox + fragment.length;
// Find the text metrics cell that start at or contain the character startPosition.
while (fragmentOffsetInBox < fragmentEndInBox) {
SVGTextMetrics& metrics = textMetricsValues[textMetricsOffset];
int glyphEnd = fragmentOffsetInBox + metrics.length();
if (static_cast<int>(startPosition) < glyphEnd)
break;
fragmentOffsetInBox = glyphEnd;
textMetricsOffset++;
}
startPosition = fragmentOffsetInBox;
// Find the text metrics cell that contain or ends at the character endPosition.
while (fragmentOffsetInBox < fragmentEndInBox) {
SVGTextMetrics& metrics = textMetricsValues[textMetricsOffset];
fragmentOffsetInBox += metrics.length();
if (fragmentOffsetInBox >= static_cast<int>(endPosition))
break;
textMetricsOffset++;
}
endPosition = fragmentOffsetInBox;
--
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-unassigned/attachments/20230917/3c8c5f99/attachment.htm>
More information about the webkit-unassigned
mailing list