10f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com/* 20f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com * Copyright 2011 Google Inc. 30f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com * 40f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com * Use of this source code is governed by a BSD-style license that can be 50f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com * found in the LICENSE file. 60f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com */ 70f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com#include "gm.h" 80f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com#include "SkTypeface.h" 90f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 100f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.comnamespace skiagm { 110f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 120f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.comclass FontScalerGM : public GM { 130f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.compublic: 140f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com FontScalerGM() { 150f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com this->setBGColor(0xFFFFFFFF); 160f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com } 170f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 180f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com virtual ~FontScalerGM() { 190f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com } 200f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 210f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.comprotected: 22a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org virtual uint32_t onGetFlags() const SK_OVERRIDE { 23a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org return kSkipTiled_Flag; 24a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org } 25a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org 260f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com virtual SkString onShortName() { 270f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com return SkString("fontscaler"); 280f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com } 290f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 300f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com virtual SkISize onISize() { 31f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina return SkISize::Make(1450, 750); 320f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com } 330f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 34a682b93736fb853f9d758de9a871d785c2805583bungeman@google.com static void rotate_about(SkCanvas* canvas, 35a682b93736fb853f9d758de9a871d785c2805583bungeman@google.com SkScalar degrees, 36a682b93736fb853f9d758de9a871d785c2805583bungeman@google.com SkScalar px, SkScalar py) { 370f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com canvas->translate(px, py); 380f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com canvas->rotate(degrees); 390f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com canvas->translate(-px, -py); 400f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com } 410f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 420f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com virtual void onDraw(SkCanvas* canvas) { 430f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com SkPaint paint; 440f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 450f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com paint.setAntiAlias(true); 460f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com paint.setLCDRenderText(true); 470f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com //With freetype the default (normal hinting) can be really ugly. 480f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com //Most distros now set slight (vertical hinting only) in any event. 490f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com paint.setHinting(SkPaint::kSlight_Hinting); 500f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com SkSafeUnref(paint.setTypeface(SkTypeface::CreateFromName("Times Roman", SkTypeface::kNormal))); 510f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 520f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com const char* text = "Hamburgefons ooo mmm"; 530f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com const size_t textLen = strlen(text); 540f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 550f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com for (int j = 0; j < 2; ++j) { 564121f9574a99ae69a86eed024768681631302800bsalomon@google.com // This used to do 6 iterations but it causes the N4 to crash in the MSAA4 config. 574121f9574a99ae69a86eed024768681631302800bsalomon@google.com for (int i = 0; i < 5; ++i) { 580f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com SkScalar x = SkIntToScalar(10); 590f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com SkScalar y = SkIntToScalar(20); 600f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 610f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com SkAutoCanvasRestore acr(canvas, true); 620f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com canvas->translate(SkIntToScalar(50 + i * 230), 630f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com SkIntToScalar(20)); 640f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com rotate_about(canvas, SkIntToScalar(i * 5), x, y * 10); 650f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 660f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com { 670f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com SkPaint p; 680f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com p.setAntiAlias(true); 690f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com SkRect r; 70a682b93736fb853f9d758de9a871d785c2805583bungeman@google.com r.set(x - SkIntToScalar(3), SkIntToScalar(15), 71a682b93736fb853f9d758de9a871d785c2805583bungeman@google.com x - SkIntToScalar(1), SkIntToScalar(280)); 720f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com canvas->drawRect(r, p); 730f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com } 740f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 750f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com int index = 0; 760f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com for (int ps = 6; ps <= 22; ps++) { 770f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com paint.setTextSize(SkIntToScalar(ps)); 780f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com canvas->drawText(text, textLen, x, y, paint); 790f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com y += paint.getFontMetrics(NULL); 800f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com index += 1; 810f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com } 820f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com } 83a682b93736fb853f9d758de9a871d785c2805583bungeman@google.com canvas->translate(0, SkIntToScalar(360)); 840f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com paint.setSubpixelText(true); 850f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com } 860f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com } 870f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 880f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.comprivate: 890f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com typedef GM INHERITED; 900f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com}; 910f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 920f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com////////////////////////////////////////////////////////////////////////////// 930682ca6971326a293285c1c90c9ef2fbbc54a4f3borenet@google.com 940f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.comstatic GM* MyFactory(void*) { return new FontScalerGM; } 950f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.comstatic GMRegistry reg(MyFactory); 960682ca6971326a293285c1c90c9ef2fbbc54a4f3borenet@google.com 970f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com} 98