Home | History | Annotate | Download | only in samplecode
      1 #include "SampleCode.h"
      2 #include "SkView.h"
      3 #include "SkCanvas.h"
      4 #include "SkGradientShader.h"
      5 #include "SkPath.h"
      6 #include "SkRegion.h"
      7 #include "SkShader.h"
      8 #include "SkUtils.h"
      9 #include "Sk1DPathEffect.h"
     10 #include "SkCornerPathEffect.h"
     11 #include "SkPathMeasure.h"
     12 #include "SkRandom.h"
     13 #include "SkColorPriv.h"
     14 #include "SkColorFilter.h"
     15 #include "SkDither.h"
     16 
     17 static void make_bm(SkBitmap* bm) {
     18     const SkColor colors[] = {
     19         SK_ColorRED, SK_ColorGREEN,
     20         SK_ColorBLUE, SK_ColorWHITE
     21     };
     22     SkColorTable* ctable = new SkColorTable(colors, 4);
     23     bm->setConfig(SkBitmap::kIndex8_Config, 2, 2);
     24     bm->allocPixels(ctable);
     25     ctable->unref();
     26 
     27     *bm->getAddr8(0, 0) = 0;
     28     *bm->getAddr8(1, 0) = 1;
     29     *bm->getAddr8(0, 1) = 2;
     30     *bm->getAddr8(1, 1) = 3;
     31 }
     32 
     33 static SkScalar draw_bm(SkCanvas* canvas, const SkBitmap& bm,
     34                         SkScalar x, SkScalar y, SkPaint* paint) {
     35 #if 1
     36     canvas->drawBitmap(bm, x, y, paint);
     37     return SkIntToScalar(bm.width()) * 5/4;
     38 #else
     39     SkAutoCanvasRestore acr(canvas, true);
     40     canvas->translate(x, y);
     41 
     42     SkScalar w = SkIntToScalar(bm.width());
     43     SkScalar h = SkIntToScalar(bm.height());
     44     SkShader* s = SkShader::CreateBitmapShader(bm, SkShader::kRepeat_TileMode,
     45                                                SkShader::kRepeat_TileMode);
     46     paint->setShader(s)->unref();
     47     canvas->drawRect(SkRect::MakeWH(w, h), *paint);
     48     paint->setShader(NULL);
     49     return w * 5/4;
     50 #endif
     51 }
     52 
     53 static SkScalar draw_set(SkCanvas* c, const SkBitmap& bm, SkScalar x, SkPaint* p) {
     54     x += draw_bm(c, bm, x, 0, p);
     55     p->setFilterBitmap(true);
     56     x += draw_bm(c, bm, x, 0, p);
     57     p->setDither(true);
     58     return x + draw_bm(c, bm, x, 0, p);
     59 }
     60 
     61 static const char* gConfigNames[] = {
     62     "unknown config",
     63     "A1",
     64     "A8",
     65     "Index8",
     66     "565",
     67     "4444",
     68     "8888"
     69 };
     70 
     71 static SkScalar draw_row(SkCanvas* canvas, const SkBitmap& bm) {
     72     SkAutoCanvasRestore acr(canvas, true);
     73 
     74     SkPaint paint;
     75     SkScalar x = 0;
     76     const int scale = 32;
     77 
     78     paint.setAntiAlias(true);
     79     const char* name = gConfigNames[bm.config()];
     80     canvas->drawText(name, strlen(name), x, SkIntToScalar(bm.height())*scale*5/8,
     81                      paint);
     82     canvas->translate(SkIntToScalar(48), 0);
     83 
     84     canvas->scale(SkIntToScalar(scale), SkIntToScalar(scale));
     85 
     86     x += draw_set(canvas, bm, 0, &paint);
     87     paint.reset();
     88     paint.setAlpha(0x80);
     89     draw_set(canvas, bm, x, &paint);
     90     return x * scale / 3;
     91 }
     92 
     93 class FilterView : public SampleView {
     94 public:
     95     SkBitmap    fBM8, fBM4444, fBM16, fBM32;
     96 
     97 	FilterView() {
     98         make_bm(&fBM8);
     99         fBM8.copyTo(&fBM4444, SkBitmap::kARGB_4444_Config);
    100         fBM8.copyTo(&fBM16, SkBitmap::kRGB_565_Config);
    101         fBM8.copyTo(&fBM32, SkBitmap::kARGB_8888_Config);
    102 
    103         this->setBGColor(0xFFDDDDDD);
    104     }
    105 
    106 protected:
    107     // overrides from SkEventSink
    108     virtual bool onQuery(SkEvent* evt) {
    109         if (SampleCode::TitleQ(*evt)) {
    110             SampleCode::TitleR(evt, "Filter");
    111             return true;
    112         }
    113         return this->INHERITED::onQuery(evt);
    114     }
    115 
    116     virtual void onDrawContent(SkCanvas* canvas) {
    117         SkScalar x = SkIntToScalar(10);
    118         SkScalar y = SkIntToScalar(10);
    119 
    120         canvas->translate(x, y);
    121         y = draw_row(canvas, fBM8);
    122         canvas->translate(0, y);
    123         y = draw_row(canvas, fBM4444);
    124         canvas->translate(0, y);
    125         y = draw_row(canvas, fBM16);
    126         canvas->translate(0, y);
    127         draw_row(canvas, fBM32);
    128     }
    129 
    130 private:
    131     typedef SampleView INHERITED;
    132 };
    133 
    134 //////////////////////////////////////////////////////////////////////////////
    135 
    136 static SkView* MyFactory() { return new FilterView; }
    137 static SkViewRegister reg(MyFactory);
    138 
    139