/* * Copyright 2011 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "Test.h" #include "SkBitmap.h" #include "SkCanvas.h" static void test_isDrawingToLayer(skiatest::Reporter* reporter) { SkBitmap bm; bm.setConfig(SkBitmap::kARGB_8888_Config, 256, 256); bm.allocPixels(); SkCanvas canvas(bm); REPORTER_ASSERT(reporter, !canvas.isDrawingToLayer()); canvas.save(); REPORTER_ASSERT(reporter, !canvas.isDrawingToLayer()); const SkRect* bounds = NULL; // null means include entire bounds const SkPaint* paint = NULL; canvas.saveLayer(bounds, paint); REPORTER_ASSERT(reporter, canvas.isDrawingToLayer()); canvas.restore(); REPORTER_ASSERT(reporter, !canvas.isDrawingToLayer()); canvas.saveLayer(bounds, paint); canvas.saveLayer(bounds, paint); REPORTER_ASSERT(reporter, canvas.isDrawingToLayer()); canvas.restore(); REPORTER_ASSERT(reporter, canvas.isDrawingToLayer()); canvas.restore(); // now layer count should be 0 REPORTER_ASSERT(reporter, !canvas.isDrawingToLayer()); } static void TestCanvas(skiatest::Reporter* reporter) { SkBitmap bm; bm.setConfig(SkBitmap::kARGB_8888_Config, 256, 256); bm.allocPixels(); SkCanvas canvas(bm); int n; REPORTER_ASSERT(reporter, 1 == canvas.getSaveCount()); n = canvas.save(); REPORTER_ASSERT(reporter, 1 == n); REPORTER_ASSERT(reporter, 2 == canvas.getSaveCount()); canvas.save(); canvas.save(); REPORTER_ASSERT(reporter, 4 == canvas.getSaveCount()); canvas.restoreToCount(2); REPORTER_ASSERT(reporter, 2 == canvas.getSaveCount()); // should this pin to 1, or be a no-op, or crash? canvas.restoreToCount(0); REPORTER_ASSERT(reporter, 1 == canvas.getSaveCount()); test_isDrawingToLayer(reporter); } #include "TestClassDef.h" DEFINE_TESTCLASS("Canvas", TestCanvasClass, TestCanvas)