15fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com 25fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com/* 35fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com * Copyright 2011 Google Inc. 45fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com * 55fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com * Use of this source code is governed by a BSD-style license that can be 65fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com * found in the LICENSE file. 75fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com */ 85fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com 95fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com 105fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com/* Tests text vertical text rendering with different fonts and centering. 115fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com */ 125fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com 135fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com#include "gm.h" 145fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com#include "SkCanvas.h" 155fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com#include "SkTypeface.h" 165fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com 175fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.comnamespace skiagm { 185fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com 195fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.comclass VertText2GM : public GM { 205fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.compublic: 215fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com VertText2GM() { 225fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com const int pointSize = 24; 235fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com textHeight = SkIntToScalar(pointSize); 24992c7b03ef7914a18bfd78e965b0b4c99a5f5672Cary Clark fProp = sk_tool_utils::create_portable_typeface("Helvetica", SkTypeface::kNormal); 25992c7b03ef7914a18bfd78e965b0b4c99a5f5672Cary Clark fMono = sk_tool_utils::create_portable_typeface("Courier New", SkTypeface::kNormal); 26563a3b410269a987b70204d0aa44a0de3a1f0f61reed@google.com } 27563a3b410269a987b70204d0aa44a0de3a1f0f61reed@google.com 28563a3b410269a987b70204d0aa44a0de3a1f0f61reed@google.com virtual ~VertText2GM() { 29563a3b410269a987b70204d0aa44a0de3a1f0f61reed@google.com SkSafeUnref(fProp); 30563a3b410269a987b70204d0aa44a0de3a1f0f61reed@google.com SkSafeUnref(fMono); 315fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com } 325fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com 335fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.comprotected: 34a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org virtual uint32_t onGetFlags() const SK_OVERRIDE { 35a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org return kSkipTiled_Flag; 36a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org } 37a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org 385fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com 395fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com SkString onShortName() { 405fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com return SkString("verttext2"); 415fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com } 425fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com 43f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina SkISize onISize() { return SkISize::Make(640, 480); } 445fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com 455fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com virtual void onDraw(SkCanvas* canvas) { 46ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 475fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com for (int i = 0; i < 3; ++i) { 485fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com SkPaint paint; 495fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com paint.setColor(SK_ColorRED); 505fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com paint.setAntiAlias(true); 515fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com y = textHeight; 525fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com canvas->drawLine(0, SkIntToScalar(10), 535fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com SkIntToScalar(110), SkIntToScalar(10), paint); 545fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com canvas->drawLine(0, SkIntToScalar(240), 555fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com SkIntToScalar(110), SkIntToScalar(240), paint); 565fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com canvas->drawLine(0, SkIntToScalar(470), 575fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com SkIntToScalar(110), SkIntToScalar(470), paint); 585fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com drawText(canvas, SkString("Proportional / Top Aligned"), 59563a3b410269a987b70204d0aa44a0de3a1f0f61reed@google.com fProp, SkPaint::kLeft_Align); 605fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com drawText(canvas, SkString("< Proportional / Centered >"), 61563a3b410269a987b70204d0aa44a0de3a1f0f61reed@google.com fProp, SkPaint::kCenter_Align); 625fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com drawText(canvas, SkString("Monospaced / Top Aligned"), 63563a3b410269a987b70204d0aa44a0de3a1f0f61reed@google.com fMono, SkPaint::kLeft_Align); 645fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com drawText(canvas, SkString("< Monospaced / Centered >"), 65563a3b410269a987b70204d0aa44a0de3a1f0f61reed@google.com fMono, SkPaint::kCenter_Align); 665fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com canvas->rotate(SkIntToScalar(-15)); 675fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com canvas->translate(textHeight * 4, SkIntToScalar(50)); 685fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com if (i > 0) { 695fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com canvas->translate(0, SkIntToScalar(50)); 705fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com } 715fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com } 725fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com } 735fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com 745fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com void drawText(SkCanvas* canvas, const SkString& string, 755fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com SkTypeface* family, SkPaint::Align alignment) { 765fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com SkPaint paint; 775fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com paint.setColor(SK_ColorBLACK); 785fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com paint.setAntiAlias(true); 795fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com paint.setVerticalText(true); 805fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com paint.setTextAlign(alignment); 815fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com paint.setTypeface(family); 825fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com paint.setTextSize(textHeight); 835fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com 84ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com canvas->drawText(string.c_str(), string.size(), y, 8575589257c6ac7fc55a66502b74b8bc09c0212featomhudson@google.com SkIntToScalar(alignment == SkPaint::kLeft_Align ? 10 : 240), 8675589257c6ac7fc55a66502b74b8bc09c0212featomhudson@google.com paint); 875fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com y += textHeight; 885fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com } 895fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com 905fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.comprivate: 915fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com typedef GM INHERITED; 925fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com SkScalar y, textHeight; 93563a3b410269a987b70204d0aa44a0de3a1f0f61reed@google.com SkTypeface* fProp; 94563a3b410269a987b70204d0aa44a0de3a1f0f61reed@google.com SkTypeface* fMono; 955fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com}; 965fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com 975fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com/////////////////////////////////////////////////////////////////////////////// 985fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com 995fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.comstatic GM* MyFactory(void*) { return new VertText2GM; } 1005fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.comstatic GMRegistry reg(MyFactory); 1015fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com 1025fbb4dc0a52f1e70f788fc4b4e6228f20a651b78caryclark@google.com} 103