| 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 "SkXfermode.h" | 10 #include "SkXfermode.h" |
| (...skipping 1420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1431 protected: | 1431 protected: |
| 1432 SkProcCoeffXfermode(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { | 1432 SkProcCoeffXfermode(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { |
| 1433 fMode = (SkXfermode::Mode)buffer.read32(); | 1433 fMode = (SkXfermode::Mode)buffer.read32(); |
| 1434 | 1434 |
| 1435 const ProcCoeff& rec = gProcCoeffs[fMode]; | 1435 const ProcCoeff& rec = gProcCoeffs[fMode]; |
| 1436 // these may be valid, or may be CANNOT_USE_COEFF | 1436 // these may be valid, or may be CANNOT_USE_COEFF |
| 1437 fSrcCoeff = rec.fSC; | 1437 fSrcCoeff = rec.fSC; |
| 1438 fDstCoeff = rec.fDC; | 1438 fDstCoeff = rec.fDC; |
| 1439 // now update our function-ptr in the super class | 1439 // now update our function-ptr in the super class |
| 1440 this->INHERITED::setProc(rec.fProc); | 1440 this->INHERITED::setProc(rec.fProc); |
| 1441 |
| 1442 buffer.validateData(IsValidMode(fMode) && |
| 1443 IsValidCoeff(fSrcCoeff) && |
| 1444 IsValidCoeff(fDstCoeff)); |
| 1441 } | 1445 } |
| 1442 | 1446 |
| 1443 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE { | 1447 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE { |
| 1444 this->INHERITED::flatten(buffer); | 1448 this->INHERITED::flatten(buffer); |
| 1445 buffer.write32(fMode); | 1449 buffer.write32(fMode); |
| 1446 } | 1450 } |
| 1447 | 1451 |
| 1448 private: | 1452 private: |
| 1449 Mode fMode; | 1453 Mode fMode; |
| 1450 Coeff fSrcCoeff, fDstCoeff; | 1454 Coeff fSrcCoeff, fDstCoeff; |
| (...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1774 return xfer->asMode(mode); | 1778 return xfer->asMode(mode); |
| 1775 } | 1779 } |
| 1776 | 1780 |
| 1777 bool SkXfermode::AsCoeff(const SkXfermode* xfer, Coeff* src, Coeff* dst) { | 1781 bool SkXfermode::AsCoeff(const SkXfermode* xfer, Coeff* src, Coeff* dst) { |
| 1778 if (NULL == xfer) { | 1782 if (NULL == xfer) { |
| 1779 return ModeAsCoeff(kSrcOver_Mode, src, dst); | 1783 return ModeAsCoeff(kSrcOver_Mode, src, dst); |
| 1780 } | 1784 } |
| 1781 return xfer->asCoeff(src, dst); | 1785 return xfer->asCoeff(src, dst); |
| 1782 } | 1786 } |
| 1783 | 1787 |
| 1788 bool SkXfermode::IsValidCoeff(Coeff coeff) { |
| 1789 return coeff >= 0 && coeff < kCoeffCount; |
| 1790 } |
| 1791 |
| 1784 bool SkXfermode::IsMode(const SkXfermode* xfer, Mode mode) { | 1792 bool SkXfermode::IsMode(const SkXfermode* xfer, Mode mode) { |
| 1785 // if xfer==null then the mode is srcover | 1793 // if xfer==null then the mode is srcover |
| 1786 Mode m = kSrcOver_Mode; | 1794 Mode m = kSrcOver_Mode; |
| 1787 if (xfer && !xfer->asMode(&m)) { | 1795 if (xfer && !xfer->asMode(&m)) { |
| 1788 return false; | 1796 return false; |
| 1789 } | 1797 } |
| 1790 return mode == m; | 1798 return mode == m; |
| 1791 } | 1799 } |
| 1792 | 1800 |
| 1801 bool SkXfermode::IsValidMode(Mode mode) { |
| 1802 return (mode >= 0) && (mode <= SkXfermode::kLastMode); |
| 1803 } |
| 1804 |
| 1793 /////////////////////////////////////////////////////////////////////////////// | 1805 /////////////////////////////////////////////////////////////////////////////// |
| 1794 //////////// 16bit xfermode procs | 1806 //////////// 16bit xfermode procs |
| 1795 | 1807 |
| 1796 #ifdef SK_DEBUG | 1808 #ifdef SK_DEBUG |
| 1797 static bool require_255(SkPMColor src) { return SkGetPackedA32(src) == 0xFF; } | 1809 static bool require_255(SkPMColor src) { return SkGetPackedA32(src) == 0xFF; } |
| 1798 static bool require_0(SkPMColor src) { return SkGetPackedA32(src) == 0; } | 1810 static bool require_0(SkPMColor src) { return SkGetPackedA32(src) == 0; } |
| 1799 #endif | 1811 #endif |
| 1800 | 1812 |
| 1801 static uint16_t src_modeproc16_255(SkPMColor src, uint16_t dst) { | 1813 static uint16_t src_modeproc16_255(SkPMColor src, uint16_t dst) { |
| 1802 SkASSERT(require_255(src)); | 1814 SkASSERT(require_255(src)); |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1963 return proc16; | 1975 return proc16; |
| 1964 } | 1976 } |
| 1965 | 1977 |
| 1966 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode) | 1978 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode) |
| 1967 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode) | 1979 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode) |
| 1968 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkClearXfermode) | 1980 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkClearXfermode) |
| 1969 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSrcXfermode) | 1981 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSrcXfermode) |
| 1970 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstInXfermode) | 1982 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstInXfermode) |
| 1971 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstOutXfermode) | 1983 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstOutXfermode) |
| 1972 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 1984 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
| OLD | NEW |