Chromium Code Reviews| Index: gm/downsamplebitmap.cpp |
| diff --git a/gm/filterbitmap.cpp b/gm/downsamplebitmap.cpp |
| similarity index 54% |
| copy from gm/filterbitmap.cpp |
| copy to gm/downsamplebitmap.cpp |
| index 0afcb951018847528adb76e8c61413aff8d0ace1..0bad933dfb5187cba8f4ea2613ec218880143801 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); |
| + this->fBitmapMade = false; |
|
robertphillips
2013/07/12 19:42:31
no this-> on member variable access
humper
2013/07/12 21:12:03
Done.
|
| } |
| void setName(const char name[]) { |
| @@ -74,46 +39,62 @@ 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 = 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 { |
|
robertphillips
2013/07/12 19:42:31
add virtual
humper
2013/07/12 21:12:03
Done.
|
| fBM.setConfig(SkBitmap::kARGB_8888_Config, int(fTextSize * 8), int(fTextSize * 6)); |
| fBM.allocPixels(); |
| @@ -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) |
| + DownsampleBitmapCheckerboardGM(int size, int num_checks) |
|
robertphillips
2013/07/12 19:42:31
numChecks
humper
2013/07/12 21:12:03
Done.
|
| : fSize(size), fNumChecks(num_checks) |
| { |
| char name[1024]; |
| - sprintf(name, "filterbitmap_checkerboard_%d_%d", fSize, fNumChecks); |
| + sprintf(name, "downsamplebitmap_checkerboard_%d_%d", fSize, fNumChecks); |
| setName(name); |
| } |
| @@ -152,10 +133,6 @@ class FilterBitmapCheckerboardGM: public FilterBitmapGM { |
| int fSize; |
| int fNumChecks; |
| - SkScalar get_scale() SK_OVERRIDE { |
| - return 192.f/fSize; |
| - } |
| - |
| void make_bitmap() SK_OVERRIDE { |
|
robertphillips
2013/07/12 19:42:31
virtual
humper
2013/07/12 21:12:03
Done.
|
| fBM.setConfig(SkBitmap::kARGB_8888_Config, fSize, fSize); |
| fBM.allocPixels(); |
| @@ -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,10 +168,6 @@ class FilterBitmapImageGM: public FilterBitmapGM { |
| SkString fFilename; |
| int fSize; |
| - SkScalar get_scale() SK_OVERRIDE { |
| - return 192.f/fSize; |
| - } |
| - |
| void make_bitmap() SK_OVERRIDE { |
|
robertphillips
2013/07/12 19:42:31
virtual
humper
2013/07/12 21:12:03
Done.
|
| SkString path(skiagm::GM::gResourcePath); |
| path.append("/"); |
| @@ -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"); ) |