| Index: gm/fontmgr.cpp
|
| ===================================================================
|
| --- gm/fontmgr.cpp (revision 8442)
|
| +++ gm/fontmgr.cpp (working copy)
|
| @@ -28,7 +28,7 @@
|
|
|
| protected:
|
| virtual SkString onShortName() {
|
| - return SkString("fontmgr");
|
| + return SkString("fontmgr_iter");
|
| }
|
|
|
| virtual SkISize onISize() {
|
| @@ -53,6 +53,7 @@
|
| (void)drawString(canvas, fname, 20, y, paint);
|
|
|
| SkScalar x = 220;
|
| +
|
| SkAutoTUnref<SkFontStyleSet> set(fm->createStyleSet(i));
|
| for (int j = 0; j < set->count(); ++j) {
|
| SkString sname;
|
| @@ -76,6 +77,102 @@
|
| typedef GM INHERITED;
|
| };
|
|
|
| +class FontMgrMatchGM : public skiagm::GM {
|
| + SkAutoTUnref<SkFontMgr> fFM;
|
| +
|
| +public:
|
| + FontMgrMatchGM() : fFM(SkFontMgr::RefDefault()) {
|
| + SkGraphics::SetFontCacheLimit(16 * 1024 * 1024);
|
| + }
|
| +
|
| +protected:
|
| + virtual SkString onShortName() {
|
| + return SkString("fontmgr_match");
|
| + }
|
| +
|
| + virtual SkISize onISize() {
|
| + return SkISize::Make(640, 1024);
|
| + }
|
| +
|
| + void iterateFamily(SkCanvas* canvas, const SkPaint& paint,
|
| + SkFontStyleSet* fset) {
|
| + SkPaint p(paint);
|
| + SkScalar y = 0;
|
| +
|
| + for (int j = 0; j < fset->count(); ++j) {
|
| + SkString sname;
|
| + SkFontStyle fs;
|
| + fset->getStyle(j, &fs, &sname);
|
| +
|
| + sname.appendf(" [%d %d]", fs.weight(), fs.width());
|
| +
|
| + SkSafeUnref(p.setTypeface(fset->createTypeface(j)));
|
| + (void)drawString(canvas, sname, 0, y, p);
|
| + y += 24;
|
| + }
|
| + }
|
| +
|
| + void exploreFamily(SkCanvas* canvas, const SkPaint& paint,
|
| + SkFontStyleSet* fset) {
|
| + SkPaint p(paint);
|
| + SkScalar y = 0;
|
| +
|
| + for (int weight = 100; weight <= 900; weight += 200) {
|
| + for (int width = 1; width <= 9; width += 2) {
|
| + SkFontStyle fs(weight, width, SkFontStyle::kUpright_Slant);
|
| + SkTypeface* face = fset->matchStyle(fs);
|
| + if (face) {
|
| + SkString str;
|
| + str.printf("request [%d %d]", fs.weight(), fs.width());
|
| + p.setTypeface(face)->unref();
|
| + (void)drawString(canvas, str, 0, y, p);
|
| + y += 24;
|
| + }
|
| + }
|
| + }
|
| + }
|
| +
|
| + virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
|
| + SkPaint paint;
|
| + paint.setAntiAlias(true);
|
| + paint.setLCDRenderText(true);
|
| + paint.setSubpixelText(true);
|
| + paint.setTextSize(17);
|
| +
|
| + static const char* gNames[] = {
|
| + "Helvetica Neue", "Arial"
|
| + };
|
| +
|
| + SkFontStyleSet* fset = NULL;
|
| + for (size_t i = 0; i < SK_ARRAY_COUNT(gNames); ++i) {
|
| + fset = fFM->matchFamily(gNames[i]);
|
| + if (fset && fset->count() > 0) {
|
| + break;
|
| + }
|
| + }
|
| +
|
| + if (NULL == fset) {
|
| + return;
|
| + }
|
| + SkAutoUnref aur(fset);
|
| +
|
| + canvas->translate(20, 40);
|
| + this->exploreFamily(canvas, paint, fset);
|
| + canvas->translate(150, 0);
|
| + this->iterateFamily(canvas, paint, fset);
|
| + }
|
| +
|
| + virtual uint32_t onGetFlags() const SK_OVERRIDE {
|
| + // fontdescriptors (and therefore serialization) don't yet understand
|
| + // these new styles, so skip tests that exercise that for now.
|
| + return kSkipPicture_Flag | kSkipPipe_Flag;
|
| + }
|
| +
|
| +private:
|
| + typedef GM INHERITED;
|
| +};
|
| +
|
| //////////////////////////////////////////////////////////////////////////////
|
|
|
| DEF_GM( return SkNEW(FontMgrGM); )
|
| +DEF_GM( return SkNEW(FontMgrMatchGM); )
|
|
|