Home | History | Annotate | Download | only in gm
      1 /*
      2  * Copyright 2012 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 "SkSurface.h"
     12 
     13 #define ZOOM    32
     14 #define SMALL_W 9
     15 #define SMALL_H 3
     16 #define REPEAT_LOOP 5
     17 
     18 static SkSurface* new_surface(int width, int height) {
     19     return SkSurface::NewRasterPMColor(width, height);
     20 }
     21 
     22 static void draw_pixel_centers(SkCanvas* canvas) {
     23     SkPaint paint;
     24     paint.setColor(0xFF0088FF);
     25     paint.setAntiAlias(true);
     26 
     27     for (int y = 0; y < SMALL_H; ++y) {
     28         for (int x = 0; x < SMALL_W; ++x) {
     29             canvas->drawCircle(x + 0.5f, y + 0.5f, 1.5f / ZOOM, paint);
     30         }
     31     }
     32 }
     33 
     34 static void draw_fatpath(SkCanvas* canvas, SkSurface* surface,
     35                          const SkPath paths[], int count) {
     36     SkPaint paint;
     37 
     38     surface->getCanvas()->clear(SK_ColorTRANSPARENT);
     39     for (int i = 0; i < count; ++i) {
     40         surface->getCanvas()->drawPath(paths[i], paint);
     41     }
     42     surface->draw(canvas, 0, 0, NULL);
     43 
     44     paint.setAntiAlias(true);
     45     paint.setColor(SK_ColorRED);
     46     paint.setStyle(SkPaint::kStroke_Style);
     47     for (int j = 0; j < count; ++j) {
     48         canvas->drawPath(paths[j], paint);
     49     }
     50 
     51     draw_pixel_centers(canvas);
     52 }
     53 
     54 class FatPathFillGM : public skiagm::GM {
     55 public:
     56     FatPathFillGM() {}
     57 
     58 protected:
     59     virtual uint32_t onGetFlags() const SK_OVERRIDE {
     60         return kSkipTiled_Flag;
     61     }
     62 
     63     virtual SkString onShortName() {
     64         return SkString("fatpathfill");
     65     }
     66 
     67     virtual SkISize onISize() {
     68         return SkISize::Make(SMALL_W * ZOOM, SMALL_H * ZOOM * REPEAT_LOOP);
     69     }
     70 
     71     virtual void onDraw(SkCanvas* canvas) {
     72         SkAutoTUnref<SkSurface> surface(new_surface(SMALL_W, SMALL_H));
     73 
     74         canvas->scale(ZOOM, ZOOM);
     75 
     76         SkPaint paint;
     77         paint.setStyle(SkPaint::kStroke_Style);
     78         paint.setStrokeWidth(SK_Scalar1);
     79 
     80         for (int i = 0; i < REPEAT_LOOP; ++i) {
     81             SkPath line, path;
     82             line.moveTo(SkIntToScalar(1), SkIntToScalar(2));
     83             line.lineTo(SkIntToScalar(4 + i), SkIntToScalar(1));
     84             paint.getFillPath(line, &path);
     85             draw_fatpath(canvas, surface, &path, 1);
     86 
     87             canvas->translate(0, SMALL_H);
     88         }
     89     }
     90 
     91 private:
     92     typedef skiagm::GM INHERITED;
     93 };
     94 
     95 ///////////////////////////////////////////////////////////////////////////////
     96 
     97 DEF_GM(return new FatPathFillGM;)
     98