| 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" |
| 11 #include "SkColorPriv.h" | 11 #include "SkColorPriv.h" |
| 12 #include "SkFlattenableBuffers.h" | 12 #include "SkFlattenableBuffers.h" |
| 13 #include "SkMathPriv.h" | 13 #include "SkMathPriv.h" |
| 14 #include "SkString.h" | 14 #include "SkString.h" |
| 15 #include "SkValidationUtils.h" |
| 15 | 16 |
| 16 SK_DEFINE_INST_COUNT(SkXfermode) | 17 SK_DEFINE_INST_COUNT(SkXfermode) |
| 17 | 18 |
| 18 #define SkAlphaMulAlpha(a, b) SkMulDiv255Round(a, b) | 19 #define SkAlphaMulAlpha(a, b) SkMulDiv255Round(a, b) |
| 19 | 20 |
| 20 #if 0 | 21 #if 0 |
| 21 // idea for higher precision blends in xfer procs (and slightly faster) | 22 // idea for higher precision blends in xfer procs (and slightly faster) |
| 22 // see DstATop as a probable caller | 23 // see DstATop as a probable caller |
| 23 static U8CPU mulmuldiv255round(U8CPU a, U8CPU b, U8CPU c, U8CPU d) { | 24 static U8CPU mulmuldiv255round(U8CPU a, U8CPU b, U8CPU c, U8CPU d) { |
| 24 SkASSERT(a <= 255); | 25 SkASSERT(a <= 255); |
| (...skipping 1343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1368 static AutoEffectUnref gEffect(SkNEW_ARGS(XferEffect, (static_cast<SkXfermod
e::Mode>(mode), NULL))); | 1369 static AutoEffectUnref gEffect(SkNEW_ARGS(XferEffect, (static_cast<SkXfermod
e::Mode>(mode), NULL))); |
| 1369 return CreateEffectRef(gEffect); | 1370 return CreateEffectRef(gEffect); |
| 1370 } | 1371 } |
| 1371 | 1372 |
| 1372 #endif | 1373 #endif |
| 1373 | 1374 |
| 1374 /////////////////////////////////////////////////////////////////////////////// | 1375 /////////////////////////////////////////////////////////////////////////////// |
| 1375 /////////////////////////////////////////////////////////////////////////////// | 1376 /////////////////////////////////////////////////////////////////////////////// |
| 1376 | 1377 |
| 1377 class SkProcCoeffXfermode : public SkProcXfermode { | 1378 class SkProcCoeffXfermode : public SkProcXfermode { |
| 1379 typedef SkProcXfermode INHERITED; |
| 1380 |
| 1378 public: | 1381 public: |
| 1379 SkProcCoeffXfermode(const ProcCoeff& rec, Mode mode) | 1382 SkProcCoeffXfermode(const ProcCoeff& rec, Mode mode) |
| 1380 : INHERITED(rec.fProc) { | 1383 : INHERITED(rec.fProc) { |
| 1381 fMode = mode; | 1384 fMode = mode; |
| 1382 // these may be valid, or may be CANNOT_USE_COEFF | 1385 // these may be valid, or may be CANNOT_USE_COEFF |
| 1383 fSrcCoeff = rec.fSC; | 1386 fSrcCoeff = rec.fSC; |
| 1384 fDstCoeff = rec.fDC; | 1387 fDstCoeff = rec.fDC; |
| 1385 } | 1388 } |
| 1386 | 1389 |
| 1387 virtual bool asMode(Mode* mode) const SK_OVERRIDE { | 1390 virtual bool asMode(Mode* mode) const SK_OVERRIDE { |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1431 protected: | 1434 protected: |
| 1432 SkProcCoeffXfermode(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { | 1435 SkProcCoeffXfermode(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { |
| 1433 fMode = (SkXfermode::Mode)buffer.read32(); | 1436 fMode = (SkXfermode::Mode)buffer.read32(); |
| 1434 | 1437 |
| 1435 const ProcCoeff& rec = gProcCoeffs[fMode]; | 1438 const ProcCoeff& rec = gProcCoeffs[fMode]; |
| 1436 // these may be valid, or may be CANNOT_USE_COEFF | 1439 // these may be valid, or may be CANNOT_USE_COEFF |
| 1437 fSrcCoeff = rec.fSC; | 1440 fSrcCoeff = rec.fSC; |
| 1438 fDstCoeff = rec.fDC; | 1441 fDstCoeff = rec.fDC; |
| 1439 // now update our function-ptr in the super class | 1442 // now update our function-ptr in the super class |
| 1440 this->INHERITED::setProc(rec.fProc); | 1443 this->INHERITED::setProc(rec.fProc); |
| 1444 |
| 1445 buffer.validate(SkIsValidMode(fMode) && |
| 1446 SkIsValidCoeff(fSrcCoeff) && |
| 1447 SkIsValidCoeff(fDstCoeff)); |
| 1441 } | 1448 } |
| 1442 | 1449 |
| 1443 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE { | 1450 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE { |
| 1444 this->INHERITED::flatten(buffer); | 1451 this->INHERITED::flatten(buffer); |
| 1445 buffer.write32(fMode); | 1452 buffer.write32(fMode); |
| 1446 } | 1453 } |
| 1447 | 1454 |
| 1448 private: | 1455 private: |
| 1449 Mode fMode; | 1456 Mode fMode; |
| 1450 Coeff fSrcCoeff, fDstCoeff; | 1457 Coeff fSrcCoeff, fDstCoeff; |
| 1451 | |
| 1452 typedef SkProcXfermode INHERITED; | |
| 1453 }; | 1458 }; |
| 1454 | 1459 |
| 1455 const char* SkXfermode::ModeName(Mode mode) { | 1460 const char* SkXfermode::ModeName(Mode mode) { |
| 1456 SkASSERT((unsigned) mode <= (unsigned)kLastMode); | 1461 SkASSERT((unsigned) mode <= (unsigned)kLastMode); |
| 1457 const char* gModeStrings[] = { | 1462 const char* gModeStrings[] = { |
| 1458 "Clear", "Src", "Dst", "SrcOver", "DstOver", "SrcIn", "DstIn", | 1463 "Clear", "Src", "Dst", "SrcOver", "DstOver", "SrcIn", "DstIn", |
| 1459 "SrcOut", "DstOut", "SrcATop", "DstATop", "Xor", "Plus", | 1464 "SrcOut", "DstOut", "SrcATop", "DstATop", "Xor", "Plus", |
| 1460 "Modulate", "Screen", "Overlay", "Darken", "Lighten", "ColorDodge", | 1465 "Modulate", "Screen", "Overlay", "Darken", "Lighten", "ColorDodge", |
| 1461 "ColorBurn", "HardLight", "SoftLight", "Difference", "Exclusion", | 1466 "ColorBurn", "HardLight", "SoftLight", "Difference", "Exclusion", |
| 1462 "Multiply", "Hue", "Saturation", "Color", "Luminosity" | 1467 "Multiply", "Hue", "Saturation", "Color", "Luminosity" |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1488 str->append("can't use"); | 1493 str->append("can't use"); |
| 1489 } else { | 1494 } else { |
| 1490 str->append(gCoeffStrings[fDstCoeff]); | 1495 str->append(gCoeffStrings[fDstCoeff]); |
| 1491 } | 1496 } |
| 1492 } | 1497 } |
| 1493 #endif | 1498 #endif |
| 1494 | 1499 |
| 1495 /////////////////////////////////////////////////////////////////////////////// | 1500 /////////////////////////////////////////////////////////////////////////////// |
| 1496 | 1501 |
| 1497 class SkClearXfermode : public SkProcCoeffXfermode { | 1502 class SkClearXfermode : public SkProcCoeffXfermode { |
| 1503 typedef SkProcCoeffXfermode INHERITED; |
| 1504 |
| 1498 public: | 1505 public: |
| 1499 SkClearXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kClear_Mode
) {} | 1506 SkClearXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kClear_Mode
) {} |
| 1500 | 1507 |
| 1501 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const
SK_OVERRIDE; | 1508 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const
SK_OVERRIDE; |
| 1502 virtual void xferA8(SkAlpha*, const SkPMColor*, int, const SkAlpha*) const S
K_OVERRIDE; | 1509 virtual void xferA8(SkAlpha*, const SkPMColor*, int, const SkAlpha*) const S
K_OVERRIDE; |
| 1503 | 1510 |
| 1504 SK_DEVELOPER_TO_STRING() | 1511 SK_DEVELOPER_TO_STRING() |
| 1505 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkClearXfermode) | 1512 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkClearXfermode) |
| 1506 | 1513 |
| 1507 private: | 1514 private: |
| 1508 SkClearXfermode(SkFlattenableReadBuffer& buffer) | 1515 SkClearXfermode(SkFlattenableReadBuffer& buffer) |
| 1509 : SkProcCoeffXfermode(buffer) {} | 1516 : SkProcCoeffXfermode(buffer) {} |
| 1510 | |
| 1511 typedef SkProcCoeffXfermode INHERITED; | |
| 1512 }; | 1517 }; |
| 1513 | 1518 |
| 1514 void SkClearXfermode::xfer32(SkPMColor* SK_RESTRICT dst, | 1519 void SkClearXfermode::xfer32(SkPMColor* SK_RESTRICT dst, |
| 1515 const SkPMColor* SK_RESTRICT, int count, | 1520 const SkPMColor* SK_RESTRICT, int count, |
| 1516 const SkAlpha* SK_RESTRICT aa) const { | 1521 const SkAlpha* SK_RESTRICT aa) const { |
| 1517 SkASSERT(dst && count >= 0); | 1522 SkASSERT(dst && count >= 0); |
| 1518 | 1523 |
| 1519 if (NULL == aa) { | 1524 if (NULL == aa) { |
| 1520 memset(dst, 0, count << 2); | 1525 memset(dst, 0, count << 2); |
| 1521 } else { | 1526 } else { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1550 | 1555 |
| 1551 #ifdef SK_DEVELOPER | 1556 #ifdef SK_DEVELOPER |
| 1552 void SkClearXfermode::toString(SkString* str) const { | 1557 void SkClearXfermode::toString(SkString* str) const { |
| 1553 this->INHERITED::toString(str); | 1558 this->INHERITED::toString(str); |
| 1554 } | 1559 } |
| 1555 #endif | 1560 #endif |
| 1556 | 1561 |
| 1557 /////////////////////////////////////////////////////////////////////////////// | 1562 /////////////////////////////////////////////////////////////////////////////// |
| 1558 | 1563 |
| 1559 class SkSrcXfermode : public SkProcCoeffXfermode { | 1564 class SkSrcXfermode : public SkProcCoeffXfermode { |
| 1565 typedef SkProcCoeffXfermode INHERITED; |
| 1566 |
| 1560 public: | 1567 public: |
| 1561 SkSrcXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kSrc_Mode) {} | 1568 SkSrcXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kSrc_Mode) {} |
| 1562 | 1569 |
| 1563 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const
SK_OVERRIDE; | 1570 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const
SK_OVERRIDE; |
| 1564 virtual void xferA8(SkAlpha*, const SkPMColor*, int, const SkAlpha*) const S
K_OVERRIDE; | 1571 virtual void xferA8(SkAlpha*, const SkPMColor*, int, const SkAlpha*) const S
K_OVERRIDE; |
| 1565 | 1572 |
| 1566 SK_DEVELOPER_TO_STRING() | 1573 SK_DEVELOPER_TO_STRING() |
| 1567 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSrcXfermode) | 1574 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSrcXfermode) |
| 1568 | 1575 |
| 1569 private: | 1576 private: |
| 1570 SkSrcXfermode(SkFlattenableReadBuffer& buffer) | 1577 SkSrcXfermode(SkFlattenableReadBuffer& buffer) |
| 1571 : SkProcCoeffXfermode(buffer) {} | 1578 : SkProcCoeffXfermode(buffer) {} |
| 1572 | |
| 1573 typedef SkProcCoeffXfermode INHERITED; | |
| 1574 }; | 1579 }; |
| 1575 | 1580 |
| 1576 void SkSrcXfermode::xfer32(SkPMColor* SK_RESTRICT dst, | 1581 void SkSrcXfermode::xfer32(SkPMColor* SK_RESTRICT dst, |
| 1577 const SkPMColor* SK_RESTRICT src, int count, | 1582 const SkPMColor* SK_RESTRICT src, int count, |
| 1578 const SkAlpha* SK_RESTRICT aa) const { | 1583 const SkAlpha* SK_RESTRICT aa) const { |
| 1579 SkASSERT(dst && src && count >= 0); | 1584 SkASSERT(dst && src && count >= 0); |
| 1580 | 1585 |
| 1581 if (NULL == aa) { | 1586 if (NULL == aa) { |
| 1582 memcpy(dst, src, count << 2); | 1587 memcpy(dst, src, count << 2); |
| 1583 } else { | 1588 } else { |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1617 } | 1622 } |
| 1618 #ifdef SK_DEVELOPER | 1623 #ifdef SK_DEVELOPER |
| 1619 void SkSrcXfermode::toString(SkString* str) const { | 1624 void SkSrcXfermode::toString(SkString* str) const { |
| 1620 this->INHERITED::toString(str); | 1625 this->INHERITED::toString(str); |
| 1621 } | 1626 } |
| 1622 #endif | 1627 #endif |
| 1623 | 1628 |
| 1624 /////////////////////////////////////////////////////////////////////////////// | 1629 /////////////////////////////////////////////////////////////////////////////// |
| 1625 | 1630 |
| 1626 class SkDstInXfermode : public SkProcCoeffXfermode { | 1631 class SkDstInXfermode : public SkProcCoeffXfermode { |
| 1632 typedef SkProcCoeffXfermode INHERITED; |
| 1633 |
| 1627 public: | 1634 public: |
| 1628 SkDstInXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kDstIn_Mode
) {} | 1635 SkDstInXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kDstIn_Mode
) {} |
| 1629 | 1636 |
| 1630 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const
SK_OVERRIDE; | 1637 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const
SK_OVERRIDE; |
| 1631 | 1638 |
| 1632 SK_DEVELOPER_TO_STRING() | 1639 SK_DEVELOPER_TO_STRING() |
| 1633 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDstInXfermode) | 1640 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDstInXfermode) |
| 1634 | 1641 |
| 1635 private: | 1642 private: |
| 1636 SkDstInXfermode(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {} | 1643 SkDstInXfermode(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {} |
| 1637 | |
| 1638 typedef SkProcCoeffXfermode INHERITED; | |
| 1639 }; | 1644 }; |
| 1640 | 1645 |
| 1641 void SkDstInXfermode::xfer32(SkPMColor* SK_RESTRICT dst, | 1646 void SkDstInXfermode::xfer32(SkPMColor* SK_RESTRICT dst, |
| 1642 const SkPMColor* SK_RESTRICT src, int count, | 1647 const SkPMColor* SK_RESTRICT src, int count, |
| 1643 const SkAlpha* SK_RESTRICT aa) const { | 1648 const SkAlpha* SK_RESTRICT aa) const { |
| 1644 SkASSERT(dst && src); | 1649 SkASSERT(dst && src); |
| 1645 | 1650 |
| 1646 if (count <= 0) { | 1651 if (count <= 0) { |
| 1647 return; | 1652 return; |
| 1648 } | 1653 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1660 | 1665 |
| 1661 #ifdef SK_DEVELOPER | 1666 #ifdef SK_DEVELOPER |
| 1662 void SkDstInXfermode::toString(SkString* str) const { | 1667 void SkDstInXfermode::toString(SkString* str) const { |
| 1663 this->INHERITED::toString(str); | 1668 this->INHERITED::toString(str); |
| 1664 } | 1669 } |
| 1665 #endif | 1670 #endif |
| 1666 | 1671 |
| 1667 /////////////////////////////////////////////////////////////////////////////// | 1672 /////////////////////////////////////////////////////////////////////////////// |
| 1668 | 1673 |
| 1669 class SkDstOutXfermode : public SkProcCoeffXfermode { | 1674 class SkDstOutXfermode : public SkProcCoeffXfermode { |
| 1675 typedef SkProcCoeffXfermode INHERITED; |
| 1676 |
| 1670 public: | 1677 public: |
| 1671 SkDstOutXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kDstOut_Mo
de) {} | 1678 SkDstOutXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kDstOut_Mo
de) {} |
| 1672 | 1679 |
| 1673 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const
SK_OVERRIDE; | 1680 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const
SK_OVERRIDE; |
| 1674 | 1681 |
| 1675 SK_DEVELOPER_TO_STRING() | 1682 SK_DEVELOPER_TO_STRING() |
| 1676 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDstOutXfermode) | 1683 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDstOutXfermode) |
| 1677 | 1684 |
| 1678 private: | 1685 private: |
| 1679 SkDstOutXfermode(SkFlattenableReadBuffer& buffer) | 1686 SkDstOutXfermode(SkFlattenableReadBuffer& buffer) |
| 1680 : INHERITED(buffer) {} | 1687 : INHERITED(buffer) {} |
| 1681 | |
| 1682 typedef SkProcCoeffXfermode INHERITED; | |
| 1683 }; | 1688 }; |
| 1684 | 1689 |
| 1685 void SkDstOutXfermode::xfer32(SkPMColor* SK_RESTRICT dst, | 1690 void SkDstOutXfermode::xfer32(SkPMColor* SK_RESTRICT dst, |
| 1686 const SkPMColor* SK_RESTRICT src, int count, | 1691 const SkPMColor* SK_RESTRICT src, int count, |
| 1687 const SkAlpha* SK_RESTRICT aa) const { | 1692 const SkAlpha* SK_RESTRICT aa) const { |
| 1688 SkASSERT(dst && src); | 1693 SkASSERT(dst && src); |
| 1689 | 1694 |
| 1690 if (count <= 0) { | 1695 if (count <= 0) { |
| 1691 return; | 1696 return; |
| 1692 } | 1697 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1703 } | 1708 } |
| 1704 | 1709 |
| 1705 #ifdef SK_DEVELOPER | 1710 #ifdef SK_DEVELOPER |
| 1706 void SkDstOutXfermode::toString(SkString* str) const { | 1711 void SkDstOutXfermode::toString(SkString* str) const { |
| 1707 this->INHERITED::toString(str); | 1712 this->INHERITED::toString(str); |
| 1708 } | 1713 } |
| 1709 #endif | 1714 #endif |
| 1710 | 1715 |
| 1711 /////////////////////////////////////////////////////////////////////////////// | 1716 /////////////////////////////////////////////////////////////////////////////// |
| 1712 | 1717 |
| 1718 SkFlattenable::Factory SkProcXfermode::GetFactory(SkFlattenable::Type type) { |
| 1719 switch(type) { |
| 1720 case SkFlattenable::kSkClearXfermode: |
| 1721 return SkClearXfermode::CreateProc; |
| 1722 case SkFlattenable::kSkDstInXfermode: |
| 1723 return SkDstInXfermode::CreateProc; |
| 1724 case SkFlattenable::kSkDstOutXfermode: |
| 1725 return SkDstOutXfermode::CreateProc; |
| 1726 case SkFlattenable::kSkProcCoeffXfermode: |
| 1727 return SkProcCoeffXfermode::CreateProc; |
| 1728 case SkFlattenable::kSkSrcXfermode: |
| 1729 return SkSrcXfermode::CreateProc; |
| 1730 default: |
| 1731 break; |
| 1732 } |
| 1733 return NULL; |
| 1734 } |
| 1735 |
| 1736 SkFlattenable::TypeCheck SkProcXfermode::GetTypeCheck(SkFlattenable::Type type)
{ |
| 1737 switch(type) { |
| 1738 case SkFlattenable::kSkClearXfermode: |
| 1739 return SkClearXfermode::IsA; |
| 1740 case SkFlattenable::kSkDstInXfermode: |
| 1741 return SkDstInXfermode::IsA; |
| 1742 case SkFlattenable::kSkDstOutXfermode: |
| 1743 return SkDstOutXfermode::IsA; |
| 1744 case SkFlattenable::kSkProcCoeffXfermode: |
| 1745 return SkProcCoeffXfermode::IsA; |
| 1746 case SkFlattenable::kSkSrcXfermode: |
| 1747 return SkSrcXfermode::IsA; |
| 1748 default: |
| 1749 break; |
| 1750 } |
| 1751 return NULL; |
| 1752 } |
| 1753 |
| 1754 /////////////////////////////////////////////////////////////////////////////// |
| 1755 |
| 1713 SkXfermode* SkXfermode::Create(Mode mode) { | 1756 SkXfermode* SkXfermode::Create(Mode mode) { |
| 1714 SkASSERT(SK_ARRAY_COUNT(gProcCoeffs) == kModeCount); | 1757 SkASSERT(SK_ARRAY_COUNT(gProcCoeffs) == kModeCount); |
| 1715 SkASSERT((unsigned)mode < kModeCount); | 1758 SkASSERT((unsigned)mode < kModeCount); |
| 1716 | 1759 |
| 1717 const ProcCoeff& rec = gProcCoeffs[mode]; | 1760 const ProcCoeff& rec = gProcCoeffs[mode]; |
| 1718 | 1761 |
| 1719 switch (mode) { | 1762 switch (mode) { |
| 1720 case kClear_Mode: | 1763 case kClear_Mode: |
| 1721 return SkNEW_ARGS(SkClearXfermode, (rec)); | 1764 return SkNEW_ARGS(SkClearXfermode, (rec)); |
| 1722 case kSrc_Mode: | 1765 case kSrc_Mode: |
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1963 return proc16; | 2006 return proc16; |
| 1964 } | 2007 } |
| 1965 | 2008 |
| 1966 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode) | 2009 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode) |
| 1967 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode) | 2010 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode) |
| 1968 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkClearXfermode) | 2011 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkClearXfermode) |
| 1969 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSrcXfermode) | 2012 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSrcXfermode) |
| 1970 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstInXfermode) | 2013 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstInXfermode) |
| 1971 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstOutXfermode) | 2014 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstOutXfermode) |
| 1972 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 2015 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
| OLD | NEW |