void FatBits::drawLineSkeleton(SkCanvas* max, const SkPoint pts[]) { SkPaint paint; this->setupSkeletonPaint(&paint); SkPath path; path.moveTo(pts[0]); path.lineTo(pts[1]); switch (fStyle) { case kHair_Style: if (fUseGPU) { SkPaint p; p.setStyle(SkPaint::kStroke_Style); p.setStrokeWidth(SK_Scalar1 * fZoom); SkPath dst; p.getFillPath(path, &dst); path.addPath(dst); } break; case kStroke_Style: { SkPaint p; p.setStyle(SkPaint::kStroke_Style); p.setStrokeWidth(SK_Scalar1 * fZoom); SkPath dst; p.getFillPath(path, &dst); path = dst; if (fUseGPU) { path.moveTo(dst.getPoint(0)); path.lineTo(dst.getPoint(2)); } } break; } max->drawPath(path, paint); }
static HB_Error getOutlinePoint(HB_Font hbFont, HB_Glyph glyph, int flags, hb_uint32 index, HB_Fixed* xPos, HB_Fixed* yPos, hb_uint32* resultingNumPoints) { SkHarfBuzzFont* font = reinterpret_cast<SkHarfBuzzFont*>(hbFont->userData); SkPaint paint; font->setupPaint(&paint); paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding); if (flags & HB_ShaperFlag_UseDesignMetrics) { paint.setHinting(SkPaint::kNo_Hinting); } SkPath path; uint16_t glyph16 = SkToU16(glyph); paint.getTextPath(&glyph16, sizeof(glyph16), 0, 0, &path); int numPoints = path.countPoints(); if (index >= numPoints) { return HB_Err_Invalid_SubTable; } SkPoint pt = path.getPoint(index); *xPos = SkScalarToHarfbuzzFixed(pt.fX); *yPos = SkScalarToHarfbuzzFixed(pt.fY); *resultingNumPoints = numPoints; return HB_Err_Ok; }