13e71a887628ff25c806675366b081c70bb10b74dreed@google.com/*
23e71a887628ff25c806675366b081c70bb10b74dreed@google.com * Copyright 2011 Google Inc.
33e71a887628ff25c806675366b081c70bb10b74dreed@google.com *
43e71a887628ff25c806675366b081c70bb10b74dreed@google.com * Use of this source code is governed by a BSD-style license that can be
53e71a887628ff25c806675366b081c70bb10b74dreed@google.com * found in the LICENSE file.
63e71a887628ff25c806675366b081c70bb10b74dreed@google.com */
73e71a887628ff25c806675366b081c70bb10b74dreed@google.com
83e71a887628ff25c806675366b081c70bb10b74dreed@google.com#include "gm.h"
93e71a887628ff25c806675366b081c70bb10b74dreed@google.com#include "SkCanvas.h"
103e71a887628ff25c806675366b081c70bb10b74dreed@google.com#include "SkPath.h"
113e71a887628ff25c806675366b081c70bb10b74dreed@google.com#include "SkTypeface.h"
123e71a887628ff25c806675366b081c70bb10b74dreed@google.com
133e71a887628ff25c806675366b081c70bb10b74dreed@google.comstatic void test_path(SkCanvas* canvas, const SkPath& path) {
143e71a887628ff25c806675366b081c70bb10b74dreed@google.com    SkPaint paint;
153e71a887628ff25c806675366b081c70bb10b74dreed@google.com    paint.setAntiAlias(true);
163e71a887628ff25c806675366b081c70bb10b74dreed@google.com    canvas->drawPath(path, paint);
17d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
183e71a887628ff25c806675366b081c70bb10b74dreed@google.com    paint.setStyle(SkPaint::kStroke_Style);
193e71a887628ff25c806675366b081c70bb10b74dreed@google.com    paint.setColor(SK_ColorRED);
203e71a887628ff25c806675366b081c70bb10b74dreed@google.com    canvas->drawPath(path, paint);
213e71a887628ff25c806675366b081c70bb10b74dreed@google.com}
223e71a887628ff25c806675366b081c70bb10b74dreed@google.com
233e71a887628ff25c806675366b081c70bb10b74dreed@google.comstatic void test_rev(SkCanvas* canvas, const SkPath& path) {
243e71a887628ff25c806675366b081c70bb10b74dreed@google.com    test_path(canvas, path);
253e71a887628ff25c806675366b081c70bb10b74dreed@google.com
263e71a887628ff25c806675366b081c70bb10b74dreed@google.com    SkPath rev;
273e71a887628ff25c806675366b081c70bb10b74dreed@google.com    rev.reverseAddPath(path);
283e71a887628ff25c806675366b081c70bb10b74dreed@google.com    canvas->save();
293e71a887628ff25c806675366b081c70bb10b74dreed@google.com    canvas->translate(150, 0);
303e71a887628ff25c806675366b081c70bb10b74dreed@google.com    test_path(canvas, rev);
313e71a887628ff25c806675366b081c70bb10b74dreed@google.com    canvas->restore();
323e71a887628ff25c806675366b081c70bb10b74dreed@google.com}
333e71a887628ff25c806675366b081c70bb10b74dreed@google.com
343e71a887628ff25c806675366b081c70bb10b74dreed@google.comstatic void test_rev(SkCanvas* canvas) {
353e71a887628ff25c806675366b081c70bb10b74dreed@google.com    SkRect r = { 10, 10, 100, 60 };
363e71a887628ff25c806675366b081c70bb10b74dreed@google.com
373e71a887628ff25c806675366b081c70bb10b74dreed@google.com    SkPath path;
383e71a887628ff25c806675366b081c70bb10b74dreed@google.com
393e71a887628ff25c806675366b081c70bb10b74dreed@google.com    path.addRect(r); test_rev(canvas, path);
403e71a887628ff25c806675366b081c70bb10b74dreed@google.com
413e71a887628ff25c806675366b081c70bb10b74dreed@google.com    canvas->translate(0, 100);
423e71a887628ff25c806675366b081c70bb10b74dreed@google.com    path.offset(20, 20);
433e71a887628ff25c806675366b081c70bb10b74dreed@google.com    path.addRect(r); test_rev(canvas, path);
443e71a887628ff25c806675366b081c70bb10b74dreed@google.com
453e71a887628ff25c806675366b081c70bb10b74dreed@google.com    canvas->translate(0, 100);
463e71a887628ff25c806675366b081c70bb10b74dreed@google.com    path.reset();
473e71a887628ff25c806675366b081c70bb10b74dreed@google.com    path.moveTo(10, 10); path.lineTo(30, 30);
483e71a887628ff25c806675366b081c70bb10b74dreed@google.com    path.addOval(r);
493e71a887628ff25c806675366b081c70bb10b74dreed@google.com    r.offset(50, 20);
503e71a887628ff25c806675366b081c70bb10b74dreed@google.com    path.addOval(r);
513e71a887628ff25c806675366b081c70bb10b74dreed@google.com    test_rev(canvas, path);
523e71a887628ff25c806675366b081c70bb10b74dreed@google.com
533e71a887628ff25c806675366b081c70bb10b74dreed@google.com    SkPaint paint;
543e71a887628ff25c806675366b081c70bb10b74dreed@google.com    paint.setTextSize(SkIntToScalar(100));
55992c7b03ef7914a18bfd78e965b0b4c99a5f5672Cary Clark    sk_tool_utils::set_portable_typeface(&paint, "Hiragino Maru Gothic Pro");
563e71a887628ff25c806675366b081c70bb10b74dreed@google.com    path.reset();
573e71a887628ff25c806675366b081c70bb10b74dreed@google.com    paint.getTextPath("e", 1, 50, 50, &path);
583e71a887628ff25c806675366b081c70bb10b74dreed@google.com    canvas->translate(0, 100);
593e71a887628ff25c806675366b081c70bb10b74dreed@google.com    test_rev(canvas, path);
603e71a887628ff25c806675366b081c70bb10b74dreed@google.com}
613e71a887628ff25c806675366b081c70bb10b74dreed@google.com
623e71a887628ff25c806675366b081c70bb10b74dreed@google.comnamespace skiagm {
633e71a887628ff25c806675366b081c70bb10b74dreed@google.com
643e71a887628ff25c806675366b081c70bb10b74dreed@google.comclass PathReverseGM : public GM {
653e71a887628ff25c806675366b081c70bb10b74dreed@google.compublic:
663e71a887628ff25c806675366b081c70bb10b74dreed@google.com    PathReverseGM() {
673e71a887628ff25c806675366b081c70bb10b74dreed@google.com
683e71a887628ff25c806675366b081c70bb10b74dreed@google.com    }
693e71a887628ff25c806675366b081c70bb10b74dreed@google.com
703e71a887628ff25c806675366b081c70bb10b74dreed@google.comprotected:
71a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org
7236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    SkString onShortName() override {
733e71a887628ff25c806675366b081c70bb10b74dreed@google.com        return SkString("path-reverse");
743e71a887628ff25c806675366b081c70bb10b74dreed@google.com    }
753e71a887628ff25c806675366b081c70bb10b74dreed@google.com
7636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    SkISize onISize() override {
77f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina        return SkISize::Make(640, 480);
783e71a887628ff25c806675366b081c70bb10b74dreed@google.com    }
793e71a887628ff25c806675366b081c70bb10b74dreed@google.com
8036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDraw(SkCanvas* canvas) override {
811313086ef4d901176e569d1f4b6362250ac02cd7caryclark@google.com        if (false) test_rev(canvas); // avoid bit rot, suppress warning
823e71a887628ff25c806675366b081c70bb10b74dreed@google.com        SkRect r = { 10, 10, 100, 60 };
83d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
843e71a887628ff25c806675366b081c70bb10b74dreed@google.com        SkPath path;
85d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
863e71a887628ff25c806675366b081c70bb10b74dreed@google.com        path.addRect(r); test_rev(canvas, path);
87d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
883e71a887628ff25c806675366b081c70bb10b74dreed@google.com        canvas->translate(0, 100);
893e71a887628ff25c806675366b081c70bb10b74dreed@google.com        path.offset(20, 20);
903e71a887628ff25c806675366b081c70bb10b74dreed@google.com        path.addRect(r); test_rev(canvas, path);
91d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
923e71a887628ff25c806675366b081c70bb10b74dreed@google.com        canvas->translate(0, 100);
933e71a887628ff25c806675366b081c70bb10b74dreed@google.com        path.reset();
943e71a887628ff25c806675366b081c70bb10b74dreed@google.com        path.moveTo(10, 10); path.lineTo(30, 30);
953e71a887628ff25c806675366b081c70bb10b74dreed@google.com        path.addOval(r);
963e71a887628ff25c806675366b081c70bb10b74dreed@google.com        r.offset(50, 20);
973e71a887628ff25c806675366b081c70bb10b74dreed@google.com        path.addOval(r);
983e71a887628ff25c806675366b081c70bb10b74dreed@google.com        test_rev(canvas, path);
99d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
1003e71a887628ff25c806675366b081c70bb10b74dreed@google.com        SkPaint paint;
1013e71a887628ff25c806675366b081c70bb10b74dreed@google.com        paint.setTextSize(SkIntToScalar(100));
102992c7b03ef7914a18bfd78e965b0b4c99a5f5672Cary Clark        sk_tool_utils::set_portable_typeface(&paint, "Hiragino Maru Gothic Pro");
1033e71a887628ff25c806675366b081c70bb10b74dreed@google.com        path.reset();
1043e71a887628ff25c806675366b081c70bb10b74dreed@google.com        paint.getTextPath("e", 1, 50, 50, &path);
1053e71a887628ff25c806675366b081c70bb10b74dreed@google.com        canvas->translate(0, 100);
1063e71a887628ff25c806675366b081c70bb10b74dreed@google.com        test_rev(canvas, path);
1073e71a887628ff25c806675366b081c70bb10b74dreed@google.com    }
1083e71a887628ff25c806675366b081c70bb10b74dreed@google.com
1093e71a887628ff25c806675366b081c70bb10b74dreed@google.comprivate:
1103e71a887628ff25c806675366b081c70bb10b74dreed@google.com    typedef GM INHERITED;
1113e71a887628ff25c806675366b081c70bb10b74dreed@google.com};
1123e71a887628ff25c806675366b081c70bb10b74dreed@google.com
1133e71a887628ff25c806675366b081c70bb10b74dreed@google.com//////////////////////////////////////////////////////////////////////////////
1143e71a887628ff25c806675366b081c70bb10b74dreed@google.com
1153e71a887628ff25c806675366b081c70bb10b74dreed@google.comstatic GM* MyFactory(void*) { return new PathReverseGM; }
1163e71a887628ff25c806675366b081c70bb10b74dreed@google.comstatic GMRegistry reg(MyFactory);
1173e71a887628ff25c806675366b081c70bb10b74dreed@google.com
1183e71a887628ff25c806675366b081c70bb10b74dreed@google.com}
119