sk_sp<SkShader> SkMakeBitmapShader(const SkBitmap& src, SkShader::TileMode tmx, SkShader::TileMode tmy, const SkMatrix* localMatrix, SkTBlitterAllocator* allocator) { SkShader* shader; SkColor color; if (src.isNull() || bitmap_is_too_big(src)) { if (nullptr == allocator) { shader = new SkEmptyShader; } else { shader = allocator->createT<SkEmptyShader>(); } } else if (can_use_color_shader(src, &color)) { if (nullptr == allocator) { shader = new SkColorShader(color); } else { shader = allocator->createT<SkColorShader>(color); } } else { if (nullptr == allocator) { shader = new SkBitmapProcShader(src, tmx, tmy, localMatrix); } else { shader = allocator->createT<SkBitmapProcShader>(src, tmx, tmy, localMatrix); } } return sk_sp<SkShader>(shader); }
SkShader* SkCreateBitmapShader(const SkBitmap& src, SkShader::TileMode tmx, SkShader::TileMode tmy, const SkMatrix* localMatrix, SkTBlitterAllocator* allocator) { SkShader* shader; SkColor color; if (src.isNull() || bitmap_is_too_big(src)) { if (NULL == allocator) { shader = SkNEW(SkEmptyShader); } else { shader = allocator->createT<SkEmptyShader>(); } } else if (can_use_color_shader(src, &color)) { if (NULL == allocator) { shader = SkNEW_ARGS(SkColorShader, (color)); } else { shader = allocator->createT<SkColorShader>(color); } } else { if (NULL == allocator) { shader = SkNEW_ARGS(SkBitmapProcShader, (src, tmx, tmy, localMatrix)); } else { shader = allocator->createT<SkBitmapProcShader>(src, tmx, tmy, localMatrix); } } return shader; }
sk_sp<SkShader> SkImageShader::Make(const SkImage* image, TileMode tx, TileMode ty, const SkMatrix* localMatrix, SkTBlitterAllocator* allocator) { SkShader* shader; SkColor color; if (!image || bitmap_is_too_big(image->width(), image->height())) { if (nullptr == allocator) { shader = new SkEmptyShader; } else { shader = allocator->createT<SkEmptyShader>(); } } else if (can_use_color_shader(image, &color)) { if (nullptr == allocator) { shader = new SkColorShader(color); } else { shader = allocator->createT<SkColorShader>(color); } } else { if (nullptr == allocator) { shader = new SkImageShader(image, tx, ty, localMatrix); } else { shader = allocator->createT<SkImageShader>(image, tx, ty, localMatrix); } } return sk_sp<SkShader>(shader); }
sk_sp<SkShader> SkImageShader::Make(sk_sp<SkImage> image, TileMode tx, TileMode ty, const SkMatrix* localMatrix, bool clampAsIfUnpremul) { if (!image || bitmap_is_too_big(image->width(), image->height())) { return sk_make_sp<SkEmptyShader>(); } return sk_sp<SkShader>{ new SkImageShader(image, tx,ty, localMatrix, clampAsIfUnpremul) }; }