Check for too small rect for path
This check was dropped in skia cl/145000. Add it back in to bring it back into parity with the SkRemoteGlyphCache. BUG=chromium:873020 Change-Id: I04c12e54145e0ebd1bdec2f01f5f40f26648f78a Reviewed-on: https://skia-review.googlesource.com/148384 Reviewed-by: Mike Klein <mtklein@google.com> Commit-Queue: Herb Derby <herb@google.com> Auto-Submit: Herb Derby <herb@google.com>
This commit is contained in:
parent
9335c28e40
commit
20a6332c94
@ -828,30 +828,6 @@ static bool glyph_too_big_for_atlas(const SkGlyph& glyph) {
|
||||
return glyph.fWidth >= 256 || glyph.fHeight >= 256;
|
||||
}
|
||||
|
||||
template <typename PerGlyphT, typename PerPathT>
|
||||
void SkGlyphRunListDrawer::drawGlyphRunAsBMPWithPathFallback(
|
||||
SkGlyphCache* cache, const SkGlyphRun& glyphRun,
|
||||
SkPoint origin, const SkMatrix& deviceMatrix,
|
||||
PerGlyphT perGlyph, PerPathT perPath) {
|
||||
auto eachGlyph =
|
||||
[cache, perGlyph{std::move(perGlyph)}, perPath{std::move(perPath)}]
|
||||
(const SkGlyph& glyph, SkPoint pt, SkPoint mappedPt) {
|
||||
if (glyph_too_big_for_atlas(glyph)) {
|
||||
const SkPath* glyphPath = cache->findPath(glyph);
|
||||
if (glyphPath != nullptr) {
|
||||
perPath(glyphPath, glyph, mappedPt);
|
||||
}
|
||||
} else {
|
||||
const void* glyphImage = cache->findImage(glyph);
|
||||
if (glyphImage != nullptr) {
|
||||
perGlyph(glyph, mappedPt);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this->forEachMappedDrawableGlyph(glyphRun, origin, deviceMatrix, cache, eachGlyph);
|
||||
}
|
||||
|
||||
static SkRect rect_to_draw(
|
||||
const SkGlyph& glyph, SkPoint origin, SkScalar textScale, GrGlyph::MaskStyle maskStyle) {
|
||||
|
||||
@ -875,6 +851,38 @@ static SkRect rect_to_draw(
|
||||
return SkRect::MakeXYWH(origin.x() + dx, origin.y() + dy, width, height);
|
||||
}
|
||||
|
||||
template <typename PerGlyphT, typename PerPathT>
|
||||
void SkGlyphRunListDrawer::drawGlyphRunAsBMPWithPathFallback(
|
||||
SkGlyphCache* cache, const SkGlyphRun& glyphRun,
|
||||
SkPoint origin, const SkMatrix& deviceMatrix,
|
||||
PerGlyphT perGlyph, PerPathT perPath) {
|
||||
auto eachGlyph =
|
||||
[cache, perGlyph{std::move(perGlyph)}, perPath{std::move(perPath)}]
|
||||
(const SkGlyph& glyph, SkPoint pt, SkPoint mappedPt) {
|
||||
if (glyph_too_big_for_atlas(glyph)) {
|
||||
SkScalar sx = SkScalarFloorToScalar(mappedPt.fX),
|
||||
sy = SkScalarFloorToScalar(mappedPt.fY);
|
||||
|
||||
SkRect glyphRect =
|
||||
rect_to_draw(glyph, {sx, sy}, SK_Scalar1, GrGlyph::kCoverage_MaskStyle);
|
||||
|
||||
if (!glyphRect.isEmpty()) {
|
||||
const SkPath* glyphPath = cache->findPath(glyph);
|
||||
if (glyphPath != nullptr) {
|
||||
perPath(glyphPath, glyph, mappedPt);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
const void* glyphImage = cache->findImage(glyph);
|
||||
if (glyphImage != nullptr) {
|
||||
perGlyph(glyph, mappedPt);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this->forEachMappedDrawableGlyph(glyphRun, origin, deviceMatrix, cache, eachGlyph);
|
||||
}
|
||||
|
||||
template <typename PerSDFT, typename PerPathT, typename PerFallbackT>
|
||||
void SkGlyphRunListDrawer::drawGlyphRunAsSDFWithFallback(
|
||||
SkGlyphCache* cache, const SkGlyphRun& glyphRun,
|
||||
|
Loading…
Reference in New Issue
Block a user