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 
      8 #include "SampleCode.h"
      9 #include "SkView.h"
     10 #include "SkCanvas.h"
     11 #include "SkGradientShader.h"
     12 #include "SkGraphics.h"
     13 #include "SkImageDecoder.h"
     14 #include "SkPath.h"
     15 #include "SkRegion.h"
     16 #include "SkShader.h"
     17 #include "SkUtils.h"
     18 #include "SkXfermode.h"
     19 #include "SkColorPriv.h"
     20 #include "SkColorFilter.h"
     21 #include "SkTime.h"
     22 
     23 static const char* gNames[] = {
     24     "/skimages/background_01.png"
     25 };
     26 
     27 class Filter2View : public SampleView {
     28 public:
     29     SkBitmap*   fBitmaps;
     30     int         fBitmapCount;
     31     int         fCurrIndex;
     32 
     33     Filter2View() {
     34         fBitmapCount = SK_ARRAY_COUNT(gNames)*2;
     35         fBitmaps = new SkBitmap[fBitmapCount];
     36 
     37         for (int i = 0; i < fBitmapCount/2; i++) {
     38             SkImageDecoder::DecodeFile(gNames[i], &fBitmaps[i], kN32_SkColorType,
     39                                        SkImageDecoder::kDecodePixels_Mode, NULL);
     40         }
     41         for (int i = fBitmapCount/2; i < fBitmapCount; i++) {
     42             SkImageDecoder::DecodeFile(gNames[i-fBitmapCount/2], &fBitmaps[i], kRGB_565_SkColorType,
     43                                        SkImageDecoder::kDecodePixels_Mode, NULL);
     44         }
     45         fCurrIndex = 0;
     46 
     47         this->setBGColor(SK_ColorGRAY);
     48     }
     49 
     50     virtual ~Filter2View() {
     51         delete[] fBitmaps;
     52     }
     53 
     54 protected:
     55     // overrides from SkEventSink
     56     virtual bool onQuery(SkEvent* evt) {
     57         if (SampleCode::TitleQ(*evt)) {
     58             SkString str("Filter/Dither ");
     59             str.append(gNames[fCurrIndex]);
     60             SampleCode::TitleR(evt, str.c_str());
     61             return true;
     62         }
     63         return this->INHERITED::onQuery(evt);
     64     }
     65 
     66     virtual void onDrawContent(SkCanvas* canvas) {
     67         canvas->translate(SkIntToScalar(10), SkIntToScalar(50));
     68 
     69         const SkScalar W = SkIntToScalar(fBitmaps[0].width() + 1);
     70         const SkScalar H = SkIntToScalar(fBitmaps[0].height() + 1);
     71         SkPaint paint;
     72 
     73         const SkScalar scale = 0.897917f;
     74         canvas->scale(SK_Scalar1, scale);
     75 
     76         for (int k = 0; k < 2; k++) {
     77             paint.setFilterLevel(k == 1 ? SkPaint::kLow_FilterLevel : SkPaint::kNone_FilterLevel);
     78             for (int j = 0; j < 2; j++) {
     79                 paint.setDither(j == 1);
     80                 for (int i = 0; i < fBitmapCount; i++) {
     81                     SkScalar x = (k * fBitmapCount + j) * W;
     82                     SkScalar y = i * H;
     83                     x = SkScalarRoundToScalar(x);
     84                     y = SkScalarRoundToScalar(y);
     85                     canvas->drawBitmap(fBitmaps[i], x, y, &paint);
     86                     if (i == 0) {
     87                         SkPaint p;
     88                         p.setAntiAlias(true);
     89                         p.setTextAlign(SkPaint::kCenter_Align);
     90                         p.setTextSize(SkIntToScalar(18));
     91                         SkString s("dither=");
     92                         s.appendS32(paint.isDither());
     93                         s.append(" filter=");
     94                         s.appendS32(paint.getFilterLevel() != SkPaint::kNone_FilterLevel);
     95                         canvas->drawText(s.c_str(), s.size(), x + W/2,
     96                                          y - p.getTextSize(), p);
     97                     }
     98                     if (k+j == 2) {
     99                         SkPaint p;
    100                         p.setAntiAlias(true);
    101                         p.setTextSize(SkIntToScalar(18));
    102                         SkString s;
    103                         s.append(" depth=");
    104                         s.appendS32(fBitmaps[i].colorType() == kRGB_565_SkColorType ? 16 : 32);
    105                         canvas->drawText(s.c_str(), s.size(), x + W + SkIntToScalar(4),
    106                                          y + H/2, p);
    107                     }
    108                 }
    109             }
    110         }
    111     }
    112 
    113 private:
    114     typedef SampleView INHERITED;
    115 };
    116 
    117 //////////////////////////////////////////////////////////////////////////////
    118 
    119 static SkView* MyFactory() { return new Filter2View; }
    120 static SkViewRegister reg(MyFactory);
    121