| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 | 9 |
| 10 #include "SkBlitRow.h" | 10 #include "SkBlitRow.h" |
| 11 #include "SkColorFilter.h" | 11 #include "SkColorFilter.h" |
| 12 #include "SkColorPriv.h" | 12 #include "SkColorPriv.h" |
| 13 #include "SkFlattenableBuffers.h" | 13 #include "SkFlattenableBuffers.h" |
| 14 #include "SkUtils.h" | 14 #include "SkUtils.h" |
| 15 #include "SkString.h" |
| 15 | 16 |
| 16 #define ILLEGAL_XFERMODE_MODE ((SkXfermode::Mode)-1) | 17 #define ILLEGAL_XFERMODE_MODE ((SkXfermode::Mode)-1) |
| 17 | 18 |
| 18 // baseclass for filters that store a color and mode | 19 // baseclass for filters that store a color and mode |
| 19 class SkModeColorFilter : public SkColorFilter { | 20 class SkModeColorFilter : public SkColorFilter { |
| 20 public: | 21 public: |
| 21 SkModeColorFilter(SkColor color) { | 22 SkModeColorFilter(SkColor color) { |
| 22 fColor = color; | 23 fColor = color; |
| 23 fMode = ILLEGAL_XFERMODE_MODE; | 24 fMode = ILLEGAL_XFERMODE_MODE; |
| 24 this->updateCache(); | 25 this->updateCache(); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 SkASSERT(this->getFlags() & kHasFilter16_Flag); | 69 SkASSERT(this->getFlags() & kHasFilter16_Flag); |
| 69 | 70 |
| 70 SkPMColor color = fPMColor; | 71 SkPMColor color = fPMColor; |
| 71 SkXfermodeProc16 proc16 = fProc16; | 72 SkXfermodeProc16 proc16 = fProc16; |
| 72 | 73 |
| 73 for (int i = 0; i < count; i++) { | 74 for (int i = 0; i < count; i++) { |
| 74 result[i] = proc16(color, shader[i]); | 75 result[i] = proc16(color, shader[i]); |
| 75 } | 76 } |
| 76 } | 77 } |
| 77 | 78 |
| 79 #ifdef SK_DEVELOPER |
| 80 virtual void toString(SkString* str) const SK_OVERRIDE { |
| 81 str->append("SkModeColorFilter: color: 0x"); |
| 82 str->appendHex(fColor); |
| 83 str->append(" mode: "); |
| 84 str->append(SkXfermode::ModeName(fMode)); |
| 85 } |
| 86 #endif |
| 87 |
| 78 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkModeColorFilter) | 88 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkModeColorFilter) |
| 79 | 89 |
| 80 protected: | 90 protected: |
| 81 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE { | 91 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE { |
| 82 this->INHERITED::flatten(buffer); | 92 this->INHERITED::flatten(buffer); |
| 83 buffer.writeColor(fColor); | 93 buffer.writeColor(fColor); |
| 84 buffer.writeUInt(fMode); | 94 buffer.writeUInt(fMode); |
| 85 } | 95 } |
| 86 | 96 |
| 87 SkModeColorFilter(SkFlattenableReadBuffer& buffer) { | 97 SkModeColorFilter(SkFlattenableReadBuffer& buffer) { |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 253 unsigned scaleA = SkAlpha255To256(a); | 263 unsigned scaleA = SkAlpha255To256(a); |
| 254 unsigned r = pin(SkAlphaMul(SkGetPackedR32(c), scaleR) + SkAlpha
Mul(addR, scaleA), a); | 264 unsigned r = pin(SkAlphaMul(SkGetPackedR32(c), scaleR) + SkAlpha
Mul(addR, scaleA), a); |
| 255 unsigned g = pin(SkAlphaMul(SkGetPackedG32(c), scaleG) + SkAlpha
Mul(addG, scaleA), a); | 265 unsigned g = pin(SkAlphaMul(SkGetPackedG32(c), scaleG) + SkAlpha
Mul(addG, scaleA), a); |
| 256 unsigned b = pin(SkAlphaMul(SkGetPackedB32(c), scaleB) + SkAlpha
Mul(addB, scaleA), a); | 266 unsigned b = pin(SkAlphaMul(SkGetPackedB32(c), scaleB) + SkAlpha
Mul(addB, scaleA), a); |
| 257 c = SkPackARGB32(a, r, g, b); | 267 c = SkPackARGB32(a, r, g, b); |
| 258 } | 268 } |
| 259 result[i] = c; | 269 result[i] = c; |
| 260 } | 270 } |
| 261 } | 271 } |
| 262 | 272 |
| 273 #ifdef SK_DEVELOPER |
| 274 virtual void toString(SkString* str) const SK_OVERRIDE { |
| 275 str->append("SkLightingColorFilter: mul: 0x"); |
| 276 str->appendHex(fMul); |
| 277 str->append(" add: 0x"); |
| 278 str->appendHex(fAdd); |
| 279 } |
| 280 #endif |
| 281 |
| 263 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLightingColorFilter) | 282 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLightingColorFilter) |
| 264 | 283 |
| 265 protected: | 284 protected: |
| 266 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE { | 285 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE { |
| 267 this->INHERITED::flatten(buffer); | 286 this->INHERITED::flatten(buffer); |
| 268 buffer.writeColor(fMul); | 287 buffer.writeColor(fMul); |
| 269 buffer.writeColor(fAdd); | 288 buffer.writeColor(fAdd); |
| 270 } | 289 } |
| 271 | 290 |
| 272 SkLightingColorFilter(SkFlattenableReadBuffer& buffer) { | 291 SkLightingColorFilter(SkFlattenableReadBuffer& buffer) { |
| (...skipping 25 matching lines...) Expand all Loading... |
| 298 unsigned scaleA = SkAlpha255To256(a); | 317 unsigned scaleA = SkAlpha255To256(a); |
| 299 unsigned r = pin(SkGetPackedR32(c) + SkAlphaMul(addR, scaleA), a
); | 318 unsigned r = pin(SkGetPackedR32(c) + SkAlphaMul(addR, scaleA), a
); |
| 300 unsigned g = pin(SkGetPackedG32(c) + SkAlphaMul(addG, scaleA), a
); | 319 unsigned g = pin(SkGetPackedG32(c) + SkAlphaMul(addG, scaleA), a
); |
| 301 unsigned b = pin(SkGetPackedB32(c) + SkAlphaMul(addB, scaleA), a
); | 320 unsigned b = pin(SkGetPackedB32(c) + SkAlphaMul(addB, scaleA), a
); |
| 302 c = SkPackARGB32(a, r, g, b); | 321 c = SkPackARGB32(a, r, g, b); |
| 303 } | 322 } |
| 304 result[i] = c; | 323 result[i] = c; |
| 305 } | 324 } |
| 306 } | 325 } |
| 307 | 326 |
| 327 #ifdef SK_DEVELOPER |
| 328 virtual void toString(SkString* str) const SK_OVERRIDE { |
| 329 str->append("SkLightingColorFilter_JustAdd: add: 0x"); |
| 330 str->appendHex(fAdd); |
| 331 } |
| 332 #endif |
| 333 |
| 308 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLightingColorFilter_Ju
stAdd) | 334 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLightingColorFilter_Ju
stAdd) |
| 309 | 335 |
| 310 protected: | 336 protected: |
| 311 SkLightingColorFilter_JustAdd(SkFlattenableReadBuffer& buffer) | 337 SkLightingColorFilter_JustAdd(SkFlattenableReadBuffer& buffer) |
| 312 : INHERITED(buffer) {} | 338 : INHERITED(buffer) {} |
| 313 | 339 |
| 314 private: | 340 private: |
| 315 typedef SkLightingColorFilter INHERITED; | 341 typedef SkLightingColorFilter INHERITED; |
| 316 }; | 342 }; |
| 317 | 343 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 332 unsigned a = SkGetPackedA32(c); | 358 unsigned a = SkGetPackedA32(c); |
| 333 unsigned r = SkAlphaMul(SkGetPackedR32(c), scaleR); | 359 unsigned r = SkAlphaMul(SkGetPackedR32(c), scaleR); |
| 334 unsigned g = SkAlphaMul(SkGetPackedG32(c), scaleG); | 360 unsigned g = SkAlphaMul(SkGetPackedG32(c), scaleG); |
| 335 unsigned b = SkAlphaMul(SkGetPackedB32(c), scaleB); | 361 unsigned b = SkAlphaMul(SkGetPackedB32(c), scaleB); |
| 336 c = SkPackARGB32(a, r, g, b); | 362 c = SkPackARGB32(a, r, g, b); |
| 337 } | 363 } |
| 338 result[i] = c; | 364 result[i] = c; |
| 339 } | 365 } |
| 340 } | 366 } |
| 341 | 367 |
| 368 #ifdef SK_DEVELOPER |
| 369 virtual void toString(SkString* str) const SK_OVERRIDE { |
| 370 str->append("SkLightingColorFilter_JustMul: mul: 0x"); |
| 371 str->appendHex(fMul); |
| 372 } |
| 373 #endif |
| 374 |
| 342 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLightingColorFilter_Ju
stMul) | 375 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLightingColorFilter_Ju
stMul) |
| 343 | 376 |
| 344 protected: | 377 protected: |
| 345 SkLightingColorFilter_JustMul(SkFlattenableReadBuffer& buffer) | 378 SkLightingColorFilter_JustMul(SkFlattenableReadBuffer& buffer) |
| 346 : INHERITED(buffer) {} | 379 : INHERITED(buffer) {} |
| 347 | 380 |
| 348 private: | 381 private: |
| 349 typedef SkLightingColorFilter INHERITED; | 382 typedef SkLightingColorFilter INHERITED; |
| 350 }; | 383 }; |
| 351 | 384 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 369 // all mul components are the same | 402 // all mul components are the same |
| 370 unsigned scale = SkAlpha255To256(SkColorGetR(fMul)); | 403 unsigned scale = SkAlpha255To256(SkColorGetR(fMul)); |
| 371 | 404 |
| 372 if (count > 0) { | 405 if (count > 0) { |
| 373 do { | 406 do { |
| 374 *result++ = SkAlphaMulRGB16(*shader++, scale); | 407 *result++ = SkAlphaMulRGB16(*shader++, scale); |
| 375 } while (--count > 0); | 408 } while (--count > 0); |
| 376 } | 409 } |
| 377 } | 410 } |
| 378 | 411 |
| 412 #ifdef SK_DEVELOPER |
| 413 virtual void toString(SkString* str) const SK_OVERRIDE { |
| 414 str->append("SkLightingColorFilter_SingleMul: mul: 0x"); |
| 415 str->appendHex(fMul); |
| 416 } |
| 417 #endif |
| 418 |
| 379 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLightingColorFilter_Si
ngleMul) | 419 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLightingColorFilter_Si
ngleMul) |
| 380 | 420 |
| 381 protected: | 421 protected: |
| 382 SkLightingColorFilter_SingleMul(SkFlattenableReadBuffer& buffer) | 422 SkLightingColorFilter_SingleMul(SkFlattenableReadBuffer& buffer) |
| 383 : INHERITED(buffer) {} | 423 : INHERITED(buffer) {} |
| 384 | 424 |
| 385 private: | 425 private: |
| 386 typedef SkLightingColorFilter INHERITED; | 426 typedef SkLightingColorFilter INHERITED; |
| 387 }; | 427 }; |
| 388 | 428 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 408 unsigned scaleA = SkAlpha255To256(a); | 448 unsigned scaleA = SkAlpha255To256(a); |
| 409 unsigned r = SkAlphaMul(SkGetPackedR32(c), scaleR) + SkAlphaMul(
addR, scaleA); | 449 unsigned r = SkAlphaMul(SkGetPackedR32(c), scaleR) + SkAlphaMul(
addR, scaleA); |
| 410 unsigned g = SkAlphaMul(SkGetPackedG32(c), scaleG) + SkAlphaMul(
addG, scaleA); | 450 unsigned g = SkAlphaMul(SkGetPackedG32(c), scaleG) + SkAlphaMul(
addG, scaleA); |
| 411 unsigned b = SkAlphaMul(SkGetPackedB32(c), scaleB) + SkAlphaMul(
addB, scaleA); | 451 unsigned b = SkAlphaMul(SkGetPackedB32(c), scaleB) + SkAlphaMul(
addB, scaleA); |
| 412 c = SkPackARGB32(a, r, g, b); | 452 c = SkPackARGB32(a, r, g, b); |
| 413 } | 453 } |
| 414 result[i] = c; | 454 result[i] = c; |
| 415 } | 455 } |
| 416 } | 456 } |
| 417 | 457 |
| 458 #ifdef SK_DEVELOPER |
| 459 virtual void toString(SkString* str) const SK_OVERRIDE { |
| 460 str->append("SkLightingColorFilter_NoPin: mul: 0x"); |
| 461 str->appendHex(fMul); |
| 462 str->append(" add: 0x"); |
| 463 str->appendHex(fAdd); |
| 464 } |
| 465 #endif |
| 466 |
| 418 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLightingColorFilter_No
Pin) | 467 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLightingColorFilter_No
Pin) |
| 419 | 468 |
| 420 protected: | 469 protected: |
| 421 SkLightingColorFilter_NoPin(SkFlattenableReadBuffer& buffer) | 470 SkLightingColorFilter_NoPin(SkFlattenableReadBuffer& buffer) |
| 422 : INHERITED(buffer) {} | 471 : INHERITED(buffer) {} |
| 423 | 472 |
| 424 private: | 473 private: |
| 425 typedef SkLightingColorFilter INHERITED; | 474 typedef SkLightingColorFilter INHERITED; |
| 426 }; | 475 }; |
| 427 | 476 |
| 428 /////////////////////////////////////////////////////////////////////////////// | 477 /////////////////////////////////////////////////////////////////////////////// |
| 429 | 478 |
| 430 class SkSimpleColorFilter : public SkColorFilter { | 479 class SkSimpleColorFilter : public SkColorFilter { |
| 431 public: | 480 public: |
| 432 static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) { | 481 static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) { |
| 433 return SkNEW(SkSimpleColorFilter); | 482 return SkNEW(SkSimpleColorFilter); |
| 434 } | 483 } |
| 435 | 484 |
| 485 #ifdef SK_DEVELOPER |
| 486 virtual void toString(SkString* str) const SK_OVERRIDE { |
| 487 str->append("SkSimpleColorFilter"); |
| 488 } |
| 489 #endif |
| 490 |
| 436 protected: | 491 protected: |
| 437 void filterSpan(const SkPMColor src[], int count, SkPMColor | 492 void filterSpan(const SkPMColor src[], int count, SkPMColor |
| 438 result[]) const SK_OVERRIDE { | 493 result[]) const SK_OVERRIDE { |
| 439 if (result != src) { | 494 if (result != src) { |
| 440 memcpy(result, src, count * sizeof(SkPMColor)); | 495 memcpy(result, src, count * sizeof(SkPMColor)); |
| 441 } | 496 } |
| 442 } | 497 } |
| 443 | 498 |
| 444 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE {} | 499 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE {} |
| 445 | 500 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 483 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkModeColorFilter) | 538 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkModeColorFilter) |
| 484 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(Src_SkModeColorFilter) | 539 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(Src_SkModeColorFilter) |
| 485 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SrcOver_SkModeColorFilter) | 540 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SrcOver_SkModeColorFilter) |
| 486 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkLightingColorFilter) | 541 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkLightingColorFilter) |
| 487 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkLightingColorFilter_JustAdd) | 542 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkLightingColorFilter_JustAdd) |
| 488 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkLightingColorFilter_JustMul) | 543 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkLightingColorFilter_JustMul) |
| 489 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkLightingColorFilter_SingleMul) | 544 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkLightingColorFilter_SingleMul) |
| 490 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkLightingColorFilter_NoPin) | 545 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkLightingColorFilter_NoPin) |
| 491 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSimpleColorFilter) | 546 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSimpleColorFilter) |
| 492 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 547 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
| OLD | NEW |