Home | History | Annotate | Download | only in gm
      1 /*
      2  * Copyright 2011 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #include "gm.h"
      9 #include "SkCanvas.h"
     10 #include "SkPath.h"
     11 #include "SkTypeface.h"
     12 
     13 static void test_path(SkCanvas* canvas, const SkPath& path) {
     14     SkPaint paint;
     15     paint.setAntiAlias(true);
     16     canvas->drawPath(path, paint);
     17 
     18     paint.setStyle(SkPaint::kStroke_Style);
     19     paint.setColor(SK_ColorRED);
     20     canvas->drawPath(path, paint);
     21 }
     22 
     23 static void test_rev(SkCanvas* canvas, const SkPath& path) {
     24     test_path(canvas, path);
     25 
     26     SkPath rev;
     27     rev.reverseAddPath(path);
     28     canvas->save();
     29     canvas->translate(150, 0);
     30     test_path(canvas, rev);
     31     canvas->restore();
     32 }
     33 
     34 static void test_rev(SkCanvas* canvas) {
     35     SkRect r = { 10, 10, 100, 60 };
     36 
     37     SkPath path;
     38 
     39     path.addRect(r); test_rev(canvas, path);
     40 
     41     canvas->translate(0, 100);
     42     path.offset(20, 20);
     43     path.addRect(r); test_rev(canvas, path);
     44 
     45     canvas->translate(0, 100);
     46     path.reset();
     47     path.moveTo(10, 10); path.lineTo(30, 30);
     48     path.addOval(r);
     49     r.offset(50, 20);
     50     path.addOval(r);
     51     test_rev(canvas, path);
     52 
     53     SkPaint paint;
     54     paint.setTextSize(SkIntToScalar(100));
     55     SkTypeface* hira = SkTypeface::CreateFromName("Hiragino Maru Gothic Pro", SkTypeface::kNormal);
     56     SkSafeUnref(paint.setTypeface(hira));
     57     path.reset();
     58     paint.getTextPath("e", 1, 50, 50, &path);
     59     canvas->translate(0, 100);
     60     test_rev(canvas, path);
     61 }
     62 
     63 namespace skiagm {
     64 
     65 class PathReverseGM : public GM {
     66 public:
     67     PathReverseGM() {
     68 
     69     }
     70 
     71 protected:
     72     virtual uint32_t onGetFlags() const SK_OVERRIDE {
     73         return kSkipTiled_Flag;
     74     }
     75 
     76     virtual SkString onShortName() {
     77         return SkString("path-reverse");
     78     }
     79 
     80     virtual SkISize onISize() {
     81         return SkISize::Make(640, 480);
     82     }
     83 
     84     virtual void onDraw(SkCanvas* canvas) {
     85         if (false) test_rev(canvas); // avoid bit rot, suppress warning
     86         SkRect r = { 10, 10, 100, 60 };
     87 
     88         SkPath path;
     89 
     90         path.addRect(r); test_rev(canvas, path);
     91 
     92         canvas->translate(0, 100);
     93         path.offset(20, 20);
     94         path.addRect(r); test_rev(canvas, path);
     95 
     96         canvas->translate(0, 100);
     97         path.reset();
     98         path.moveTo(10, 10); path.lineTo(30, 30);
     99         path.addOval(r);
    100         r.offset(50, 20);
    101         path.addOval(r);
    102         test_rev(canvas, path);
    103 
    104         SkPaint paint;
    105         paint.setTextSize(SkIntToScalar(100));
    106         SkTypeface* hira = SkTypeface::CreateFromName("Hiragino Maru Gothic Pro", SkTypeface::kNormal);
    107         SkSafeUnref(paint.setTypeface(hira));
    108         path.reset();
    109         paint.getTextPath("e", 1, 50, 50, &path);
    110         canvas->translate(0, 100);
    111         test_rev(canvas, path);
    112     }
    113 
    114 private:
    115     typedef GM INHERITED;
    116 };
    117 
    118 //////////////////////////////////////////////////////////////////////////////
    119 
    120 static GM* MyFactory(void*) { return new PathReverseGM; }
    121 static GMRegistry reg(MyFactory);
    122 
    123 }
    124