Index: gm/filterbitmap.cpp |
diff --git a/gm/filterbitmap.cpp b/gm/filterbitmap.cpp |
index c858aff76697b8f4dc88bec03a3204b026a45ece..f5c89e7d57bf3164f7b421e90fac616312d90379 100644 |
--- a/gm/filterbitmap.cpp |
+++ b/gm/filterbitmap.cpp |
@@ -11,33 +11,12 @@ |
#include "SkTypeface.h" |
#include "SkImageDecoder.h" |
+#include "lena_bytes.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())); |
@@ -69,11 +48,13 @@ class FilterBitmapGM : public skiagm::GM { |
return; |
} |
fOnce = true; |
- load_bm(&fBM); |
- |
+ |
+ 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,20 +63,29 @@ class FilterBitmapGM : public skiagm::GM { |
public: |
SkBitmap fBM; |
SkMatrix fMatrix[2]; |
- |
- FilterBitmapGM() : fOnce(false) { |
+ SkString fName; |
+ |
+ FilterBitmapGM(): |
+ fOnce(false) { |
this->setBGColor(0xFFDDDDDD); |
} |
+ void setName( const char name[] ) { |
+ fName = SkString(name); |
reed1
2013/05/29 19:26:04
alternative (slightly more efficient) : fName.set(
|
+ } |
+ |
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(); |
@@ -114,6 +104,150 @@ 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( int size ) |
+ : fSize( size ) |
+ { |
+ char name[1024]; |
+ sprintf( name, "filterbitmap_image_%d", fSize ); |
+ 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(); |
+ |
+ unsigned char *lena; |
+ switch( fSize ) { |
+ case 16: |
+ lena = lena_16; |
+ break; |
+ case 32: |
+ lena = lena_32; |
+ break; |
+ case 64: |
+ lena = lena_64; |
+ break; |
+ case 128: |
+ lena = lena_128; |
+ break; |
+ default: |
+ lena = NULL; |
+ break; |
+ } |
+ SkAutoLockPixels lock(fBM); |
+ for (int y = 0; y < fSize; y ++) { |
+ for (int x = 0; x < fSize; x ++) { |
+ SkPMColor* s = fBM.getAddr32(x, y); |
+ unsigned char *src = lena + 4*(y*fSize + x); |
+ *s = SkPreMultiplyARGB(src[3], src[0], src[1], src[2]); |
+ } |
+ } |
+ } |
+ 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(16); ) |
+DEF_GM( return new FilterBitmapImageGM(32); ) |
+DEF_GM( return new FilterBitmapImageGM(64); ) |
+DEF_GM( return new FilterBitmapImageGM(128); ) |