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 |