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