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 #include "SkBlitRow.h" | 8 #include "SkBlitRow.h" |
9 #include "SkColorFilter.h" | 9 #include "SkColorFilter.h" |
10 #include "SkColorPriv.h" | 10 #include "SkColorPriv.h" |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
86 } | 86 } |
87 #endif | 87 #endif |
88 | 88 |
89 #if SK_SUPPORT_GPU | 89 #if SK_SUPPORT_GPU |
90 virtual GrEffect* asNewEffect(GrContext*) const SK_OVERRIDE; | 90 virtual GrEffect* asNewEffect(GrContext*) const SK_OVERRIDE; |
91 #endif | 91 #endif |
92 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkModeColorFilter) | 92 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkModeColorFilter) |
93 | 93 |
94 protected: | 94 protected: |
95 virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE { | 95 virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE { |
96 this->INHERITED::flatten(buffer); | |
97 buffer.writeColor(fColor); | 96 buffer.writeColor(fColor); |
98 buffer.writeUInt(fMode); | 97 buffer.writeUInt(fMode); |
99 } | 98 } |
100 | 99 |
100 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING | |
101 SkModeColorFilter(SkReadBuffer& buffer) { | 101 SkModeColorFilter(SkReadBuffer& buffer) { |
102 fColor = buffer.readColor(); | 102 fColor = buffer.readColor(); |
103 fMode = (SkXfermode::Mode)buffer.readUInt(); | 103 fMode = (SkXfermode::Mode)buffer.readUInt(); |
104 if (buffer.isValid()) { | 104 if (buffer.isValid()) { |
105 this->updateCache(); | 105 this->updateCache(); |
106 buffer.validate(SkIsValidMode(fMode)); | 106 buffer.validate(SkIsValidMode(fMode)); |
107 } | 107 } |
108 } | 108 } |
109 #endif | |
109 | 110 |
110 private: | 111 private: |
111 SkColor fColor; | 112 SkColor fColor; |
112 SkXfermode::Mode fMode; | 113 SkXfermode::Mode fMode; |
113 // cache | 114 // cache |
114 SkPMColor fPMColor; | 115 SkPMColor fPMColor; |
115 SkXfermodeProc fProc; | 116 SkXfermodeProc fProc; |
116 SkXfermodeProc16 fProc16; | 117 SkXfermodeProc16 fProc16; |
117 | 118 |
118 void updateCache() { | 119 void updateCache() { |
119 fPMColor = SkPreMultiplyColor(fColor); | 120 fPMColor = SkPreMultiplyColor(fColor); |
120 fProc = SkXfermode::GetProc(fMode); | 121 fProc = SkXfermode::GetProc(fMode); |
121 fProc16 = SkXfermode::GetProc16(fMode, fColor); | 122 fProc16 = SkXfermode::GetProc16(fMode, fColor); |
122 } | 123 } |
123 | 124 |
124 typedef SkColorFilter INHERITED; | 125 typedef SkColorFilter INHERITED; |
125 }; | 126 }; |
126 | 127 |
128 SkFlattenable* SkModeColorFilter::CreateProc(SkReadBuffer& buffer) { | |
129 SkColor color = buffer.readColor(); | |
130 SkXfermode::Mode mode = (SkXfermode::Mode)buffer.readUInt(); | |
131 return SkColorFilter::CreateModeFilter(color, mode); | |
sugoi1
2014/08/19 18:46:17
I think the mode validation might be important her
reed1
2014/08/19 19:58:06
Fixed in factory, removed 1st constructor, elimina
| |
132 } | |
133 | |
127 /////////////////////////////////////////////////////////////////////////////// | 134 /////////////////////////////////////////////////////////////////////////////// |
128 #if SK_SUPPORT_GPU | 135 #if SK_SUPPORT_GPU |
129 #include "GrBlend.h" | 136 #include "GrBlend.h" |
130 #include "GrEffect.h" | 137 #include "GrEffect.h" |
131 #include "GrEffectUnitTest.h" | 138 #include "GrEffectUnitTest.h" |
132 #include "GrTBackendEffectFactory.h" | 139 #include "GrTBackendEffectFactory.h" |
133 #include "gl/GrGLEffect.h" | 140 #include "gl/GrGLEffect.h" |
134 #include "gl/GrGLShaderBuilder.h" | 141 #include "gl/GrGLShaderBuilder.h" |
135 #include "SkGr.h" | 142 #include "SkGr.h" |
136 | 143 |
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
436 SkPMColor result[]) const SK_OVERRIDE { | 443 SkPMColor result[]) const SK_OVERRIDE { |
437 sk_memset32(result, this->getPMColor(), count); | 444 sk_memset32(result, this->getPMColor(), count); |
438 } | 445 } |
439 | 446 |
440 virtual void filterSpan16(const uint16_t shader[], int count, | 447 virtual void filterSpan16(const uint16_t shader[], int count, |
441 uint16_t result[]) const SK_OVERRIDE { | 448 uint16_t result[]) const SK_OVERRIDE { |
442 SkASSERT(this->getFlags() & kHasFilter16_Flag); | 449 SkASSERT(this->getFlags() & kHasFilter16_Flag); |
443 sk_memset16(result, SkPixel32ToPixel16(this->getPMColor()), count); | 450 sk_memset16(result, SkPixel32ToPixel16(this->getPMColor()), count); |
444 } | 451 } |
445 | 452 |
446 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(Src_SkModeColorFilter) | |
447 | |
448 protected: | |
449 Src_SkModeColorFilter(SkReadBuffer& buffer) | |
450 : INHERITED(buffer) {} | |
451 | |
452 private: | 453 private: |
453 typedef SkModeColorFilter INHERITED; | 454 typedef SkModeColorFilter INHERITED; |
454 }; | 455 }; |
455 | 456 |
456 class SrcOver_SkModeColorFilter : public SkModeColorFilter { | 457 class SrcOver_SkModeColorFilter : public SkModeColorFilter { |
457 public: | 458 public: |
458 SrcOver_SkModeColorFilter(SkColor color) | 459 SrcOver_SkModeColorFilter(SkColor color) |
459 : INHERITED(color, SkXfermode::kSrcOver_Mode) { | 460 : INHERITED(color, SkXfermode::kSrcOver_Mode) { |
460 fColor32Proc = SkBlitRow::ColorProcFactory(); | 461 fColor32Proc = SkBlitRow::ColorProcFactory(); |
461 } | 462 } |
(...skipping 10 matching lines...) Expand all Loading... | |
472 SkPMColor result[]) const SK_OVERRIDE { | 473 SkPMColor result[]) const SK_OVERRIDE { |
473 fColor32Proc(result, shader, count, this->getPMColor()); | 474 fColor32Proc(result, shader, count, this->getPMColor()); |
474 } | 475 } |
475 | 476 |
476 virtual void filterSpan16(const uint16_t shader[], int count, | 477 virtual void filterSpan16(const uint16_t shader[], int count, |
477 uint16_t result[]) const SK_OVERRIDE { | 478 uint16_t result[]) const SK_OVERRIDE { |
478 SkASSERT(this->getFlags() & kHasFilter16_Flag); | 479 SkASSERT(this->getFlags() & kHasFilter16_Flag); |
479 sk_memset16(result, SkPixel32ToPixel16(this->getPMColor()), count); | 480 sk_memset16(result, SkPixel32ToPixel16(this->getPMColor()), count); |
480 } | 481 } |
481 | 482 |
482 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SrcOver_SkModeColorFilte r) | |
483 | |
484 protected: | |
485 SrcOver_SkModeColorFilter(SkReadBuffer& buffer) | |
486 : INHERITED(buffer) { | |
487 fColor32Proc = SkBlitRow::ColorProcFactory(); | |
488 } | |
489 | |
490 private: | 483 private: |
491 | 484 |
492 SkBlitRow::ColorProc fColor32Proc; | 485 SkBlitRow::ColorProc fColor32Proc; |
493 | 486 |
494 typedef SkModeColorFilter INHERITED; | 487 typedef SkModeColorFilter INHERITED; |
495 }; | 488 }; |
496 | 489 |
497 /////////////////////////////////////////////////////////////////////////////// | 490 /////////////////////////////////////////////////////////////////////////////// |
498 | 491 |
499 SkColorFilter* SkColorFilter::CreateModeFilter(SkColor color, | 492 SkColorFilter* SkColorFilter::CreateModeFilter(SkColor color, SkXfermode::Mode m ode) { |
500 SkXfermode::Mode mode) { | |
501 unsigned alpha = SkColorGetA(color); | 493 unsigned alpha = SkColorGetA(color); |
502 | 494 |
503 // first collaps some modes if possible | 495 // first collaps some modes if possible |
504 | 496 |
505 if (SkXfermode::kClear_Mode == mode) { | 497 if (SkXfermode::kClear_Mode == mode) { |
506 color = 0; | 498 color = 0; |
507 mode = SkXfermode::kSrc_Mode; | 499 mode = SkXfermode::kSrc_Mode; |
508 } else if (SkXfermode::kSrcOver_Mode == mode) { | 500 } else if (SkXfermode::kSrcOver_Mode == mode) { |
509 if (0 == alpha) { | 501 if (0 == alpha) { |
510 mode = SkXfermode::kDst_Mode; | 502 mode = SkXfermode::kDst_Mode; |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
558 SkIntToScalar(SkColorGetB(add)), | 550 SkIntToScalar(SkColorGetB(add)), |
559 0); | 551 0); |
560 return SkColorMatrixFilter::Create(matrix); | 552 return SkColorMatrixFilter::Create(matrix); |
561 } | 553 } |
562 | 554 |
563 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkColorFilter) | 555 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkColorFilter) |
564 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkModeColorFilter) | 556 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkModeColorFilter) |
565 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(Src_SkModeColorFilter) | 557 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(Src_SkModeColorFilter) |
566 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SrcOver_SkModeColorFilter) | 558 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SrcOver_SkModeColorFilter) |
567 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 559 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
OLD | NEW |