Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(786)

Unified Diff: third_party/WebKit/Source/core/layout/svg/SVGTextQuery.cpp

Issue 1821613002: Make calculateGlyphBoundaries helper return the computed bounds (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/layout/svg/SVGTextQuery.cpp
diff --git a/third_party/WebKit/Source/core/layout/svg/SVGTextQuery.cpp b/third_party/WebKit/Source/core/layout/svg/SVGTextQuery.cpp
index 8b2556c2f3287d9022b3b746b46d523faeb8c16f..201ed833b31da0b7e9074053b17130d17d816f8d 100644
--- a/third_party/WebKit/Source/core/layout/svg/SVGTextQuery.cpp
+++ b/third_party/WebKit/Source/core/layout/svg/SVGTextQuery.cpp
@@ -459,14 +459,13 @@ struct ExtentOfCharacterData : QueryData {
FloatRect extent;
};
-static inline void calculateGlyphBoundaries(const QueryData* queryData, const SVGTextFragment& fragment, int startPosition, FloatRect& extent)
+static inline FloatRect calculateGlyphBoundaries(const QueryData* queryData, const SVGTextFragment& fragment, int startPosition)
{
float scalingFactor = queryData->textLineLayout.scalingFactor();
ASSERT(scalingFactor);
FloatPoint glyphPosition = calculateGlyphPositionWithoutTransform(queryData, fragment, startPosition);
glyphPosition.move(0, -queryData->textLineLayout.scaledFont().getFontMetrics().floatAscent() / scalingFactor);
- extent.setLocation(glyphPosition);
// Use the SVGTextMetrics computed by SVGTextMetricsBuilder (which spends
// time attempting to compute more correct glyph bounds already, handling
@@ -477,20 +476,21 @@ static inline void calculateGlyphBoundaries(const QueryData* queryData, const SV
// TODO(fs): Negative glyph extents seems kind of weird to have, but
// presently it can occur in some cases (like Arabic.)
FloatSize glyphSize(std::max<float>(metrics.width(), 0), std::max<float>(metrics.height(), 0));
- extent.setSize(glyphSize);
// If RTL, adjust the starting point to align with the LHS of the glyph bounding box.
if (!queryData->textBox->isLeftToRightDirection()) {
if (queryData->isVerticalText)
- extent.move(0, -glyphSize.height());
+ glyphPosition.move(0, -glyphSize.height());
else
- extent.move(-glyphSize.width(), 0);
+ glyphPosition.move(-glyphSize.width(), 0);
}
+ FloatRect extent(glyphPosition, glyphSize);
if (fragment.isTransformed()) {
AffineTransform fragmentTransform = fragment.buildFragmentTransform(SVGTextFragment::TransformIgnoringTextLength);
extent = fragmentTransform.mapRect(extent);
}
+ return extent;
}
static inline FloatRect calculateFragmentBoundaries(LineLayoutSVGInlineText textLineLayout, const SVGTextFragment& fragment)
@@ -510,7 +510,7 @@ static bool extentOfCharacterCallback(QueryData* queryData, const SVGTextFragmen
if (!mapStartEndPositionsIntoFragmentCoordinates(queryData, fragment, startPosition, endPosition))
return false;
- calculateGlyphBoundaries(queryData, fragment, startPosition, data->extent);
+ data->extent = calculateGlyphBoundaries(queryData, fragment, startPosition);
return true;
}
@@ -585,12 +585,11 @@ static bool characterNumberAtPositionCallback(QueryData* queryData, const SVGTex
// Iterate through the glyphs in this fragment, and check if their extents
// contain the query point.
- FloatRect extent;
const Vector<SVGTextMetrics>& textMetrics = queryData->textLineLayout.layoutAttributes()->textMetricsValues();
unsigned textMetricsOffset = fragment.metricsListOffset;
unsigned fragmentOffset = 0;
while (fragmentOffset < fragment.length) {
- calculateGlyphBoundaries(queryData, fragment, fragmentOffset, extent);
+ FloatRect extent = calculateGlyphBoundaries(queryData, fragment, fragmentOffset);
if (extent.contains(data->position)) {
// Compute the character offset of the glyph within the text node.
unsigned offsetInBox = fragment.characterOffset - queryData->textBox->start() + fragmentOffset;
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698