Index: gm/downsamplebitmap.cpp |
diff --git a/gm/filterbitmap.cpp b/gm/downsamplebitmap.cpp |
similarity index 50% |
copy from gm/filterbitmap.cpp |
copy to gm/downsamplebitmap.cpp |
index 0afcb951018847528adb76e8c61413aff8d0ace1..7f8a6babc41be0df6f98b8fa59b60f29ba1afe31 100644 |
--- a/gm/filterbitmap.cpp |
+++ b/gm/downsamplebitmap.cpp |
@@ -1,5 +1,5 @@ |
/* |
- * Copyright 2011 Google Inc. |
+ * Copyright 2013 Google Inc. |
* |
* Use of this source code is governed by a BSD-style license that can be |
* found in the LICENSE file. |
@@ -16,52 +16,17 @@ static void setTypeface(SkPaint* paint, const char name[], SkTypeface::Style sty |
SkSafeUnref(paint->setTypeface(SkTypeface::CreateFromName(name, style))); |
} |
-static SkSize computeSize(const SkBitmap& bm, const SkMatrix& mat) { |
- SkRect bounds = SkRect::MakeWH(SkIntToScalar(bm.width()), |
- SkIntToScalar(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::kHighQualityFilterBitmap_Flag); |
- canvas->translate(dx, 0); |
- canvas->drawBitmapMatrix(bm, mat, &paint); |
-} |
- |
-class FilterBitmapGM : public skiagm::GM { |
- void onOnceBeforeDraw() { |
- |
- make_bitmap(); |
- |
- SkScalar cx = SkScalarHalf(fBM.width()); |
- SkScalar cy = SkScalarHalf(fBM.height()); |
- SkScalar scale = get_scale(); |
- |
- |
- fMatrix[0].setScale(scale, scale); |
- fMatrix[1].setRotate(30, cx, cy); fMatrix[1].postScale(scale, scale); |
- } |
+class DownsampleBitmapGM : public skiagm::GM { |
public: |
SkBitmap fBM; |
- SkMatrix fMatrix[2]; |
SkString fName; |
- |
- FilterBitmapGM() |
+ bool fBitmapMade; |
+ |
+ DownsampleBitmapGM() |
{ |
this->setBGColor(0xFFDDDDDD); |
+ fBitmapMade = false; |
} |
void setName(const char name[]) { |
@@ -74,47 +39,63 @@ protected: |
} |
virtual SkISize onISize() SK_OVERRIDE { |
- return SkISize::Make(920, 480); |
+ make_bitmap_wrapper(); |
+ return SkISize::Make(4 * fBM.width(), fBM.height()); |
+ } |
+ |
+ void make_bitmap_wrapper() { |
+ if (!fBitmapMade) { |
+ fBitmapMade = true; |
+ make_bitmap(); |
+ } |
} |
virtual void make_bitmap() = 0; |
- virtual SkScalar get_scale() = 0; |
virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { |
- |
- 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); |
- } |
+ make_bitmap_wrapper(); |
+ |
+ int curX = 0; |
+ int curWidth; |
+ float curScale = 1; |
+ do { |
+ |
+ SkMatrix matrix; |
+ matrix.setScale( curScale, curScale ); |
+ |
+ SkPaint paint; |
+ paint.setFilterBitmap(true); |
+ paint.setFlags( paint.getFlags() | SkPaint::kHighQualityFilterBitmap_Flag ); |
+ |
+ canvas->save(); |
+ canvas->translate( curX, 0 ); |
+ canvas->drawBitmapMatrix( fBM, matrix, &paint ); |
+ canvas->restore(); |
+ |
+ curWidth = (int) (fBM.width() * curScale + 2); |
+ curX += curWidth; |
+ curScale *= 0.75; |
+ } while (curX < 4*fBM.width()); |
} |
private: |
typedef skiagm::GM INHERITED; |
}; |
-class FilterBitmapTextGM: public FilterBitmapGM { |
+class DownsampleBitmapTextGM: public DownsampleBitmapGM { |
public: |
- FilterBitmapTextGM(float textSize) |
+ DownsampleBitmapTextGM(float textSize) |
: fTextSize(textSize) |
{ |
char name[1024]; |
- sprintf(name, "filterbitmap_text_%.2fpt", fTextSize); |
+ sprintf(name, "downsamplebitmap_text_%.2fpt", fTextSize); |
setName(name); |
} |
protected: |
float fTextSize; |
- SkScalar get_scale() SK_OVERRIDE { |
- return 32.f/fTextSize; |
- } |
- |
- void make_bitmap() SK_OVERRIDE { |
+ virtual void make_bitmap() SK_OVERRIDE { |
fBM.setConfig(SkBitmap::kARGB_8888_Config, int(fTextSize * 8), int(fTextSize * 6)); |
fBM.allocPixels(); |
SkCanvas canvas(fBM); |
@@ -135,16 +116,16 @@ class FilterBitmapTextGM: public FilterBitmapGM { |
canvas.drawText("Hamburgefons", 12, fTextSize/2, 4.8f*fTextSize, paint); |
} |
private: |
- typedef FilterBitmapGM INHERITED; |
+ typedef DownsampleBitmapGM INHERITED; |
}; |
-class FilterBitmapCheckerboardGM: public FilterBitmapGM { |
+class DownsampleBitmapCheckerboardGM: public DownsampleBitmapGM { |
public: |
- FilterBitmapCheckerboardGM(int size, int num_checks) |
- : fSize(size), fNumChecks(num_checks) |
+ DownsampleBitmapCheckerboardGM(int size, int numChecks) |
+ : fSize(size), fNumChecks(numChecks) |
{ |
char name[1024]; |
- sprintf(name, "filterbitmap_checkerboard_%d_%d", fSize, fNumChecks); |
+ sprintf(name, "downsamplebitmap_checkerboard_%d_%d", fSize, fNumChecks); |
setName(name); |
} |
@@ -152,16 +133,12 @@ class FilterBitmapCheckerboardGM: public FilterBitmapGM { |
int fSize; |
int fNumChecks; |
- SkScalar get_scale() SK_OVERRIDE { |
- return 192.f/fSize; |
- } |
- |
- void make_bitmap() SK_OVERRIDE { |
+ virtual 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 ++) { |
+ 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; |
@@ -174,16 +151,16 @@ class FilterBitmapCheckerboardGM: public FilterBitmapGM { |
} |
} |
private: |
- typedef FilterBitmapGM INHERITED; |
+ typedef DownsampleBitmapGM INHERITED; |
}; |
-class FilterBitmapImageGM: public FilterBitmapGM { |
+class DownsampleBitmapImageGM: public DownsampleBitmapGM { |
public: |
- FilterBitmapImageGM(const char filename[]) |
+ DownsampleBitmapImageGM(const char filename[]) |
: fFilename(filename) |
{ |
char name[1024]; |
- sprintf(name, "filterbitmap_image_%s", filename); |
+ sprintf(name, "downsamplebitmap_image_%s", filename); |
setName(name); |
} |
@@ -191,11 +168,7 @@ class FilterBitmapImageGM: public FilterBitmapGM { |
SkString fFilename; |
int fSize; |
- SkScalar get_scale() SK_OVERRIDE { |
- return 192.f/fSize; |
- } |
- |
- void make_bitmap() SK_OVERRIDE { |
+ virtual void make_bitmap() SK_OVERRIDE { |
SkString path(skiagm::GM::gResourcePath); |
path.append("/"); |
path.append(fFilename); |
@@ -218,22 +191,11 @@ class FilterBitmapImageGM: public FilterBitmapGM { |
fSize = fBM.height(); |
} |
private: |
- typedef FilterBitmapGM INHERITED; |
+ typedef DownsampleBitmapGM INHERITED; |
}; |
////////////////////////////////////////////////////////////////////////////// |
-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"); ) |
+DEF_GM( return new DownsampleBitmapTextGM(72); ) |
+DEF_GM( return new DownsampleBitmapCheckerboardGM(512,256); ) |
+DEF_GM( return new DownsampleBitmapImageGM("mandrill_512.png"); ) |