aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/CanvasTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/CanvasTest.cpp')
-rw-r--r--tests/CanvasTest.cpp50
1 files changed, 49 insertions, 1 deletions
diff --git a/tests/CanvasTest.cpp b/tests/CanvasTest.cpp
index 9b1e0c9bbb..e83777ba96 100644
--- a/tests/CanvasTest.cpp
+++ b/tests/CanvasTest.cpp
@@ -61,10 +61,11 @@
#include "SkRect.h"
#include "SkRegion.h"
#include "SkShader.h"
+#include "SkSpecialImage.h"
#include "SkStream.h"
#include "SkSurface.h"
-#include "SkTemplates.h"
#include "SkTDArray.h"
+#include "SkTemplates.h"
#include "SkVertices.h"
#include "Test.h"
@@ -812,3 +813,50 @@ DEF_TEST(Canvas_LegacyColorBehavior, r) {
REPORTER_ASSERT(r, SK_ColorRED == SkSwizzle_BGRA_to_PMColor(*bitmap.getAddr32(0, 0)));
}
#endif
+
+namespace {
+
+class ZeroBoundsImageFilter : public SkImageFilter {
+public:
+ static sk_sp<SkImageFilter> Make() { return sk_sp<SkImageFilter>(new ZeroBoundsImageFilter); }
+
+ SK_TO_STRING_OVERRIDE()
+ SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(ZeroBoundsImageFilter)
+
+protected:
+ sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage*, const Context&, SkIPoint*) const override {
+ return nullptr;
+ }
+ sk_sp<SkImageFilter> onMakeColorSpace(SkColorSpaceXformer*) const override { return nullptr; }
+ SkIRect onFilterNodeBounds(const SkIRect&, const SkMatrix&, MapDirection) const override {
+ return SkIRect::MakeEmpty();
+ }
+
+private:
+ ZeroBoundsImageFilter() : INHERITED(nullptr, 0, nullptr) {}
+
+ typedef SkImageFilter INHERITED;
+};
+
+sk_sp<SkFlattenable> ZeroBoundsImageFilter::CreateProc(SkReadBuffer& buffer) {
+ SkDEBUGFAIL("Should never get here");
+ return nullptr;
+}
+
+#ifndef SK_IGNORE_TO_STRING
+void ZeroBoundsImageFilter::toString(SkString* str) const {
+ str->appendf("ZeroBoundsImageFilter: ()");
+}
+#endif
+
+} // anonymous namespace
+
+DEF_TEST(Canvas_SaveLayerWithNullBoundsAndZeroBoundsImageFilter, r) {
+ SkCanvas canvas(10, 10);
+ SkPaint p;
+ p.setImageFilter(ZeroBoundsImageFilter::Make());
+ // This should not fail any assert.
+ canvas.saveLayer(nullptr, &p);
+ REPORTER_ASSERT(r, canvas.getDeviceClipBounds().isEmpty());
+ canvas.restore();
+}