| Index: tests/ImageFilterTest.cpp
|
| diff --git a/tests/ImageFilterTest.cpp b/tests/ImageFilterTest.cpp
|
| index 22f63b7c7016c37714ec2ee1bd16f5b1705eaa11..a1d7a50f05728cd34fcc53638465b29852e2df0c 100644
|
| --- a/tests/ImageFilterTest.cpp
|
| +++ b/tests/ImageFilterTest.cpp
|
| @@ -16,11 +16,13 @@
|
| #include "SkDeviceImageFilterProxy.h"
|
| #include "SkDisplacementMapEffect.h"
|
| #include "SkDropShadowImageFilter.h"
|
| +#include "SkFlattenableBuffers.h"
|
| #include "SkLightingImageFilter.h"
|
| #include "SkMatrixConvolutionImageFilter.h"
|
| #include "SkMergeImageFilter.h"
|
| #include "SkMorphologyImageFilter.h"
|
| #include "SkOffsetImageFilter.h"
|
| +#include "SkPicture.h"
|
| #include "SkRect.h"
|
| #include "SkTileImageFilter.h"
|
| #include "SkXfermodeImageFilter.h"
|
| @@ -33,6 +35,40 @@
|
|
|
| static const int kBitmapSize = 4;
|
|
|
| +namespace {
|
| +
|
| +class MatrixTestImageFilter : public SkImageFilter {
|
| +public:
|
| + MatrixTestImageFilter(skiatest::Reporter* reporter, const SkMatrix& expectedMatrix)
|
| + : SkImageFilter(0), fReporter(reporter), fExpectedMatrix(expectedMatrix) {
|
| + }
|
| +
|
| + virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix& ctm,
|
| + SkBitmap* result, SkIPoint* offset) SK_OVERRIDE {
|
| + REPORTER_ASSERT(fReporter, ctm == fExpectedMatrix);
|
| + return true;
|
| + }
|
| +
|
| + SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(MatrixTestImageFilter)
|
| +
|
| +protected:
|
| + explicit MatrixTestImageFilter(SkReadBuffer& buffer) : SkImageFilter(0) {
|
| + fReporter = static_cast<skiatest::Reporter*>(buffer.readFunctionPtr());
|
| + buffer.readMatrix(&fExpectedMatrix);
|
| + }
|
| +
|
| + virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE {
|
| + buffer.writeFunctionPtr(fReporter);
|
| + buffer.writeMatrix(fExpectedMatrix);
|
| + }
|
| +
|
| +private:
|
| + skiatest::Reporter* fReporter;
|
| + SkMatrix fExpectedMatrix;
|
| +};
|
| +
|
| +}
|
| +
|
| static void make_small_bitmap(SkBitmap& bitmap) {
|
| bitmap.setConfig(SkBitmap::kARGB_8888_Config, kBitmapSize, kBitmapSize);
|
| bitmap.allocPixels();
|
| @@ -230,6 +266,39 @@ DEF_TEST(ImageFilterCropRect, reporter) {
|
| test_crop_rects(&device, reporter);
|
| }
|
|
|
| +DEF_TEST(ImageFilterMatrixTest, reporter) {
|
| + SkBitmap temp;
|
| + temp.setConfig(SkBitmap::kARGB_8888_Config, 100, 100);
|
| + temp.allocPixels();
|
| + SkBitmapDevice device(temp);
|
| + SkCanvas canvas(&device);
|
| + canvas.scale(SkIntToScalar(2), SkIntToScalar(2));
|
| +
|
| + SkMatrix expectedMatrix = canvas.getTotalMatrix();
|
| +
|
| + SkPicture picture;
|
| + SkCanvas* recordingCanvas = picture.beginRecording(100, 100,
|
| + SkPicture::kOptimizeForClippedPlayback_RecordingFlag);
|
| +
|
| + SkPaint paint;
|
| + SkAutoTUnref<MatrixTestImageFilter> imageFilter(
|
| + new MatrixTestImageFilter(reporter, expectedMatrix));
|
| + paint.setImageFilter(imageFilter.get());
|
| + SkCanvas::SaveFlags saveFlags = static_cast<SkCanvas::SaveFlags>(
|
| + SkCanvas::kHasAlphaLayer_SaveFlag | SkCanvas::kFullColorLayer_SaveFlag);
|
| + recordingCanvas->saveLayer(NULL, &paint, saveFlags);
|
| + SkPaint solidPaint;
|
| + solidPaint.setColor(0xFFFFFFFF);
|
| + recordingCanvas->save();
|
| + recordingCanvas->scale(SkIntToScalar(10), SkIntToScalar(10));
|
| + recordingCanvas->drawRect(SkRect::Make(SkIRect::MakeWH(100, 100)), solidPaint);
|
| + recordingCanvas->restore(); // scale
|
| + recordingCanvas->restore(); // saveLayer
|
| + picture.endRecording();
|
| +
|
| + canvas.drawPicture(picture);
|
| +}
|
| +
|
| #if SK_SUPPORT_GPU
|
| DEF_GPUTEST(ImageFilterCropRectGPU, reporter, factory) {
|
| GrContext* context = factory->get(static_cast<GrContextFactory::GLContextType>(0));
|
|
|