+ {
+ char facename[100];
+ if (GetTextFace(dc, sizeof(facename), facename)) {
+ mm_log((1, " face: %s\n", facename));
+ }
+ }
+
+ for (i = 0; i < length; ++i) {
+ unsigned char c = text[i];
+ unsigned char cp = c > '~' ? '.' : c < ' ' ? '.' : c;
+
+ memset(&mat, 0, sizeof(mat));
+ mat.eM11.value = 1;
+ mat.eM22.value = 1;
+ if (GetGlyphOutline(dc, c, GGO_METRICS, &gm, 0, NULL, &mat) != GDI_ERROR) {
+ mm_log((2, " glyph '%c' (%02x): bbx (%u,%u) org (%d,%d) inc(%d,%d)\n",
+ cp, c, gm.gmBlackBoxX, gm.gmBlackBoxY, gm.gmptGlyphOrigin.x,
+ gm.gmptGlyphOrigin.y, gm.gmCellIncX, gm.gmCellIncY));
+
+ ascent = gm.gmptGlyphOrigin.y;
+ descent = ascent - gm.gmBlackBoxY;
+ if (ascent > max_ascent) max_ascent = ascent;
+ if (descent < min_descent) min_descent = descent;
+ }
+ else {
+ mm_log((1, " glyph '%c' (%02x): error %d\n", cp, c, GetLastError()));
+ }
+ }
+