12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /*
- * Copyright 2016 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #include "include/core/SkBitmap.h"
- #include "include/core/SkCanvas.h"
- #include "include/core/SkData.h"
- #include "include/core/SkImage.h"
- #include "include/core/SkRRect.h"
- #include "include/core/SkShader.h"
- #include "include/core/SkSurface.h"
- #include "include/effects/SkPerlinNoiseShader.h"
- #include "tests/Test.h"
- static void check_isaimage(skiatest::Reporter* reporter, SkShader* shader,
- int expectedW, int expectedH,
- SkTileMode expectedX, SkTileMode expectedY,
- const SkMatrix& expectedM) {
- SkTileMode tileModes[2];
- SkMatrix localM;
- // wack these so we don't get a false positive
- localM.setScale(9999, -9999);
- tileModes[0] = tileModes[1] = (SkTileMode)99;
- SkImage* image = shader->isAImage(&localM, tileModes);
- REPORTER_ASSERT(reporter, image);
- REPORTER_ASSERT(reporter, image->width() == expectedW);
- REPORTER_ASSERT(reporter, image->height() == expectedH);
- REPORTER_ASSERT(reporter, localM == expectedM);
- REPORTER_ASSERT(reporter, tileModes[0] == expectedX);
- REPORTER_ASSERT(reporter, tileModes[1] == expectedY);
- }
- DEF_TEST(Shader_isAImage, reporter) {
- const int W = 100;
- const int H = 100;
- SkBitmap bm;
- bm.allocN32Pixels(W, H);
- auto img = SkImage::MakeFromBitmap(bm);
- const SkMatrix localM = SkMatrix::MakeScale(2, 3);
- const SkTileMode tmx = SkTileMode::kRepeat;
- const SkTileMode tmy = SkTileMode::kMirror;
- auto shader0 = bm.makeShader(tmx, tmy, &localM);
- auto shader1 = SkImage::MakeFromBitmap(bm)->makeShader(tmx, tmy, &localM);
- check_isaimage(reporter, shader0.get(), W, H, tmx, tmy, localM);
- check_isaimage(reporter, shader1.get(), W, H, tmx, tmy, localM);
- }
- // Make sure things are ok with just a single leg.
- DEF_TEST(ComposeShaderSingle, reporter) {
- SkBitmap srcBitmap;
- srcBitmap.allocN32Pixels(10, 10);
- srcBitmap.eraseColor(SK_ColorRED);
- SkCanvas canvas(srcBitmap);
- SkPaint p;
- p.setShader(
- SkShaders::Blend(SkBlendMode::kClear,
- SkShaders::Empty(),
- SkPerlinNoiseShader::MakeFractalNoise(1.0f, 1.0f, 2, 0.0f)));
- SkRRect rr;
- SkVector rd[] = {{0, 0}, {0, 0}, {0, 0}, {0, 0}};
- rr.setRectRadii({0, 0, 0, 0}, rd);
- canvas.drawRRect(rr, p);
- }
|