aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2009-03-10 04:02:30 +0000
committerGravatar reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2009-03-10 04:02:30 +0000
commit590ef3fd3a39ff1aa08746e323da41cbd2928f49 (patch)
tree9a80ce6ba1cd98aec88fa48780a064020a3bcf6b
parent330578d67d466f97c47aecdbdda9d69aa2aa7569 (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.cpp25
-rwxr-xr-xsrc/ports/SkFontHost_mac.cpp35
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);