Home | History | Annotate | Download | only in samplecode
      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 #include "SampleCode.h"
      8 #include "SkView.h"
      9 #include "SkCanvas.h"
     10 #include "SkPaint.h"
     11 #include "SkShader.h"
     12 
     13 static SkBitmap createBitmap(int n) {
     14     SkBitmap bitmap;
     15     bitmap.allocN32Pixels(n, n);
     16     bitmap.eraseColor(SK_ColorGREEN);
     17 
     18     SkCanvas canvas(bitmap);
     19     SkRect r;
     20     r.set(0, 0, SkIntToScalar(n), SkIntToScalar(n));
     21     SkPaint paint;
     22     paint.setAntiAlias(true);
     23 
     24     paint.setColor(SK_ColorRED);
     25     canvas.drawOval(r, paint);
     26     paint.setColor(SK_ColorBLUE);
     27     paint.setStrokeWidth(SkIntToScalar(n)/15);
     28     paint.setStyle(SkPaint::kStroke_Style);
     29     canvas.drawLine(0, 0, r.fRight, r.fBottom, paint);
     30     canvas.drawLine(0, r.fBottom, r.fRight, 0, paint);
     31 
     32     return bitmap;
     33 }
     34 
     35 class AARectView : public SampleView {
     36     SkBitmap fBitmap;
     37     enum {
     38         N = 64
     39     };
     40 public:
     41     AARectView() {
     42         fBitmap = createBitmap(N);
     43 
     44         fWidth = N;
     45     }
     46 
     47 protected:
     48     // overrides from SkEventSink
     49     virtual bool onQuery(SkEvent* evt) {
     50         if (SampleCode::TitleQ(*evt)) {
     51             SampleCode::TitleR(evt, "AA Rects");
     52             return true;
     53         }
     54         return this->INHERITED::onQuery(evt);
     55     }
     56 
     57     virtual void onDrawContent(SkCanvas* canvas) {
     58         canvas->translate(SkIntToScalar(10), SkIntToScalar(10));
     59 
     60         SkPaint bluePaint;
     61         bluePaint.setARGB(0xff, 0x0, 0x0, 0xff);
     62         SkPaint bmpPaint;
     63         bmpPaint.setShader(SkShader::MakeBitmapShader(fBitmap, SkShader::kRepeat_TileMode,
     64                                                       SkShader::kRepeat_TileMode));
     65         bluePaint.setStrokeWidth(3);
     66         bmpPaint.setStrokeWidth(3);
     67 
     68         SkPaint paints[] = { bluePaint, bmpPaint };
     69 
     70         SkRect rect;
     71 
     72         SkScalar dx = SkIntToScalar(80);
     73         SkScalar dy = SkIntToScalar(100);
     74         SkMatrix matrix;
     75         for (size_t p = 0; p < SK_ARRAY_COUNT(paints); ++p) {
     76             for (int stroke = 0; stroke < 2; ++stroke) {
     77                 paints[p].setStyle(stroke ? SkPaint::kStroke_Style : SkPaint::kFill_Style);
     78                 for (int a = 0; a < 3; ++ a) {
     79                     paints[p].setAntiAlias(a > 0);
     80                     paints[p].setAlpha(a > 1 ? 0x80 : 0xff);
     81 
     82                     canvas->save();
     83                         rect = SkRect::MakeLTRB(0.f,
     84                                                 0.f,
     85                                                 40.f,
     86                                                 40.f);
     87                         canvas->drawRect(rect, paints[p]);
     88                         canvas->translate(dx, 0);
     89 
     90                         rect = SkRect::MakeLTRB(0.5f,
     91                                                 0.5f,
     92                                                 40.5f,
     93                                                 40.5f);
     94                         canvas->drawRect(rect, paints[p]);
     95                         canvas->translate(dx, 0);
     96 
     97                         rect = SkRect::MakeLTRB(0.5f,
     98                                                 0.5f,
     99                                                 40.f,
    100                                                 40.f);
    101                         canvas->drawRect(rect, paints[p]);
    102                         canvas->translate(dx, 0);
    103 
    104                         rect = SkRect::MakeLTRB(0.75f,
    105                                                 0.75f,
    106                                                 40.75f,
    107                                                 40.75f);
    108                         canvas->drawRect(rect, paints[p]);
    109                         canvas->translate(dx, 0);
    110 
    111                         canvas->save();
    112                             canvas->translate(.33f, .67f);
    113                             rect = SkRect::MakeLTRB(0.0f,
    114                                                     0.0f,
    115                                                     40.0f,
    116                                                     40.0f);
    117                             canvas->drawRect(rect, paints[p]);
    118                         canvas->restore();
    119                         canvas->translate(dx, 0);
    120 
    121                         canvas->save();
    122                             matrix.setRotate(45.f);
    123                             canvas->concat(matrix);
    124                             canvas->translate(20.0f / sqrtf(2.f),
    125                                                 20.0f / sqrtf(2.f));
    126                             rect = SkRect::MakeLTRB(-20.0f,
    127                                                     -20.0f,
    128                                                     20.0f,
    129                                                     20.0f);
    130                             canvas->drawRect(rect, paints[p]);
    131                         canvas->restore();
    132                         canvas->translate(dx, 0);
    133 
    134                         canvas->save();
    135                             canvas->rotate(90.f);
    136                             rect = SkRect::MakeLTRB(0.0f,
    137                                                     0.0f,
    138                                                     40.0f,
    139                                                     -40.0f);
    140                             canvas->drawRect(rect, paints[p]);
    141                         canvas->restore();
    142                         canvas->translate(dx, 0);
    143 
    144                         canvas->save();
    145                             canvas->rotate(90.f);
    146                             rect = SkRect::MakeLTRB(0.5f,
    147                                                     0.5f,
    148                                                     40.5f,
    149                                                     -40.5f);
    150                             canvas->drawRect(rect, paints[p]);
    151                         canvas->restore();
    152                         canvas->translate(dx, 0);
    153 
    154                         canvas->save();
    155                             matrix.setScale(-1.f, -1.f);
    156                             canvas->concat(matrix);
    157                             rect = SkRect::MakeLTRB(0.5f,
    158                                                     0.5f,
    159                                                     -40.5f,
    160                                                     -40.5f);
    161                             canvas->drawRect(rect, paints[p]);
    162                         canvas->restore();
    163                         canvas->translate(dx, 0);
    164 
    165                         canvas->save();
    166                             matrix.setScale(2.1f, 4.1f);
    167                             canvas->concat(matrix);
    168                             rect = SkRect::MakeLTRB(0.1f,
    169                                                     0.1f,
    170                                                     19.1f,
    171                                                     9.1f);
    172                             canvas->drawRect(rect, paints[p]);
    173                         canvas->restore();
    174                         canvas->translate(dx, 0);
    175 
    176                     canvas->restore();
    177                     canvas->translate(0, dy);
    178                 }
    179             }
    180         }
    181     }
    182 
    183 private:
    184     int fWidth;
    185 
    186     typedef SampleView INHERITED;
    187 };
    188 
    189 //////////////////////////////////////////////////////////////////////////////
    190 
    191 static SkView* MyFactory() { return new AARectView; }
    192 static SkViewRegister reg(MyFactory);
    193