| Index: gm/filterbitmap.cpp
|
| diff --git a/gm/filterbitmap.cpp b/gm/filterbitmap.cpp
|
| index c858aff76697b8f4dc88bec03a3204b026a45ece..9e86b54c0308e7810d68a69233c3091136092e7e 100644
|
| --- a/gm/filterbitmap.cpp
|
| +++ b/gm/filterbitmap.cpp
|
| @@ -10,34 +10,12 @@
|
|
|
| #include "SkTypeface.h"
|
| #include "SkImageDecoder.h"
|
| +#include "SkStream.h"
|
|
|
| static void setTypeface(SkPaint* paint, const char name[], SkTypeface::Style style) {
|
| SkSafeUnref(paint->setTypeface(SkTypeface::CreateFromName(name, style)));
|
| }
|
|
|
| -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);
|
| -
|
| - setTypeface(&paint, "Times", SkTypeface::kNormal);
|
| - canvas.drawText("Hamburgefons", 12, 10, 25, paint);
|
| - setTypeface(&paint, "Times", SkTypeface::kBold);
|
| - canvas.drawText("Hamburgefons", 12, 10, 50, paint);
|
| - setTypeface(&paint, "Times", SkTypeface::kItalic);
|
| - canvas.drawText("Hamburgefons", 12, 10, 75, paint);
|
| - setTypeface(&paint, "Times", SkTypeface::kBoldItalic);
|
| - canvas.drawText("Hamburgefons", 12, 10, 100, paint);
|
| -}
|
| -
|
| static SkSize computeSize(const SkBitmap& bm, const SkMatrix& mat) {
|
| SkRect bounds = SkRect::MakeWH(SkIntToScalar(bm.width()),
|
| SkIntToScalar(bm.height()));
|
| @@ -63,17 +41,14 @@ static void draw_col(SkCanvas* canvas, const SkBitmap& bm, const SkMatrix& mat,
|
| }
|
|
|
| class FilterBitmapGM : public skiagm::GM {
|
| - bool fOnce;
|
| - void init() {
|
| - if (fOnce) {
|
| - return;
|
| - }
|
| - fOnce = true;
|
| - load_bm(&fBM);
|
| -
|
| + void onOnceBeforeDraw() {
|
| +
|
| + make_bitmap();
|
| +
|
| SkScalar cx = SkScalarHalf(fBM.width());
|
| SkScalar cy = SkScalarHalf(fBM.height());
|
| - SkScalar scale = 1.6f;
|
| + SkScalar scale = get_scale();
|
| +
|
|
|
| fMatrix[0].setScale(scale, scale);
|
| fMatrix[1].setRotate(30, cx, cy); fMatrix[1].postScale(scale, scale);
|
| @@ -82,22 +57,30 @@ class FilterBitmapGM : public skiagm::GM {
|
| public:
|
| SkBitmap fBM;
|
| SkMatrix fMatrix[2];
|
| -
|
| - FilterBitmapGM() : fOnce(false) {
|
| + SkString fName;
|
| +
|
| + FilterBitmapGM()
|
| + {
|
| this->setBGColor(0xFFDDDDDD);
|
| }
|
|
|
| + void setName( const char name[] ) {
|
| + fName.set(name);
|
| + }
|
| +
|
| protected:
|
| virtual SkString onShortName() SK_OVERRIDE {
|
| - return SkString("filterbitmap");
|
| + return fName;
|
| }
|
|
|
| virtual SkISize onISize() SK_OVERRIDE {
|
| return SkISize::Make(920, 480);
|
| }
|
| -
|
| +
|
| + virtual void make_bitmap() = 0;
|
| + virtual SkScalar get_scale() = 0;
|
| +
|
| virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
|
| - this->init();
|
|
|
| canvas->translate(10, 10);
|
| for (size_t i = 0; i < SK_ARRAY_COUNT(fMatrix); ++i) {
|
| @@ -114,6 +97,143 @@ private:
|
| typedef skiagm::GM INHERITED;
|
| };
|
|
|
| +class FilterBitmapTextGM: public FilterBitmapGM {
|
| + public:
|
| + FilterBitmapTextGM( float textSize )
|
| + : fTextSize( textSize )
|
| + {
|
| + char name[1024];
|
| + sprintf( name, "filterbitmap_text_%.2fpt", fTextSize );
|
| + setName( name );
|
| + }
|
| +
|
| + protected:
|
| + float fTextSize;
|
| +
|
| + SkScalar get_scale() SK_OVERRIDE {
|
| + return 32.f/fTextSize;
|
| + }
|
| +
|
| + void make_bitmap() SK_OVERRIDE {
|
| + fBM.setConfig(SkBitmap::kARGB_8888_Config, fTextSize * 8, fTextSize * 6);
|
| + fBM.allocPixels();
|
| + SkCanvas canvas(fBM);
|
| + canvas.drawColor(SK_ColorWHITE);
|
| +
|
| + SkPaint paint;
|
| + paint.setAntiAlias(true);
|
| + paint.setSubpixelText(true);
|
| + paint.setTextSize(fTextSize);
|
| +
|
| + setTypeface(&paint, "Times", SkTypeface::kNormal);
|
| + canvas.drawText("Hamburgefons", 12, fTextSize/2, 1.2*fTextSize, paint);
|
| + setTypeface(&paint, "Times", SkTypeface::kBold);
|
| + canvas.drawText("Hamburgefons", 12, fTextSize/2, 2.4*fTextSize, paint);
|
| + setTypeface(&paint, "Times", SkTypeface::kItalic);
|
| + canvas.drawText("Hamburgefons", 12, fTextSize/2, 3.6*fTextSize, paint);
|
| + setTypeface(&paint, "Times", SkTypeface::kBoldItalic);
|
| + canvas.drawText("Hamburgefons", 12, fTextSize/2, 4.8*fTextSize, paint);
|
| + }
|
| + private:
|
| + typedef FilterBitmapGM INHERITED;
|
| +};
|
| +
|
| +class FilterBitmapCheckerboardGM: public FilterBitmapGM {
|
| + public:
|
| + FilterBitmapCheckerboardGM( int size, int num_checks )
|
| + : fSize( size ), fNumChecks( num_checks )
|
| + {
|
| + char name[1024];
|
| + sprintf( name, "filterbitmap_checkerboard_%d_%d", fSize, fNumChecks );
|
| + setName( name );
|
| + }
|
| +
|
| + protected:
|
| + int fSize;
|
| + int fNumChecks;
|
| +
|
| + SkScalar get_scale() SK_OVERRIDE {
|
| + return 192.f/fSize;
|
| + }
|
| +
|
| + void make_bitmap() SK_OVERRIDE {
|
| + fBM.setConfig(SkBitmap::kARGB_8888_Config, fSize, fSize);
|
| + fBM.allocPixels();
|
| + SkAutoLockPixels lock(fBM);
|
| + for (int y = 0; y < fSize; y ++) {
|
| + for (int x = 0; x < fSize; x ++) {
|
| + SkPMColor* s = fBM.getAddr32(x, y);
|
| + int cx = (x * fNumChecks) / fSize;
|
| + int cy = (y * fNumChecks) / fSize;
|
| + if ((cx+cy)%2) {
|
| + *s = 0xFFFFFFFF;
|
| + } else {
|
| + *s = 0xFF000000;
|
| + }
|
| + }
|
| + }
|
| + }
|
| + private:
|
| + typedef FilterBitmapGM INHERITED;
|
| +};
|
| +
|
| +class FilterBitmapImageGM: public FilterBitmapGM {
|
| + public:
|
| + FilterBitmapImageGM( const char filename[] )
|
| + : fFilename( filename )
|
| + {
|
| + char name[1024];
|
| + sprintf( name, "filterbitmap_image_%s", filename );
|
| + setName( name );
|
| + }
|
| +
|
| + protected:
|
| + SkString fFilename;
|
| + int fSize;
|
| +
|
| + SkScalar get_scale() SK_OVERRIDE {
|
| + return 192.f/fSize;
|
| + }
|
| +
|
| + void make_bitmap() SK_OVERRIDE {
|
| + SkString path(skiagm::GM::gResourcePath);
|
| + path.append( "/" );
|
| + path.append(fFilename);
|
| +
|
| + SkImageDecoder *codec = NULL;
|
| + SkFILEStream stream(path.c_str());
|
| + if (stream.isValid()) {
|
| + codec = SkImageDecoder::Factory(&stream);
|
| + }
|
| + if (codec) {
|
| + stream.rewind();
|
| + codec->decode(&stream, &fBM, SkBitmap::kARGB_8888_Config,
|
| + SkImageDecoder::kDecodePixels_Mode);
|
| + SkDELETE(codec);
|
| + } else {
|
| + fBM.setConfig(SkBitmap::kARGB_8888_Config, 1, 1);
|
| + fBM.allocPixels();
|
| + *(fBM.getAddr32(0,0)) = 0xFF0000FF; // red == bad
|
| + }
|
| + fSize = fBM.height();
|
| + }
|
| + private:
|
| + typedef FilterBitmapGM INHERITED;
|
| +};
|
| +
|
| //////////////////////////////////////////////////////////////////////////////
|
|
|
| -DEF_GM( return new FilterBitmapGM; )
|
| +DEF_GM( return new FilterBitmapTextGM(3); )
|
| +DEF_GM( return new FilterBitmapTextGM(7); )
|
| +DEF_GM( return new FilterBitmapTextGM(10); )
|
| +DEF_GM( return new FilterBitmapCheckerboardGM(4,4); )
|
| +DEF_GM( return new FilterBitmapCheckerboardGM(32,32); )
|
| +DEF_GM( return new FilterBitmapCheckerboardGM(32,8); )
|
| +DEF_GM( return new FilterBitmapCheckerboardGM(32,2); )
|
| +DEF_GM( return new FilterBitmapCheckerboardGM(192,192); )
|
| +DEF_GM( return new FilterBitmapImageGM("mandrill_16.png"); )
|
| +DEF_GM( return new FilterBitmapImageGM("mandrill_32.png"); )
|
| +DEF_GM( return new FilterBitmapImageGM("mandrill_64.png"); )
|
| +DEF_GM( return new FilterBitmapImageGM("mandrill_128.png"); )
|
| +DEF_GM( return new FilterBitmapImageGM("mandrill_256.png"); )
|
| +DEF_GM( return new FilterBitmapImageGM("mandrill_512.png"); )
|
|
|