Options
These globals are now defined:
double duration; // The requested duration of the animation. double frame; // A value in [0, 1] of where we are in the animation.
This global is now defined:
GrBackendRenderTarget backEndRenderTarget;
GrBackendTexture backEndTextureRenderTarget;
Optional source image
These globals are now defined:
SkBitmap source; sk_sp<SkImage> image; GrBackendTexture backEndTexture; // GPU Only.
Note:
Adding comments with SK_FOLD_START and SK_FOLD_END creates foldable code
blocks.
These blocks will be folded by default and are useful for highlighting specific lines of code.
You can also use the keyboard shortcuts Ctrl+S and Ctrl+E in the code editor to set them.
These blocks will be folded by default and are useful for highlighting specific lines of code.
You can also use the keyboard shortcuts Ctrl+S and Ctrl+E in the code editor to set them.
xxxxxxxxxx
41
void draw(SkCanvas* canvas) {
SkPaint paint;
paint.setAntiAlias(true);
paint.setTextSize(120);
SkPaint::FontMetrics fm;
SkScalar lineHeight = paint.getFontMetrics(&fm);
SkPoint pt = { 70, 180 };
canvas->drawString("M", pt.fX, pt.fY, paint);
canvas->drawLine(pt.fX, pt.fY, pt.fX, pt.fY + fm.fTop, paint);
SkScalar ascent = pt.fY + fm.fAscent;
canvas->drawLine(pt.fX - 25, ascent, pt.fX - 25, ascent + lineHeight, paint);
canvas->drawLine(pt.fX - 50, pt.fY, pt.fX - 50, pt.fY + fm.fDescent, paint);
canvas->drawLine(pt.fX + 100, pt.fY, pt.fX + 100, pt.fY + fm.fAscent, paint);
canvas->drawLine(pt.fX + 125, pt.fY, pt.fX + 125, pt.fY - fm.fXHeight, paint);
canvas->drawLine(pt.fX + 150, pt.fY, pt.fX + 150, pt.fY - fm.fCapHeight, paint);
canvas->drawLine(pt.fX + 5, pt.fY, pt.fX + 5, pt.fY + fm.fBottom, paint);
SkScalar xmin = pt.fX + fm.fXMin;
canvas->drawLine(xmin, pt.fY + 60, xmin + fm.fMaxCharWidth, pt.fY + 60, paint);
canvas->drawLine(xmin, pt.fY - 145, pt.fX, pt.fY - 145, paint);
canvas->drawLine(pt.fX + fm.fXMax, pt.fY - 160, pt.fX, pt.fY - 160, paint);
SkScalar upos = pt.fY + fm.fUnderlinePosition;
canvas->drawLine(pt.fX + 25, upos, pt.fX + 130, upos, paint);
SkScalar urad = fm.fUnderlineThickness / 2;
canvas->drawLine(pt.fX + 130, upos - urad, pt.fX + 160, upos - urad, paint);
canvas->drawLine(pt.fX + 130, upos + urad, pt.fX + 160, upos + urad, paint);
paint.setTextSize(12);
canvas->drawString("x-min", pt.fX - 50, pt.fY - 148, paint);
canvas->drawString("x-max", pt.fX + 140, pt.fY - 150, paint);
canvas->drawString("max char width", pt.fX + 120, pt.fY + 57, paint);
canvas->drawString("underline position", pt.fX + 30, pt.fY + 22, paint);
canvas->drawString("underline thickness", pt.fX + 162, pt.fY + 13, paint);
canvas->rotate(-90);
canvas->drawString("descent", -pt.fY - 30, pt.fX - 54, paint);
canvas->drawString("line height", -pt.fY, pt.fX - 29, paint);
canvas->drawString("top", -pt.fY + 30, pt.fX - 4, paint);
canvas->drawString("ascent", -pt.fY, pt.fX + 110, paint);
canvas->drawString("x-height", -pt.fY, pt.fX + 135, paint);
canvas->drawString("cap-height", -pt.fY, pt.fX + 160, paint);
canvas->drawString("bottom", -pt.fY - 50, pt.fX + 15, paint);
}