Lines Matching defs:glyph

199     virtual void generateAdvance(SkGlyph* glyph) SK_OVERRIDE;
200 virtual void generateMetrics(SkGlyph* glyph) SK_OVERRIDE;
201 virtual void generateImage(const SkGlyph& glyph) SK_OVERRIDE;
202 virtual void generatePath(const SkGlyph& glyph, SkPath* path) SK_OVERRIDE;
205 virtual SkUnichar generateGlyphToChar(uint16_t glyph) SK_OVERRIDE;
223 void getBBoxForCurrentGlyph(SkGlyph* glyph, FT_BBox* bbox,
227 void updateGlyphIfLCD(SkGlyph* glyph);
229 // update FreeType2 glyph slot with glyph emboldened
230 void emboldenIfNeeded(FT_Face face, FT_GlyphSlot glyph);
421 advances[i] = face->glyph->advance.x;
463 FT_Outline_Get_CBox(&face->glyph->outline, bbox);
700 // using multiple font descriptions with a glyph ordering. Record
701 // the name of each glyph.
1092 SkUnichar SkScalerContext_FreeType::generateGlyphToChar(uint16_t glyph) {
1093 // iterate through each cmap entry, looking for matching glyph indices
1098 if (glyphIndex == glyph) {
1107 void SkScalerContext_FreeType::generateAdvance(SkGlyph* glyph) {
1116 glyph->zeroMetrics();
1123 error = FT_Get_Advance( fFace, glyph->getGlyphID(fBaseGlyphCount),
1127 glyph->fRsbDelta = 0;
1128 glyph->fLsbDelta = 0;
1129 glyph->fAdvanceX = SkFixedMul(fMatrix22.xx, advance);
1130 glyph->fAdvanceY = - SkFixedMul(fMatrix22.yx, advance);
1135 /* otherwise, we need to load/hint the glyph, which is slower */
1136 this->generateMetrics(glyph);
1140 void SkScalerContext_FreeType::getBBoxForCurrentGlyph(SkGlyph* glyph,
1144 FT_Outline_Get_CBox(&fFace->glyph->outline, bbox);
1147 int dx = SkFixedToFDot6(glyph->getSubXFixed());
1148 int dy = SkFixedToFDot6(glyph->getSubYFixed());
1166 // glyph image.
1169 vector.x = fFace->glyph->metrics.vertBearingX - fFace->glyph->metrics.horiBearingX;
1170 vector.y = -fFace->glyph->metrics.vertBearingY - fFace->glyph->metrics.horiBearingY;
1185 emboldenIfNeeded(fFace, fFace->glyph);
1186 FT_Outline_Get_CBox(&fFace->glyph->outline, bbox);
1190 void SkScalerContext_FreeType::updateGlyphIfLCD(SkGlyph* glyph) {
1193 glyph->fHeight += gLCDExtra;
1194 glyph->fTop -= gLCDExtra >> 1;
1196 glyph->fWidth += gLCDExtra;
1197 glyph->fLeft -= gLCDExtra >> 1;
1202 inline void scaleGlyphMetrics(SkGlyph& glyph, SkScalar scale) {
1203 glyph.fWidth *= scale;
1204 glyph.fHeight *= scale;
1205 glyph.fTop *= scale;
1206 glyph.fLeft *= scale;
1209 glyph.fAdvanceX = SkFixedMul(glyph.fAdvanceX, fixedScale);
1210 glyph.fAdvanceY = SkFixedMul(glyph.fAdvanceY, fixedScale);
1213 void SkScalerContext_FreeType::generateMetrics(SkGlyph* glyph) {
1216 glyph->fRsbDelta = 0;
1217 glyph->fLsbDelta = 0;
1225 err = FT_Load_Glyph( fFace, glyph->getGlyphID(fBaseGlyphCount), fLoadGlyphFlags );
1228 SkDEBUGF(("SkScalerContext_FreeType::generateMetrics(%x): FT_Load_Glyph(glyph:%d flags:%x) returned 0x%x\n",
1229 fFaceRec->fFontID, glyph->getGlyphID(fBaseGlyphCount), fLoadGlyphFlags, err));
1232 glyph->zeroMetrics();
1235 emboldenIfNeeded(fFace, fFace->glyph);
1237 switch ( fFace->glyph->format ) {
1239 if (0 == fFace->glyph->outline.n_contours) {
1240 glyph->fWidth = 0;
1241 glyph->fHeight = 0;
1242 glyph->fTop = 0;
1243 glyph->fLeft = 0;
1246 getBBoxForCurrentGlyph(glyph, &bbox, true);
1248 glyph->fWidth = SkToU16(SkFDot6Floor(bbox.xMax - bbox.xMin));
1249 glyph->fHeight = SkToU16(SkFDot6Floor(bbox.yMax - bbox.yMin));
1250 glyph->fTop = -SkToS16(SkFDot6Floor(bbox.yMax));
1251 glyph->fLeft = SkToS16(SkFDot6Floor(bbox.xMin));
1253 updateGlyphIfLCD(glyph);
1260 vector.x = fFace->glyph->metrics.vertBearingX - fFace->glyph->metrics.horiBearingX;
1261 vector.y = -fFace->glyph->metrics.vertBearingY - fFace->glyph->metrics.horiBearingY;
1263 fFace->glyph->bitmap_left += SkFDot6Floor(vector.x);
1264 fFace->glyph->bitmap_top += SkFDot6Floor(vector.y);
1267 if (fFace->glyph->bitmap.pixel_mode == FT_PIXEL_MODE_BGRA) {
1268 glyph->fMaskFormat = SkMask::kARGB32_Format;
1271 glyph->fWidth = SkToU16(fFace->glyph->bitmap.width);
1272 glyph->fHeight = SkToU16(fFace->glyph->bitmap.rows);
1273 glyph->fTop = -SkToS16(fFace->glyph->bitmap_top);
1274 glyph->fLeft = SkToS16(fFace->glyph->bitmap_left);
1278 SkDEBUGFAIL("unknown glyph format");
1284 glyph->fAdvanceX = -SkFixedMul(fMatrix22.xy, fFace->glyph->linearVertAdvance);
1285 glyph->fAdvanceY = SkFixedMul(fMatrix22.yy, fFace->glyph->linearVertAdvance);
1287 glyph->fAdvanceX = -SkFDot6ToFixed(fFace->glyph->advance.x);
1288 glyph->fAdvanceY = SkFDot6ToFixed(fFace->glyph->advance.y);
1292 glyph->fAdvanceX = SkFixedMul(fMatrix22.xx, fFace->glyph->linearHoriAdvance);
1293 glyph->fAdvanceY = -SkFixedMul(fMatrix22.yx, fFace->glyph->linearHoriAdvance);
1295 glyph->fAdvanceX = SkFDot6ToFixed(fFace->glyph->advance.x);
1296 glyph->fAdvanceY = -SkFDot6ToFixed(fFace->glyph->advance.y);
1299 glyph->fRsbDelta = SkToS8(fFace->glyph->rsb_delta);
1300 glyph->fLsbDelta = SkToS8(fFace->glyph->lsb_delta);
1305 if (fFace->glyph->format == FT_GLYPH_FORMAT_BITMAP && fScaleY && fFace->size->metrics.y_ppem) {
1307 scaleGlyphMetrics(*glyph, SkScalarDiv(SkFixedToScalar(fScaleY),
1313 SkDEBUGF(("Metrics(glyph:%d flags:0x%x) w:%d\n", glyph->getGlyphID(fBaseGlyphCount), fLoadGlyphFlags, glyph->fWidth));
1318 void SkScalerContext_FreeType::generateImage(const SkGlyph& glyph) {
1327 err = FT_Load_Glyph( fFace, glyph.getGlyphID(fBaseGlyphCount), fLoadGlyphFlags);
1329 SkDEBUGF(("SkScalerContext_FreeType::generateImage: FT_Load_Glyph(glyph:%d width:%d height:%d rb:%d flags:%d) returned 0x%x\n",
1330 glyph.getGlyphID(fBaseGlyphCount), glyph.fWidth, glyph.fHeight, glyph.rowBytes(), fLoadGlyphFlags, err));
1332 memset(glyph.fImage, 0, glyph.rowBytes() * glyph.fHeight);
1336 emboldenIfNeeded(fFace, fFace->glyph);
1337 generateGlyphImage(fFace, glyph);
1341 void SkScalerContext_FreeType::generatePath(const SkGlyph& glyph,
1345 SkASSERT(&glyph && path);
1356 FT_Error err = FT_Load_Glyph( fFace, glyph.getGlyphID(fBaseGlyphCount), flags);
1359 SkDEBUGF(("SkScalerContext_FreeType::generatePath: FT_Load_Glyph(glyph:%d flags:%d) returned 0x%x\n",
1360 glyph.getGlyphID(fBaseGlyphCount), flags, err));
1364 emboldenIfNeeded(fFace, fFace->glyph);
1372 vector.x = fFace->glyph->metrics.vertBearingX - fFace->glyph->metrics.horiBearingX;
1373 vector.y = -fFace->glyph->metrics.vertBearingY - fFace->glyph->metrics.horiBearingY;
1547 void SkScalerContext_FreeType::emboldenIfNeeded(FT_Face face, FT_GlyphSlot glyph)
1561 switch (glyph->format) {
1566 FT_Outline_Embolden(&glyph->outline, strength);
1569 FT_GlyphSlot_Own_Bitmap(glyph);
1570 FT_Bitmap_Embolden(glyph->library, &glyph->bitmap, kBitmapEmboldenStrength, 0);
1573 SkDEBUGFAIL("unknown glyph format");