diff options
author | 2013-07-24 14:31:33 +0000 | |
---|---|---|
committer | 2013-07-24 14:31:33 +0000 | |
commit | d94697c21ae479df4190a1afbf08d85ce244a4ef (patch) | |
tree | 3a8170934ed3aa549e0d9a2a3f8eb22f2c9640e7 /samplecode | |
parent | 58c856a54a75e703aa3c82a0cd4e1affd9bd8ffc (diff) |
add mipmaps to scaledimagecache
BUG=
Review URL: https://codereview.chromium.org/19789016
git-svn-id: http://skia.googlecode.com/svn/trunk@10305 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'samplecode')
-rw-r--r-- | samplecode/SampleMipMap.cpp | 90 |
1 files changed, 16 insertions, 74 deletions
diff --git a/samplecode/SampleMipMap.cpp b/samplecode/SampleMipMap.cpp index e93636d472..700235d025 100644 --- a/samplecode/SampleMipMap.cpp +++ b/samplecode/SampleMipMap.cpp @@ -67,84 +67,26 @@ protected: return this->INHERITED::onQuery(evt); } - void drawN(SkCanvas* canvas, const SkBitmap& bitmap) { - SkAutoCanvasRestore acr(canvas, true); - for (int i = N; i > 1; i >>= 1) { - canvas->drawBitmap(bitmap, 0, 0, NULL); - canvas->translate(SkIntToScalar(N + 8), 0); - canvas->scale(SK_ScalarHalf, SK_ScalarHalf); - } - } - - void drawN2(SkCanvas* canvas, const SkBitmap& bitmap) { - SkBitmap bg; - bg.setConfig(SkBitmap::kARGB_8888_Config, N, N); - bg.allocPixels(); - - SkAutoCanvasRestore acr(canvas, true); - for (int i = 0; i < 6; i++) { - bg.eraseColor(SK_ColorTRANSPARENT); - SkCanvas c(bg); - c.scale(SK_Scalar1 / (1 << i), SK_Scalar1 / (1 << i)); - c.drawBitmap(bitmap, 0, 0, NULL); - - canvas->save(); - canvas->scale(SkIntToScalar(1 << i), SkIntToScalar(1 << i)); - canvas->drawBitmap(bg, 0, 0, NULL); - canvas->restore(); - canvas->translate(SkIntToScalar(N + 8), 0); - } - } - virtual void onDrawContent(SkCanvas* canvas) { this->init(); - canvas->translate(SkIntToScalar(10), SkIntToScalar(10)); - - canvas->scale(1.00000001f, 0.9999999f); - - drawN2(canvas, fBitmap); - - canvas->translate(0, SkIntToScalar(N + 8)); - SkBitmap bitmap(fBitmap); - bitmap.buildMipMap(); - drawN2(canvas, bitmap); - - SkScalar time = SampleCode::GetAnimScalar(SkIntToScalar(1)/4, - SkIntToScalar(2)); - if (time >= SK_Scalar1) { - time = SkIntToScalar(2) - time; - } - fWidth = 8 + SkScalarRound(N * time); - - SkRect dst; - dst.set(0, 0, SkIntToScalar(fWidth), SkIntToScalar(fWidth)); + + static const SkPaint::FilterLevel gLevel[] = { + SkPaint::kNone_FilterLevel, + SkPaint::kLow_FilterLevel, + SkPaint::kMedium_FilterLevel, + SkPaint::kHigh_FilterLevel, + }; SkPaint paint; - paint.setFilterBitmap(true); - paint.setAntiAlias(true); - - canvas->translate(0, SkIntToScalar(N + 8)); - canvas->drawBitmapRect(fBitmap, NULL, dst, NULL); - canvas->translate(SkIntToScalar(N + 8), 0); - canvas->drawBitmapRect(fBitmap, NULL, dst, &paint); - canvas->translate(-SkIntToScalar(N + 8), SkIntToScalar(N + 8)); - canvas->drawBitmapRect(bitmap, NULL, dst, NULL); - canvas->translate(SkIntToScalar(N + 8), 0); - canvas->drawBitmapRect(bitmap, NULL, dst, &paint); - - SkShader* s = SkShader::CreateBitmapShader(bitmap, - SkShader::kRepeat_TileMode, - SkShader::kRepeat_TileMode); - paint.setShader(s)->unref(); - SkMatrix m; - m.setScale(SkIntToScalar(fWidth) / N, - SkIntToScalar(fWidth) / N); - s->setLocalMatrix(m); - SkRect r; - r.set(0, 0, SkIntToScalar(4*N), SkIntToScalar(5*N/2)); - r.offset(SkIntToScalar(N + 12), -SkIntToScalar(N + 4)); - canvas->drawRect(r, paint); - + + for (size_t i = 0; i < SK_ARRAY_COUNT(gLevel); ++i) { + SkScalar x = 10 + i * 100; + SkScalar y = 10; + + paint.setFilterLevel(gLevel[i]); + + canvas->drawBitmap(fBitmap, x, y, &paint); + } this->inval(NULL); } |