diff options
-rw-r--r-- | gm/filterbitmap.cpp | 196 | ||||
-rw-r--r-- | resources/mandrill_128.png | bin | 0 -> 38054 bytes | |||
-rw-r--r-- | resources/mandrill_16.png | bin | 0 -> 952 bytes | |||
-rw-r--r-- | resources/mandrill_256.png | bin | 0 -> 153549 bytes | |||
-rw-r--r-- | resources/mandrill_32.png | bin | 0 -> 2675 bytes | |||
-rw-r--r-- | resources/mandrill_512.png | bin | 0 -> 625834 bytes | |||
-rw-r--r-- | resources/mandrill_64.png | bin | 0 -> 9601 bytes |
7 files changed, 158 insertions, 38 deletions
diff --git a/gm/filterbitmap.cpp b/gm/filterbitmap.cpp index c858aff766..9e86b54c03 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"); ) diff --git a/resources/mandrill_128.png b/resources/mandrill_128.png Binary files differnew file mode 100644 index 0000000000..32f163773f --- /dev/null +++ b/resources/mandrill_128.png diff --git a/resources/mandrill_16.png b/resources/mandrill_16.png Binary files differnew file mode 100644 index 0000000000..e5703f52d6 --- /dev/null +++ b/resources/mandrill_16.png diff --git a/resources/mandrill_256.png b/resources/mandrill_256.png Binary files differnew file mode 100644 index 0000000000..0c6908424b --- /dev/null +++ b/resources/mandrill_256.png diff --git a/resources/mandrill_32.png b/resources/mandrill_32.png Binary files differnew file mode 100644 index 0000000000..c30e451d90 --- /dev/null +++ b/resources/mandrill_32.png diff --git a/resources/mandrill_512.png b/resources/mandrill_512.png Binary files differnew file mode 100644 index 0000000000..c2efb8108d --- /dev/null +++ b/resources/mandrill_512.png diff --git a/resources/mandrill_64.png b/resources/mandrill_64.png Binary files differnew file mode 100644 index 0000000000..d2e94cc891 --- /dev/null +++ b/resources/mandrill_64.png |