Index: gm/coloremoji.cpp |
diff --git a/gm/coloremoji.cpp b/gm/coloremoji.cpp |
index b29040ac29d816ef3a9774c7b2a1bfab739937bf..f4de3e5dce4162b7b2ec7ecee4ba8ab9be799d0c 100644 |
--- a/gm/coloremoji.cpp |
+++ b/gm/coloremoji.cpp |
@@ -77,16 +77,19 @@ protected: |
const char* text = emojiFont.text; |
// draw text at different point sizes |
- const int textSize[] = { 10, 30, 50, }; |
- const int textYOffset[] = { 10, 40, 100, }; |
- SkASSERT(sizeof(textSize) == sizeof(textYOffset)); |
- size_t y_offset = 0; |
- for (size_t y = 0; y < sizeof(textSize) / sizeof(int); y++) { |
- paint.setTextSize(SkIntToScalar(textSize[y])); |
- canvas->drawText(text, strlen(text), 10, SkIntToScalar(textYOffset[y]), paint); |
- y_offset += textYOffset[y]; |
+ static constexpr SkScalar textSizes[] = { 10, 30, 50, }; |
+ SkPaint::FontMetrics metrics; |
+ SkScalar y = 0; |
+ for (const SkScalar& textSize : textSizes) { |
+ paint.setTextSize(textSize); |
+ paint.getFontMetrics(&metrics); |
+ y += -metrics.fAscent; |
+ canvas->drawText(text, strlen(text), 10, y, paint); |
+ y += metrics.fDescent + metrics.fLeading; |
} |
+ y += 20; |
+ SkScalar savedY = y; |
// draw with shaders and image filters |
for (int makeLinear = 0; makeLinear < 2; makeLinear++) { |
for (int makeBlur = 0; makeBlur < 2; makeBlur++) { |
@@ -107,15 +110,15 @@ protected: |
shaderPaint.setImageFilter(make_grayscale(nullptr)); |
} |
shaderPaint.setTextSize(30); |
- canvas->drawText(text, strlen(text), 380, SkIntToScalar(y_offset), |
- shaderPaint); |
- y_offset += 32; |
+ shaderPaint.getFontMetrics(&metrics); |
+ y += -metrics.fAscent; |
+ canvas->drawText(text, strlen(text), 380, y, shaderPaint); |
+ y += metrics.fDescent + metrics.fLeading; |
} |
} |
} |
- |
// setup work needed to draw text with different clips |
- canvas->translate(10, 160); |
+ canvas->translate(10, savedY); |
paint.setTextSize(40); |
// compute the bounds of the text |
@@ -134,22 +137,23 @@ protected: |
SkRect interiorClip = bounds; |
interiorClip.inset(boundsQuarterWidth, boundsQuarterHeight); |
- const SkRect clipRects[] = { bounds, upperLeftClip, lowerRightClip, interiorClip }; |
+ static const SkRect clipRects[] = { bounds, upperLeftClip, lowerRightClip, interiorClip }; |
SkPaint clipHairline; |
clipHairline.setColor(SK_ColorWHITE); |
clipHairline.setStyle(SkPaint::kStroke_Style); |
- for (size_t x = 0; x < sizeof(clipRects) / sizeof(SkRect); ++x) { |
+ for (const SkRect& clipRect : clipRects) { |
+ canvas->translate(0, bounds.height()); |
canvas->save(); |
- canvas->drawRect(clipRects[x], clipHairline); |
+ canvas->drawRect(clipRect, clipHairline); |
paint.setAlpha(0x20); |
canvas->drawText(text, strlen(text), 0, 0, paint); |
- canvas->clipRect(clipRects[x]); |
+ canvas->clipRect(clipRect); |
paint.setAlpha(0xFF); |
canvas->drawText(text, strlen(text), 0, 0, paint); |
canvas->restore(); |
- canvas->translate(0, bounds.height() + SkIntToScalar(25)); |
+ canvas->translate(0, SkIntToScalar(25)); |
} |
} |