Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright 2006 The Android Open Source Project | 2 * Copyright 2006 The Android Open Source Project |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #ifndef SkShader_DEFINED | 8 #ifndef SkShader_DEFINED |
| 9 #define SkShader_DEFINED | 9 #define SkShader_DEFINED |
| 10 | 10 |
| 11 #include "SkBitmap.h" | 11 #include "SkBitmap.h" |
| 12 #include "SkFlattenable.h" | 12 #include "SkFlattenable.h" |
| 13 #include "SkImageInfo.h" | 13 #include "SkImageInfo.h" |
| 14 #include "SkMask.h" | 14 #include "SkMask.h" |
| 15 #include "SkMatrix.h" | 15 #include "SkMatrix.h" |
| 16 #include "SkPaint.h" | 16 #include "SkPaint.h" |
| 17 #include "../gpu/GrColor.h" | 17 #include "../gpu/GrColor.h" |
| 18 | 18 |
| 19 class SkColorFilter; | 19 class SkColorFilter; |
| 20 class SkPath; | 20 class SkPath; |
| 21 class SkPicture; | 21 class SkPicture; |
| 22 class SkXfermode; | 22 class SkXfermode; |
| 23 class GrContext; | 23 class GrContext; |
| 24 class GrFragmentProcessor; | 24 class GrFragmentProcessor; |
| 25 | 25 |
| 26 //#define SK_SUPPORT_LEGACY_CREATESHADER_PTR | |
| 27 | |
| 26 /** \class SkShader | 28 /** \class SkShader |
| 27 * | 29 * |
| 28 * Shaders specify the source color(s) for what is being drawn. If a paint | 30 * Shaders specify the source color(s) for what is being drawn. If a paint |
| 29 * has no shader, then the paint's color is used. If the paint has a | 31 * has no shader, then the paint's color is used. If the paint has a |
| 30 * shader, then the shader's color(s) are use instead, but they are | 32 * shader, then the shader's color(s) are use instead, but they are |
| 31 * modulated by the paint's alpha. This makes it easy to create a shader | 33 * modulated by the paint's alpha. This makes it easy to create a shader |
| 32 * once (e.g. bitmap tiling or gradient) and then change its transparency | 34 * once (e.g. bitmap tiling or gradient) and then change its transparency |
| 33 * w/o having to modify the original shader... only the paint's alpha needs | 35 * w/o having to modify the original shader... only the paint's alpha needs |
| 34 * to be modified. | 36 * to be modified. |
| 35 */ | 37 */ |
| (...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 328 * the colorfilter. | 330 * the colorfilter. |
| 329 */ | 331 */ |
| 330 SkShader* newWithColorFilter(SkColorFilter*) const; | 332 SkShader* newWithColorFilter(SkColorFilter*) const; |
| 331 | 333 |
| 332 ////////////////////////////////////////////////////////////////////////// | 334 ////////////////////////////////////////////////////////////////////////// |
| 333 // Factory methods for stock shaders | 335 // Factory methods for stock shaders |
| 334 | 336 |
| 335 /** | 337 /** |
| 336 * Call this to create a new "empty" shader, that will not draw anything. | 338 * Call this to create a new "empty" shader, that will not draw anything. |
| 337 */ | 339 */ |
| 338 static SkShader* CreateEmptyShader(); | 340 static sk_sp<SkShader> MakeEmptyShader(); |
| 339 | 341 |
| 340 /** | 342 /** |
| 341 * Call this to create a new shader that just draws the specified color. Th is should always | 343 * Call this to create a new shader that just draws the specified color. Th is should always |
| 342 * draw the same as a paint with this color (and no shader). | 344 * draw the same as a paint with this color (and no shader). |
| 343 */ | 345 */ |
| 344 static SkShader* CreateColorShader(SkColor); | 346 static sk_sp<SkShader> MakeColorShader(SkColor); |
| 345 | 347 |
| 346 static SkShader* CreateComposeShader(SkShader* dst, SkShader* src, SkXfermod e::Mode); | 348 static sk_sp<SkShader> MakeComposeShader(sk_sp<SkShader> dst, sk_sp<SkShader > src, |
| 349 SkXfermode::Mode); | |
| 350 | |
| 351 #ifdef SK_SUPPORT_LEGACY_CREATESHADER_PTR | |
|
mtklein
2016/03/08 14:49:11
Wanna make it one more step general to cover all C
reed1
2016/03/08 15:15:19
Could. My thought had been that the effort was so
| |
| 352 static SkShader* CreateEmptyShader() { return MakeEmptyShader().release(); } | |
| 353 static SkShader* CreateColorShader(SkColor c) { return MakeColorShader(c).re lease(); } | |
| 354 static SkShader* CreateComposeShader(SkShader* dst, SkShader* src, SkXfermod e::Mode mode) { | |
| 355 return MakeComposeShader(dst, src, mode).release(); | |
| 356 } | |
| 357 static SkShader* CreateComposeShader(SkShader* dst, SkShader* src, SkXfermod e* xfer) { | |
| 358 return MakeComposeShader(dst, src, xfer).release(); | |
| 359 } | |
| 360 static SkShader* CreateBitmapShader(const SkBitmap& src, TileMode tmx, TileM ode tmy, | |
| 361 const SkMatrix* localMatrix = nullptr) { | |
| 362 return MakeBitmapShader(src, tmx, tmy, localMatrix).release(); | |
| 363 } | |
| 364 static SkShader* CreatePictureShader(const SkPicture* src, TileMode tmx, Til eMode tmy, | |
| 365 const SkMatrix* localMatrix, const SkRe ct* tile) { | |
| 366 return MakePictureShader(src, tmx, tmy, localMatrix, tile).release(); | |
| 367 } | |
| 368 #endif | |
| 347 | 369 |
| 348 /** | 370 /** |
| 349 * Create a new compose shader, given shaders dst, src, and a combining xfe rmode mode. | 371 * Create a new compose shader, given shaders dst, src, and a combining xfe rmode mode. |
| 350 * The xfermode is called with the output of the two shaders, and its outpu t is returned. | 372 * The xfermode is called with the output of the two shaders, and its outpu t is returned. |
| 351 * If xfer is null, SkXfermode::kSrcOver_Mode is assumed. | 373 * If xfer is null, SkXfermode::kSrcOver_Mode is assumed. |
| 352 * | 374 * |
| 353 * Ownership of the shaders, and the xfermode if not null, is not transfere d, so the caller | 375 * Ownership of the shaders, and the xfermode if not null, is not transfere d, so the caller |
|
f(malita)
2016/03/08 15:50:35
Is the ownership comment still useful?
reed1
2016/03/08 20:17:15
Nope. Will remove.
| |
| 354 * is still responsible for managing its reference-count for those objects. | 376 * is still responsible for managing its reference-count for those objects. |
| 355 */ | 377 */ |
| 356 static SkShader* CreateComposeShader(SkShader* dst, SkShader* src, SkXfermod e* xfer); | 378 static sk_sp<SkShader> MakeComposeShader(sk_sp<SkShader> dst, sk_sp<SkShader > src, |
| 379 SkXfermode* xfer); | |
| 357 | 380 |
| 358 /** Call this to create a new shader that will draw with the specified bitma p. | 381 /** Call this to create a new shader that will draw with the specified bitma p. |
| 359 * | 382 * |
| 360 * If the bitmap cannot be used (e.g. has no pixels, or its dimensions | 383 * If the bitmap cannot be used (e.g. has no pixels, or its dimensions |
| 361 * exceed implementation limits (currently at 64K - 1)) then SkEmptyShader | 384 * exceed implementation limits (currently at 64K - 1)) then SkEmptyShader |
| 362 * may be returned. | 385 * may be returned. |
| 363 * | 386 * |
| 364 * If the src is kA8_Config then that mask will be colorized using the colo r on | 387 * If the src is kA8_Config then that mask will be colorized using the colo r on |
| 365 * the paint. | 388 * the paint. |
| 366 * | 389 * |
| 367 * @param src The bitmap to use inside the shader | 390 * @param src The bitmap to use inside the shader |
| 368 * @param tmx The tiling mode to use when sampling the bitmap in the x-dir ection. | 391 * @param tmx The tiling mode to use when sampling the bitmap in the x-dir ection. |
| 369 * @param tmy The tiling mode to use when sampling the bitmap in the y-dir ection. | 392 * @param tmy The tiling mode to use when sampling the bitmap in the y-dir ection. |
| 370 * @return Returns a new shader object. Note: this function never retur ns null. | 393 * @return Returns a new shader object. Note: this function never retur ns null. |
| 371 */ | 394 */ |
| 372 static SkShader* CreateBitmapShader(const SkBitmap& src, | 395 static sk_sp<SkShader> MakeBitmapShader(const SkBitmap& src, TileMode tmx, T ileMode tmy, |
| 373 TileMode tmx, TileMode tmy, | 396 const SkMatrix* localMatrix = nullpt r); |
| 374 const SkMatrix* localMatrix = NULL); | |
| 375 | 397 |
| 376 // NOTE: You can create an SkImage Shader with SkImage::newShader(). | 398 // NOTE: You can create an SkImage Shader with SkImage::newShader(). |
| 377 | 399 |
| 378 /** Call this to create a new shader that will draw with the specified pictu re. | 400 /** Call this to create a new shader that will draw with the specified pictu re. |
| 379 * | 401 * |
| 380 * @param src The picture to use inside the shader (if not NULL, its ref c ount | 402 * @param src The picture to use inside the shader (if not NULL, its ref c ount |
| 381 * is incremented). The SkPicture must not be changed after | 403 * is incremented). The SkPicture must not be changed after |
| 382 * successfully creating a picture shader. | 404 * successfully creating a picture shader. |
| 383 * @param tmx The tiling mode to use when sampling the bitmap in the x-dir ection. | 405 * @param tmx The tiling mode to use when sampling the bitmap in the x-dir ection. |
| 384 * @param tmy The tiling mode to use when sampling the bitmap in the y-dir ection. | 406 * @param tmy The tiling mode to use when sampling the bitmap in the y-dir ection. |
| 385 * @param tile The tile rectangle in picture coordinates: this represents t he subset | 407 * @param tile The tile rectangle in picture coordinates: this represents t he subset |
| 386 * (or superset) of the picture used when building a tile. It i s not | 408 * (or superset) of the picture used when building a tile. It i s not |
| 387 * affected by localMatrix and does not imply scaling (only tra nslation | 409 * affected by localMatrix and does not imply scaling (only tra nslation |
| 388 * and cropping). If null, the tile rect is considered equal to the picture | 410 * and cropping). If null, the tile rect is considered equal to the picture |
| 389 * bounds. | 411 * bounds. |
| 390 * @return Returns a new shader object. Note: this function never retur ns null. | 412 * @return Returns a new shader object. Note: this function never retur ns null. |
| 391 */ | 413 */ |
| 392 static SkShader* CreatePictureShader(const SkPicture* src, | 414 static sk_sp<SkShader> MakePictureShader(const SkPicture* src, TileMode tmx, TileMode tmy, |
| 393 TileMode tmx, TileMode tmy, | 415 const SkMatrix* localMatrix, const SkRect* tile); |
| 394 const SkMatrix* localMatrix, | |
| 395 const SkRect* tile); | |
| 396 | 416 |
| 397 /** | 417 /** |
| 398 * If this shader can be represented by another shader + a localMatrix, ret urn that shader | 418 * If this shader can be represented by another shader + a localMatrix, ret urn that shader |
| 399 * and, if not NULL, the localMatrix. If not, return NULL and ignore the lo calMatrix parameter. | 419 * and, if not NULL, the localMatrix. If not, return NULL and ignore the lo calMatrix parameter. |
| 400 * | 420 * |
| 401 * Note: the returned shader (if not NULL) will have been ref'd, and it is the responsibility | 421 * Note: the returned shader (if not NULL) will have been ref'd, and it is the responsibility |
| 402 * of the caller to balance that with unref() when they are done. | 422 * of the caller to balance that with unref() when they are done. |
| 403 */ | 423 */ |
| 404 virtual SkShader* refAsALocalMatrixShader(SkMatrix* localMatrix) const; | 424 virtual SkShader* refAsALocalMatrixShader(SkMatrix* localMatrix) const; |
| 405 | 425 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 437 SkMatrix fLocalMatrix; | 457 SkMatrix fLocalMatrix; |
| 438 | 458 |
| 439 // So the SkLocalMatrixShader can whack fLocalMatrix in its SkReadBuffer con structor. | 459 // So the SkLocalMatrixShader can whack fLocalMatrix in its SkReadBuffer con structor. |
| 440 friend class SkLocalMatrixShader; | 460 friend class SkLocalMatrixShader; |
| 441 friend class SkBitmapProcShader; // for computeTotalInverse() | 461 friend class SkBitmapProcShader; // for computeTotalInverse() |
| 442 | 462 |
| 443 typedef SkFlattenable INHERITED; | 463 typedef SkFlattenable INHERITED; |
| 444 }; | 464 }; |
| 445 | 465 |
| 446 #endif | 466 #endif |
| OLD | NEW |