diff options
author | reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2009-03-10 04:02:30 +0000 |
---|---|---|
committer | reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2009-03-10 04:02:30 +0000 |
commit | 590ef3fd3a39ff1aa08746e323da41cbd2928f49 (patch) | |
tree | 9a80ce6ba1cd98aec88fa48780a064020a3bcf6b | |
parent | 330578d67d466f97c47aecdbdda9d69aa2aa7569 (diff) |
remember to specify the bloody font tag in the constructor!
git-svn-id: http://skia.googlecode.com/svn/trunk@118 2bbb7eff-a529-9590-31e7-b0007b416f81
-rw-r--r-- | samplecode/SampleFontScalerTest.cpp | 25 | ||||
-rwxr-xr-x | src/ports/SkFontHost_mac.cpp | 35 |
2 files changed, 51 insertions, 9 deletions
diff --git a/samplecode/SampleFontScalerTest.cpp b/samplecode/SampleFontScalerTest.cpp index 380d34671a..356ab39c72 100644 --- a/samplecode/SampleFontScalerTest.cpp +++ b/samplecode/SampleFontScalerTest.cpp @@ -29,6 +29,14 @@ static const struct { static const int gFaceCount = SK_ARRAY_COUNT(gFaces); +static const char* gStrings[] = { + "HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH", + "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii", + "......................................", + "11111111111111111111111111111111111111", + "00000000000000000000000000000000000000" +}; + class FontScalerTestView : public SkView { SkTypeface* fFaces[gFaceCount]; @@ -67,16 +75,29 @@ protected: paint.setAntiAlias(true); paint.setTypeface(SkTypeface::CreateFromName("Times Roman", SkTypeface::kNormal))->safeUnref(); - const char* text = "HHHaaammmbbbuuurrrgggeeefffooonnnsss"; - const size_t textLen = strlen(text); +// const char* text = "abcdefghijklmnopqrstuvwxyz"; + const char* text = "HnHnHnHnHnHnHnHnH"; + size_t textLen = strlen(text); SkScalar x = SkIntToScalar(10); SkScalar y = SkIntToScalar(20); + { + SkPaint p; + p.setColor(SK_ColorRED); + SkRect r; + r.set(0, 0, x, y*20); + canvas->drawRect(r, p); + } + + int index = 0; for (int ps = 9; ps <= 24; ps++) { + // text = gStrings[index % SK_ARRAY_COUNT(gStrings)]; + textLen = strlen(text); paint.setTextSize(SkIntToScalar(ps)); canvas->drawText(text, textLen, x, y, paint); y += paint.getFontMetrics(NULL); + index += 1; } } diff --git a/src/ports/SkFontHost_mac.cpp b/src/ports/SkFontHost_mac.cpp index 56f52f7b71..6b8f9a3b2e 100755 --- a/src/ports/SkFontHost_mac.cpp +++ b/src/ports/SkFontHost_mac.cpp @@ -124,11 +124,32 @@ SkScalerContext_Mac::SkScalerContext_Mac(const SkDescriptor* desc) SkScalarToFloat(m[SkMatrix::kMTransX]), SkScalarToFloat(m[SkMatrix::kMTransY])); - - Fixed fixedSize = SK_Fixed1; //SkScalarToFixed(fRec.fTextSize); - static const ATSUAttributeTag tags[] = { kATSUSizeTag, kATSUFontMatrixTag }; - static const ByteCount sizes[] = { sizeof(Fixed), sizeof(fTransform) }; - const ATSUAttributeValuePtr values[] = { &fixedSize, &fTransform }; + ATSStyleRenderingOptions renderOpts = kATSStyleApplyAntiAliasing; + switch (fRec.fHints) { + case kNo_Hints: + renderOpts |= kATSStyleNoHinting; + break; + case kSubpixel_Hints: + // hmmm, need to support subpixel... from path? + renderOpts |= kATSStyleNoHinting; + break; + case kNormal_Hints: + renderOpts |= kATSStyleApplyHints; + break; + } + + ATSUFontID fontID = FMGetFontFromATSFontRef(fRec.fFontID); + // we put everything in the matrix, so our pt size is just 1.0 + Fixed fixedSize = SK_Fixed1; + static const ATSUAttributeTag tags[] = { + kATSUFontTag, kATSUSizeTag, kATSUFontMatrixTag, kATSUStyleRenderingOptionsTag + }; + static const ByteCount sizes[] = { + sizeof(fontID), sizeof(fixedSize), sizeof(fTransform), sizeof(renderOpts) + }; + const ATSUAttributeValuePtr values[] = { + &fontID, &fixedSize, &fTransform, &renderOpts + }; err = ::ATSUSetAttributes(fStyle, SK_ARRAY_COUNT(tags), tags, sizes, values); SkASSERT(0 == err); @@ -199,7 +220,7 @@ void SkScalerContext_Mac::generateMetrics(SkGlyph* glyph) { set_glyph_metrics_on_error(glyph); return; } - + if (kNormal_Hints == fRec.fHints) { glyph->fAdvanceX = SkFloatToFixed(screenMetrics.deviceAdvance.x); glyph->fAdvanceY = -SkFloatToFixed(screenMetrics.deviceAdvance.y); @@ -234,7 +255,7 @@ void SkScalerContext_Mac::generateImage(const SkGlyph& glyph) ::CGContextSetGrayFillColor(contextRef, 1.0, 1.0); ::CGContextSetTextDrawingMode(contextRef, kCGTextFill); - CGGlyph glyphID = glyph.getGlyphID(); + CGGlyph glyphID = glyph.getGlyphID(fBaseGlyphCount); CGFontRef fontRef = CGFontCreateWithPlatformFont(&fRec.fFontID); CGContextSetFont(contextRef, fontRef); CGContextSetFontSize(contextRef, 1); |