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 2336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkString onShortName() override { 240f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com return SkString("fontscaler"); 250f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com } 260f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 2736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkISize onISize() override { 28f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina return SkISize::Make(1450, 750); 290f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com } 300f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 31a682b93736fb853f9d758de9a871d785c2805583bungeman@google.com static void rotate_about(SkCanvas* canvas, 32a682b93736fb853f9d758de9a871d785c2805583bungeman@google.com SkScalar degrees, 33a682b93736fb853f9d758de9a871d785c2805583bungeman@google.com SkScalar px, SkScalar py) { 340f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com canvas->translate(px, py); 350f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com canvas->rotate(degrees); 360f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com canvas->translate(-px, -py); 370f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com } 380f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 3936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(SkCanvas* canvas) override { 400f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com SkPaint paint; 410f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 420f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com paint.setAntiAlias(true); 430f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com paint.setLCDRenderText(true); 440f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com //With freetype the default (normal hinting) can be really ugly. 450f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com //Most distros now set slight (vertical hinting only) in any event. 460f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com paint.setHinting(SkPaint::kSlight_Hinting); 47992c7b03ef7914a18bfd78e965b0b4c99a5f5672Cary Clark sk_tool_utils::set_portable_typeface(&paint, "Times Roman", SkTypeface::kNormal); 480f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 490f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com const char* text = "Hamburgefons ooo mmm"; 500f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com const size_t textLen = strlen(text); 510f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 520f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com for (int j = 0; j < 2; ++j) { 534121f9574a99ae69a86eed024768681631302800bsalomon@google.com // This used to do 6 iterations but it causes the N4 to crash in the MSAA4 config. 544121f9574a99ae69a86eed024768681631302800bsalomon@google.com for (int i = 0; i < 5; ++i) { 550f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com SkScalar x = SkIntToScalar(10); 560f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com SkScalar y = SkIntToScalar(20); 570f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 580f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com SkAutoCanvasRestore acr(canvas, true); 590f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com canvas->translate(SkIntToScalar(50 + i * 230), 600f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com SkIntToScalar(20)); 610f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com rotate_about(canvas, SkIntToScalar(i * 5), x, y * 10); 620f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 630f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com { 640f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com SkPaint p; 650f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com p.setAntiAlias(true); 660f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com SkRect r; 67a682b93736fb853f9d758de9a871d785c2805583bungeman@google.com r.set(x - SkIntToScalar(3), SkIntToScalar(15), 68a682b93736fb853f9d758de9a871d785c2805583bungeman@google.com x - SkIntToScalar(1), SkIntToScalar(280)); 690f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com canvas->drawRect(r, p); 700f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com } 710f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 720f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com for (int ps = 6; ps <= 22; ps++) { 730f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com paint.setTextSize(SkIntToScalar(ps)); 740f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com canvas->drawText(text, textLen, x, y, paint); 750f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com y += paint.getFontMetrics(NULL); 760f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com } 770f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com } 78a682b93736fb853f9d758de9a871d785c2805583bungeman@google.com canvas->translate(0, SkIntToScalar(360)); 790f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com paint.setSubpixelText(true); 800f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com } 810f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com } 820f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 830f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.comprivate: 840f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com typedef GM INHERITED; 850f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com}; 860f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com 870f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com////////////////////////////////////////////////////////////////////////////// 880682ca6971326a293285c1c90c9ef2fbbc54a4f3borenet@google.com 890f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.comstatic GM* MyFactory(void*) { return new FontScalerGM; } 900f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.comstatic GMRegistry reg(MyFactory); 910682ca6971326a293285c1c90c9ef2fbbc54a4f3borenet@google.com 920f0c2888e09f7a2a153efbc8e41fe1e90a9f2112bungeman@google.com} 93