| Index: gm/filterbitmap.cpp
 | 
| diff --git a/gm/filterbitmap.cpp b/gm/filterbitmap.cpp
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..efb3d1077ad884f3f4c6837b4b20ce2d61edbbd9
 | 
| --- /dev/null
 | 
| +++ b/gm/filterbitmap.cpp
 | 
| @@ -0,0 +1,114 @@
 | 
| +/*
 | 
| + * Copyright 2011 Google Inc.
 | 
| + *
 | 
| + * Use of this source code is governed by a BSD-style license that can be
 | 
| + * found in the LICENSE file.
 | 
| + */
 | 
| +
 | 
| +#include "gm.h"
 | 
| +#include "SkGradientShader.h"
 | 
| +
 | 
| +#include "SkTypeface.h"
 | 
| +#include "SkImageDecoder.h"
 | 
| +static void load_bm(SkBitmap* bm) {
 | 
| +//    SkImageDecoder::DecodeFile("/skia/trunk/books.jpg", bm);
 | 
| +
 | 
| +    bm->setConfig(SkBitmap::kARGB_8888_Config, 160, 120);
 | 
| +    bm->allocPixels();
 | 
| +    SkCanvas canvas(*bm);
 | 
| +    canvas.drawColor(SK_ColorWHITE);
 | 
| +
 | 
| +    SkPaint paint;
 | 
| +    paint.setAntiAlias(true);
 | 
| +    paint.setSubpixelText(true);
 | 
| +    paint.setTextSize(17);
 | 
| +
 | 
| +    paint.setTypeface(SkTypeface::CreateFromName("Times", SkTypeface::kNormal))->unref();
 | 
| +    canvas.drawText("Hamburgefons", 12, 10, 25, paint);
 | 
| +    paint.setTypeface(SkTypeface::CreateFromName("Times", SkTypeface::kItalic))->unref();
 | 
| +    canvas.drawText("Hamburgefons", 12, 10, 50, paint);
 | 
| +    paint.setTypeface(SkTypeface::CreateFromName("Times", SkTypeface::kBold))->unref();
 | 
| +    canvas.drawText("Hamburgefons", 12, 10, 75, paint);
 | 
| +    paint.setTypeface(SkTypeface::CreateFromName("Times", SkTypeface::kBoldItalic))->unref();
 | 
| +    canvas.drawText("Hamburgefons", 12, 10, 100, paint);
 | 
| +}
 | 
| +
 | 
| +static SkSize computeSize(const SkBitmap& bm, const SkMatrix& mat) {
 | 
| +    SkRect bounds = { 0, 0, bm.width(), bm.height() };
 | 
| +    mat.mapRect(&bounds);
 | 
| +    return SkSize::Make(bounds.width(), bounds.height());
 | 
| +}
 | 
| +
 | 
| +static void draw_col(SkCanvas* canvas, const SkBitmap& bm, const SkMatrix& mat,
 | 
| +                     SkScalar dx) {
 | 
| +    SkPaint paint;
 | 
| +
 | 
| +    SkAutoCanvasRestore acr(canvas, true);
 | 
| +
 | 
| +    canvas->drawBitmapMatrix(bm, mat, &paint);
 | 
| +
 | 
| +    paint.setFilterBitmap(true);
 | 
| +    canvas->translate(dx, 0);
 | 
| +    canvas->drawBitmapMatrix(bm, mat, &paint);
 | 
| +
 | 
| +    paint.setFlags(paint.getFlags() | SkPaint::kBicubicFilterBitmap_Flag);
 | 
| +    canvas->translate(dx, 0);
 | 
| +    canvas->drawBitmapMatrix(bm, mat, &paint);
 | 
| +}
 | 
| +
 | 
| +class FilterBitmapGM : public skiagm::GM {
 | 
| +    bool fOnce;
 | 
| +    void init() {
 | 
| +        if (fOnce) {
 | 
| +            return;
 | 
| +        }
 | 
| +        fOnce = true;
 | 
| +        load_bm(&fBM);
 | 
| +
 | 
| +        SkScalar cx = SkScalarHalf(fBM.width());
 | 
| +        SkScalar cy = SkScalarHalf(fBM.height());
 | 
| +        SkScalar scale = 1.6f;
 | 
| +
 | 
| +        fMatrix[0].setScale(scale, scale);
 | 
| +        fMatrix[1].setRotate(30, cx, cy); fMatrix[1].postScale(scale, scale);
 | 
| +    }
 | 
| +
 | 
| +public:
 | 
| +    SkBitmap    fBM;
 | 
| +    SkMatrix    fMatrix[2];
 | 
| +
 | 
| +    FilterBitmapGM() : fOnce(false) {
 | 
| +        this->setBGColor(0xFFDDDDDD);
 | 
| +    }
 | 
| +
 | 
| +protected:
 | 
| +    virtual SkString onShortName() SK_OVERRIDE {
 | 
| +        return SkString("filterbitmap");
 | 
| +    }
 | 
| +
 | 
| +    virtual SkISize onISize() SK_OVERRIDE {
 | 
| +        return SkISize::Make(920, 480);
 | 
| +    }
 | 
| +
 | 
| +    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
 | 
| +        this->init();
 | 
| +
 | 
| +        canvas->translate(10, 10);
 | 
| +        for (size_t i = 0; i < SK_ARRAY_COUNT(fMatrix); ++i) {
 | 
| +            SkSize size = computeSize(fBM, fMatrix[i]);
 | 
| +            size.fWidth += 20;
 | 
| +            size.fHeight += 20;
 | 
| +
 | 
| +            draw_col(canvas, fBM, fMatrix[i], size.fWidth);
 | 
| +            canvas->translate(0, size.fHeight);
 | 
| +        }
 | 
| +    }
 | 
| +
 | 
| +private:
 | 
| +    typedef skiagm::GM INHERITED;
 | 
| +};
 | 
| +
 | 
| +//////////////////////////////////////////////////////////////////////////////
 | 
| +
 | 
| +DEF_GM( return new FilterBitmapGM; )
 | 
| +
 | 
| 
 |