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));
553e71a887628ff25c806675366b081c70bb10b74dreed@google.com    SkTypeface* hira = SkTypeface::CreateFromName("Hiragino Maru Gothic Pro", SkTypeface::kNormal);
563e71a887628ff25c806675366b081c70bb10b74dreed@google.com    SkSafeUnref(paint.setTypeface(hira));
573e71a887628ff25c806675366b081c70bb10b74dreed@google.com    path.reset();
583e71a887628ff25c806675366b081c70bb10b74dreed@google.com    paint.getTextPath("e", 1, 50, 50, &path);
593e71a887628ff25c806675366b081c70bb10b74dreed@google.com    canvas->translate(0, 100);
603e71a887628ff25c806675366b081c70bb10b74dreed@google.com    test_rev(canvas, path);
613e71a887628ff25c806675366b081c70bb10b74dreed@google.com}
623e71a887628ff25c806675366b081c70bb10b74dreed@google.com
633e71a887628ff25c806675366b081c70bb10b74dreed@google.comnamespace skiagm {
643e71a887628ff25c806675366b081c70bb10b74dreed@google.com
653e71a887628ff25c806675366b081c70bb10b74dreed@google.comclass PathReverseGM : public GM {
663e71a887628ff25c806675366b081c70bb10b74dreed@google.compublic:
673e71a887628ff25c806675366b081c70bb10b74dreed@google.com    PathReverseGM() {
683e71a887628ff25c806675366b081c70bb10b74dreed@google.com
693e71a887628ff25c806675366b081c70bb10b74dreed@google.com    }
703e71a887628ff25c806675366b081c70bb10b74dreed@google.com
713e71a887628ff25c806675366b081c70bb10b74dreed@google.comprotected:
72a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org    virtual uint32_t onGetFlags() const SK_OVERRIDE {
73a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org        return kSkipTiled_Flag;
74a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org    }
75a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org
763e71a887628ff25c806675366b081c70bb10b74dreed@google.com    virtual SkString onShortName() {
773e71a887628ff25c806675366b081c70bb10b74dreed@google.com        return SkString("path-reverse");
783e71a887628ff25c806675366b081c70bb10b74dreed@google.com    }
793e71a887628ff25c806675366b081c70bb10b74dreed@google.com
803e71a887628ff25c806675366b081c70bb10b74dreed@google.com    virtual SkISize onISize() {
81f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina        return SkISize::Make(640, 480);
823e71a887628ff25c806675366b081c70bb10b74dreed@google.com    }
833e71a887628ff25c806675366b081c70bb10b74dreed@google.com
843e71a887628ff25c806675366b081c70bb10b74dreed@google.com    virtual void onDraw(SkCanvas* canvas) {
851313086ef4d901176e569d1f4b6362250ac02cd7caryclark@google.com        if (false) test_rev(canvas); // avoid bit rot, suppress warning
863e71a887628ff25c806675366b081c70bb10b74dreed@google.com        SkRect r = { 10, 10, 100, 60 };
87d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
883e71a887628ff25c806675366b081c70bb10b74dreed@google.com        SkPath path;
89d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
903e71a887628ff25c806675366b081c70bb10b74dreed@google.com        path.addRect(r); test_rev(canvas, path);
91d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
923e71a887628ff25c806675366b081c70bb10b74dreed@google.com        canvas->translate(0, 100);
933e71a887628ff25c806675366b081c70bb10b74dreed@google.com        path.offset(20, 20);
943e71a887628ff25c806675366b081c70bb10b74dreed@google.com        path.addRect(r); test_rev(canvas, path);
95d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
963e71a887628ff25c806675366b081c70bb10b74dreed@google.com        canvas->translate(0, 100);
973e71a887628ff25c806675366b081c70bb10b74dreed@google.com        path.reset();
983e71a887628ff25c806675366b081c70bb10b74dreed@google.com        path.moveTo(10, 10); path.lineTo(30, 30);
993e71a887628ff25c806675366b081c70bb10b74dreed@google.com        path.addOval(r);
1003e71a887628ff25c806675366b081c70bb10b74dreed@google.com        r.offset(50, 20);
1013e71a887628ff25c806675366b081c70bb10b74dreed@google.com        path.addOval(r);
1023e71a887628ff25c806675366b081c70bb10b74dreed@google.com        test_rev(canvas, path);
103d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
1043e71a887628ff25c806675366b081c70bb10b74dreed@google.com        SkPaint paint;
1053e71a887628ff25c806675366b081c70bb10b74dreed@google.com        paint.setTextSize(SkIntToScalar(100));
1063e71a887628ff25c806675366b081c70bb10b74dreed@google.com        SkTypeface* hira = SkTypeface::CreateFromName("Hiragino Maru Gothic Pro", SkTypeface::kNormal);
1073e71a887628ff25c806675366b081c70bb10b74dreed@google.com        SkSafeUnref(paint.setTypeface(hira));
1083e71a887628ff25c806675366b081c70bb10b74dreed@google.com        path.reset();
1093e71a887628ff25c806675366b081c70bb10b74dreed@google.com        paint.getTextPath("e", 1, 50, 50, &path);
1103e71a887628ff25c806675366b081c70bb10b74dreed@google.com        canvas->translate(0, 100);
1113e71a887628ff25c806675366b081c70bb10b74dreed@google.com        test_rev(canvas, path);
1123e71a887628ff25c806675366b081c70bb10b74dreed@google.com    }
1133e71a887628ff25c806675366b081c70bb10b74dreed@google.com
1143e71a887628ff25c806675366b081c70bb10b74dreed@google.comprivate:
1153e71a887628ff25c806675366b081c70bb10b74dreed@google.com    typedef GM INHERITED;
1163e71a887628ff25c806675366b081c70bb10b74dreed@google.com};
1173e71a887628ff25c806675366b081c70bb10b74dreed@google.com
1183e71a887628ff25c806675366b081c70bb10b74dreed@google.com//////////////////////////////////////////////////////////////////////////////
1193e71a887628ff25c806675366b081c70bb10b74dreed@google.com
1203e71a887628ff25c806675366b081c70bb10b74dreed@google.comstatic GM* MyFactory(void*) { return new PathReverseGM; }
1213e71a887628ff25c806675366b081c70bb10b74dreed@google.comstatic GMRegistry reg(MyFactory);
1223e71a887628ff25c806675366b081c70bb10b74dreed@google.com
1233e71a887628ff25c806675366b081c70bb10b74dreed@google.com}
124