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

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

Issue 860163004: Using FloatRect in SimpleShaper and remove GlyphBounds (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Comment fixes Created 5 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/Font.cpp
diff --git a/Source/platform/fonts/Font.cpp b/Source/platform/fonts/Font.cpp
index 02d2e3ac7366aa89324bd04a9c4184ae73de42b5..be21bc0049fcf43eb8df8268c5b348f7e075e17f 100644
--- a/Source/platform/fonts/Font.cpp
+++ b/Source/platform/fonts/Font.cpp
@@ -108,7 +108,7 @@ float Font::buildGlyphBuffer(const TextRunPaintInfo& runInfo, GlyphBuffer& glyph
}
SimpleShaper shaper(this, runInfo.run, nullptr /* fallbackFonts */,
- nullptr /* GlyphBounds */, forTextEmphasis);
+ nullptr, forTextEmphasis);
shaper.advance(runInfo.from);
shaper.advance(runInfo.to, &glyphBuffer);
float width = shaper.runWidthSoFar();
@@ -786,14 +786,15 @@ void Font::drawTextBlob(GraphicsContext* gc, const SkTextBlob* blob, const SkPoi
float Font::floatWidthForComplexText(const TextRun& run, HashSet<const SimpleFontData*>* fallbackFonts, IntRectOutsets* glyphBounds) const
{
- HarfBuzzShaper shaper(this, run, HarfBuzzShaper::NotForTextEmphasis, fallbackFonts);
+ FloatRect bounds;
+ HarfBuzzShaper shaper(this, run, HarfBuzzShaper::NotForTextEmphasis, fallbackFonts, glyphBounds ? &bounds : 0);
if (!shaper.shape())
return 0;
- glyphBounds->setTop(ceilf(-shaper.glyphBoundingBox().y()));
- glyphBounds->setBottom(ceilf(shaper.glyphBoundingBox().maxY()));
- glyphBounds->setLeft(std::max<int>(0, ceilf(-shaper.glyphBoundingBox().x())));
- glyphBounds->setRight(std::max<int>(0, ceilf(shaper.glyphBoundingBox().maxX() - shaper.totalWidth())));
+ glyphBounds->setTop(ceilf(-bounds.y()));
+ glyphBounds->setBottom(ceilf(bounds.maxY()));
+ glyphBounds->setLeft(std::max<int>(0, ceilf(-bounds.x())));
+ glyphBounds->setRight(std::max<int>(0, ceilf(bounds.maxX() - shaper.totalWidth())));
return shaper.totalWidth();
}
@@ -892,23 +893,23 @@ void Font::drawEmphasisMarks(GraphicsContext* context, const TextRunPaintInfo& r
float Font::floatWidthForSimpleText(const TextRun& run, HashSet<const SimpleFontData*>* fallbackFonts, IntRectOutsets* glyphBounds) const
{
- SimpleShaper::GlyphBounds bounds;
+ FloatRect bounds;
SimpleShaper shaper(this, run, fallbackFonts, glyphBounds ? &bounds : 0);
shaper.advance(run.length());
+ float runWidth = shaper.runWidthSoFar();
if (glyphBounds) {
- glyphBounds->setTop(ceilf(-bounds.minGlyphBoundingBoxY));
- glyphBounds->setBottom(ceilf(bounds.maxGlyphBoundingBoxY));
- glyphBounds->setLeft(ceilf(bounds.firstGlyphOverflow));
- glyphBounds->setRight(ceilf(bounds.lastGlyphOverflow));
+ glyphBounds->setTop(ceilf(-bounds.y()));
+ glyphBounds->setBottom(ceilf(bounds.maxY()));
+ glyphBounds->setLeft(std::max<int>(0, ceilf(-bounds.x())));
+ glyphBounds->setRight(std::max<int>(0, ceilf(bounds.maxX() - runWidth)));
}
-
- return shaper.runWidthSoFar();
+ return runWidth;
}
FloatRect Font::selectionRectForSimpleText(const TextRun& run, const FloatPoint& point, int h, int from, int to, bool accountForGlyphBounds) const
{
- SimpleShaper::GlyphBounds bounds;
+ FloatRect bounds;
SimpleShaper shaper(this, run, 0, accountForGlyphBounds ? &bounds : 0);
shaper.advance(from);
float fromX = shaper.runWidthSoFar();
@@ -925,9 +926,9 @@ FloatRect Font::selectionRectForSimpleText(const TextRun& run, const FloatPoint&
}
return FloatRect(point.x() + fromX,
- accountForGlyphBounds ? bounds.minGlyphBoundingBoxY : point.y(),
+ accountForGlyphBounds ? bounds.y(): point.y(),
toX - fromX,
- accountForGlyphBounds ? bounds.maxGlyphBoundingBoxY - bounds.minGlyphBoundingBoxY : h);
+ accountForGlyphBounds ? bounds.maxY()- bounds.y(): h);
}
int Font::offsetForPositionForSimpleText(const TextRun& run, float x, bool includePartialGlyphs) const

Powered by Google App Engine
This is Rietveld 408576698