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

Unified Diff: Source/platform/fonts/FontFastPath.cpp

Issue 141433026: Font metrics, version 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Adding Layout tests. Should work for simple text. Created 6 years, 11 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
Index: Source/platform/fonts/FontFastPath.cpp
diff --git a/Source/platform/fonts/FontFastPath.cpp b/Source/platform/fonts/FontFastPath.cpp
index 93e9015e08b1d050895e21ce0ccbc98aa6a53925..68ba4d5bd25ce40e831e77e18d3c94e42109f4f7 100644
--- a/Source/platform/fonts/FontFastPath.cpp
+++ b/Source/platform/fonts/FontFastPath.cpp
@@ -550,10 +550,10 @@ float Font::floatWidthForSimpleText(const TextRun& run, HashSet<const SimpleFont
return it.m_runWidthSoFar;
}
-FloatRect Font::selectionRectForSimpleText(const TextRun& run, const FloatPoint& point, int h, int from, int to) const
+FloatRect Font::selectionRectForSimpleText(const TextRun& run, const FloatPoint& point, int h, int from, int to, bool accountForGlyphBounds) const
{
GlyphBuffer glyphBuffer;
- WidthIterator it(this, run);
+ WidthIterator it(this, run, 0, accountForGlyphBounds);
it.advance(from, &glyphBuffer);
float beforeWidth = it.m_runWidthSoFar;
it.advance(to, &glyphBuffer);
@@ -567,13 +567,15 @@ FloatRect Font::selectionRectForSimpleText(const TextRun& run, const FloatPoint&
it.advance(run.length(), &glyphBuffer);
float totalWidth = it.m_runWidthSoFar;
float pixelAlignedX = floorf(point.x() + totalWidth - afterWidth + LayoutUnit::epsilon());
- return FloatRect(pixelAlignedX, point.y(),
- roundf(point.x() + totalWidth - beforeWidth) - pixelAlignedX, h);
+ return FloatRect(pixelAlignedX, point.y() + accountForGlyphBounds ? it.minGlyphBoundingBoxY() : 0,
+ roundf(point.x() + totalWidth - beforeWidth) - pixelAlignedX,
+ accountForGlyphBounds ? it.maxGlyphBoundingBoxY() - it.minGlyphBoundingBoxY() : h);
}
float pixelAlignedX = floorf(point.x() + beforeWidth + LayoutUnit::epsilon());
- return FloatRect(pixelAlignedX, point.y(),
- roundf(point.x() + afterWidth) - pixelAlignedX, h);
+ return FloatRect(pixelAlignedX, point.y() + accountForGlyphBounds ? it.minGlyphBoundingBoxY() : 0,
+ roundf(point.x() + afterWidth) - pixelAlignedX,
+ accountForGlyphBounds ? it.maxGlyphBoundingBoxY() - it.minGlyphBoundingBoxY() : h);
}
int Font::offsetForPositionForSimpleText(const TextRun& run, float x, bool includePartialGlyphs) const
« Source/core/html/canvas/CanvasRenderingContext2D.cpp ('K') | « Source/platform/fonts/Font.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698