163d73749fbe36491403ea521005fd298dc70a94creed@google.com/*
263d73749fbe36491403ea521005fd298dc70a94creed@google.com * Copyright 2011 Google Inc.
363d73749fbe36491403ea521005fd298dc70a94creed@google.com *
463d73749fbe36491403ea521005fd298dc70a94creed@google.com * Use of this source code is governed by a BSD-style license that can be
563d73749fbe36491403ea521005fd298dc70a94creed@google.com * found in the LICENSE file.
663d73749fbe36491403ea521005fd298dc70a94creed@google.com */
763d73749fbe36491403ea521005fd298dc70a94creed@google.com
863d73749fbe36491403ea521005fd298dc70a94creed@google.com#include "gm.h"
963d73749fbe36491403ea521005fd298dc70a94creed@google.com#include "SkCanvas.h"
1063d73749fbe36491403ea521005fd298dc70a94creed@google.com#include "SkPath.h"
1163d73749fbe36491403ea521005fd298dc70a94creed@google.com#include "SkTypeface.h"
1263d73749fbe36491403ea521005fd298dc70a94creed@google.com
1363d73749fbe36491403ea521005fd298dc70a94creed@google.comnamespace skiagm {
1463d73749fbe36491403ea521005fd298dc70a94creed@google.com
1563d73749fbe36491403ea521005fd298dc70a94creed@google.comclass StrokeFillGM : public GM {
1663d73749fbe36491403ea521005fd298dc70a94creed@google.compublic:
1763d73749fbe36491403ea521005fd298dc70a94creed@google.com    StrokeFillGM() {
1863d73749fbe36491403ea521005fd298dc70a94creed@google.com
1963d73749fbe36491403ea521005fd298dc70a94creed@google.com    }
2063d73749fbe36491403ea521005fd298dc70a94creed@google.com
2163d73749fbe36491403ea521005fd298dc70a94creed@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
2663d73749fbe36491403ea521005fd298dc70a94creed@google.com    virtual SkString onShortName() {
2763d73749fbe36491403ea521005fd298dc70a94creed@google.com        return SkString("stroke-fill");
2863d73749fbe36491403ea521005fd298dc70a94creed@google.com    }
2963d73749fbe36491403ea521005fd298dc70a94creed@google.com
3063d73749fbe36491403ea521005fd298dc70a94creed@google.com    virtual SkISize onISize() {
31f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina        return SkISize::Make(640, 480);
3263d73749fbe36491403ea521005fd298dc70a94creed@google.com    }
3363d73749fbe36491403ea521005fd298dc70a94creed@google.com
34f8aa18c08d97cdc98a85a0422d3415822a73949cbungeman@google.com    static void show_bold(SkCanvas* canvas, const void* text, int len,
35f8aa18c08d97cdc98a85a0422d3415822a73949cbungeman@google.com                          SkScalar x, SkScalar y, const SkPaint& paint) {
36188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com        SkPaint p(paint);
37188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com        canvas->drawText(text, len, x, y, p);
38188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com        p.setFakeBoldText(true);
39188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com        canvas->drawText(text, len, x, y + SkIntToScalar(120), p);
40188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com    }
41188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com
4263d73749fbe36491403ea521005fd298dc70a94creed@google.com    virtual void onDraw(SkCanvas* canvas) {
43188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com        SkScalar x = SkIntToScalar(100);
44188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com        SkScalar y = SkIntToScalar(88);
45188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com
46d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com        SkPaint paint;
47d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com        paint.setAntiAlias(true);
48d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com        paint.setTextSize(SkIntToScalar(100));
49b435bd7d497c6743ae495e11b6828eae30521366reed@google.com        paint.setStrokeWidth(SkIntToScalar(5));
50ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
51992c7b03ef7914a18bfd78e965b0b4c99a5f5672Cary Clark        sk_tool_utils::set_portable_typeface(&paint, "Papyrus");
52f8aa18c08d97cdc98a85a0422d3415822a73949cbungeman@google.com        show_bold(canvas, "Hello", 5, x, y, paint);
53188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com
54992c7b03ef7914a18bfd78e965b0b4c99a5f5672Cary Clark        sk_tool_utils::set_portable_typeface(&paint, "Hiragino Maru Gothic Pro");
55f8aa18c08d97cdc98a85a0422d3415822a73949cbungeman@google.com        const unsigned char hyphen[] = { 0xE3, 0x83, 0xBC };
56f8aa18c08d97cdc98a85a0422d3415822a73949cbungeman@google.com        show_bold(canvas, hyphen, SK_ARRAY_COUNT(hyphen), x + SkIntToScalar(300), y, paint);
57188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com
58188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com        paint.setStyle(SkPaint::kStrokeAndFill_Style);
59188bfcf7666f4d264329063fd9bf5c44e7734fd8reed@google.com
60d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com        SkPath path;
61d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com        path.setFillType(SkPath::kWinding_FillType);
62b435bd7d497c6743ae495e11b6828eae30521366reed@google.com        path.addCircle(x, y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCW_Direction);
63b435bd7d497c6743ae495e11b6828eae30521366reed@google.com        path.addCircle(x, y + SkIntToScalar(200), SkIntToScalar(40), SkPath::kCCW_Direction);
64d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com        canvas->drawPath(path, paint);
65ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
66d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com        SkPath path2;
67d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com        path2.setFillType(SkPath::kWinding_FillType);
68b435bd7d497c6743ae495e11b6828eae30521366reed@google.com        path2.addCircle(x + SkIntToScalar(120), y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCCW_Direction);
69b435bd7d497c6743ae495e11b6828eae30521366reed@google.com        path2.addCircle(x + SkIntToScalar(120), y + SkIntToScalar(200), SkIntToScalar(40), SkPath::kCW_Direction);
70d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com        canvas->drawPath(path2, paint);
71ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
72d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com        path2.reset();
73b435bd7d497c6743ae495e11b6828eae30521366reed@google.com        path2.addCircle(x + SkIntToScalar(240), y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCCW_Direction);
74d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com        canvas->drawPath(path2, paint);
75d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com        SkASSERT(path2.cheapIsDirection(SkPath::kCCW_Direction));
76ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
77d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com        path2.reset();
78d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com        SkASSERT(!path2.cheapComputeDirection(NULL));
79b435bd7d497c6743ae495e11b6828eae30521366reed@google.com        path2.addCircle(x + SkIntToScalar(360), y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCW_Direction);
80d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com        SkASSERT(path2.cheapIsDirection(SkPath::kCW_Direction));
81d1ab9320b09b922bd2f3b3d4f888c754fde5b58creed@google.com        canvas->drawPath(path2, paint);
8263d73749fbe36491403ea521005fd298dc70a94creed@google.com    }
8363d73749fbe36491403ea521005fd298dc70a94creed@google.com
8463d73749fbe36491403ea521005fd298dc70a94creed@google.comprivate:
8563d73749fbe36491403ea521005fd298dc70a94creed@google.com    typedef GM INHERITED;
8663d73749fbe36491403ea521005fd298dc70a94creed@google.com};
8763d73749fbe36491403ea521005fd298dc70a94creed@google.com
8863d73749fbe36491403ea521005fd298dc70a94creed@google.com//////////////////////////////////////////////////////////////////////////////
8963d73749fbe36491403ea521005fd298dc70a94creed@google.com
9063d73749fbe36491403ea521005fd298dc70a94creed@google.comstatic GM* MyFactory(void*) { return new StrokeFillGM; }
9163d73749fbe36491403ea521005fd298dc70a94creed@google.comstatic GMRegistry reg(MyFactory);
9263d73749fbe36491403ea521005fd298dc70a94creed@google.com
9363d73749fbe36491403ea521005fd298dc70a94creed@google.com}
94