[canvaskit] Add createPattern support to canvasAPI
Add Changelog to start tracking API changes (in preparation
for NPM)
Simplify globalAlpha passing.
API change:
- Make ImageShader take an SkImage instead of encoded bytes.
Bug: skia:
Change-Id: I716f001b54ed58da3f40ae4e060b7098b550af9f
Reviewed-on: https://skia-review.googlesource.com/c/175260
Reviewed-by: Florin Malita <fmalita@chromium.org>
diff --git a/experimental/canvaskit/canvaskit_bindings.cpp b/experimental/canvaskit/canvaskit_bindings.cpp
index abd9260..52932e9 100644
--- a/experimental/canvaskit/canvaskit_bindings.cpp
+++ b/experimental/canvaskit/canvaskit_bindings.cpp
@@ -489,21 +489,19 @@
return SkImage::MakeRasterData(info, pixelData, rowBytes);
}), allow_raw_pointers());
- function("_MakeImageShader", optional_override([](uintptr_t /* uint8_t* */ iPtr, int ilen,
- SkShader::TileMode tx, SkShader::TileMode ty)->sk_sp<SkShader> {
- // See comment above for uintptr_t explanation
- const uint8_t* imgBytes = reinterpret_cast<const uint8_t*>(iPtr);
-
- auto imgData = SkData::MakeFromMalloc(imgBytes, ilen);
- auto img = SkImage::MakeFromEncoded(imgData);
- if (!img) {
- SkDebugf("Could not decode image\n");
- return nullptr;
- }
-
- return SkImageShader::Make(img, tx, ty, nullptr);
+ // Allow localMatrix to be optional, so we have 2 declarations of these shaders
+ function("_MakeImageShader", optional_override([](sk_sp<SkImage> img,
+ SkShader::TileMode tx, SkShader::TileMode ty,
+ bool clampAsIfUnpremul)->sk_sp<SkShader> {
+ return SkImageShader::Make(img, tx, ty, nullptr, clampAsIfUnpremul);
}), allow_raw_pointers());
- // Allow localMatrix to be optional, so we have 2 declarations of these gradients
+ function("_MakeImageShader", optional_override([](sk_sp<SkImage> img,
+ SkShader::TileMode tx, SkShader::TileMode ty,
+ bool clampAsIfUnpremul, const SimpleMatrix& lm)->sk_sp<SkShader> {
+ SkMatrix localMatrix = toSkMatrix(lm);
+
+ return SkImageShader::Make(img, tx, ty, &localMatrix, clampAsIfUnpremul);
+ }), allow_raw_pointers());
function("_MakeLinearGradientShader", optional_override([](SkPoint start, SkPoint end,
uintptr_t /* SkColor* */ cPtr, uintptr_t /* SkScalar* */ pPtr,
int count, SkShader::TileMode mode, uint32_t flags)->sk_sp<SkShader> {
@@ -901,7 +899,9 @@
enum_<SkShader::TileMode>("TileMode")
.value("Clamp", SkShader::TileMode::kClamp_TileMode)
.value("Repeat", SkShader::TileMode::kRepeat_TileMode)
- .value("Mirror", SkShader::TileMode::kMirror_TileMode);
+ .value("Mirror", SkShader::TileMode::kMirror_TileMode)
+ // Decal mode only works in the SW backend, not WebGl (yet).
+ .value("Decal", SkShader::TileMode::kDecal_TileMode);
enum_<SkVertices::VertexMode>("VertexMode")
.value("Triangles", SkVertices::VertexMode::kTriangles_VertexMode)