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 1357 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))); | 1368 static AutoEffectUnref gEffect(SkNEW_ARGS(XferEffect, (static_cast<SkXfermod
e::Mode>(mode), NULL))); |
1369 return CreateEffectRef(gEffect); | 1369 return CreateEffectRef(gEffect); |
1370 } | 1370 } |
1371 | 1371 |
1372 #endif | 1372 #endif |
1373 | 1373 |
1374 /////////////////////////////////////////////////////////////////////////////// | 1374 /////////////////////////////////////////////////////////////////////////////// |
1375 /////////////////////////////////////////////////////////////////////////////// | 1375 /////////////////////////////////////////////////////////////////////////////// |
1376 | 1376 |
1377 class SkProcCoeffXfermode : public SkProcXfermode { | 1377 class SkProcCoeffXfermode : public SkProcXfermode { |
| 1378 typedef SkProcXfermode INHERITED; |
| 1379 |
1378 public: | 1380 public: |
1379 SkProcCoeffXfermode(const ProcCoeff& rec, Mode mode) | 1381 SkProcCoeffXfermode(const ProcCoeff& rec, Mode mode) |
1380 : INHERITED(rec.fProc) { | 1382 : INHERITED(rec.fProc) { |
1381 fMode = mode; | 1383 fMode = mode; |
1382 // these may be valid, or may be CANNOT_USE_COEFF | 1384 // these may be valid, or may be CANNOT_USE_COEFF |
1383 fSrcCoeff = rec.fSC; | 1385 fSrcCoeff = rec.fSC; |
1384 fDstCoeff = rec.fDC; | 1386 fDstCoeff = rec.fDC; |
1385 } | 1387 } |
1386 | 1388 |
1387 virtual bool asMode(Mode* mode) const SK_OVERRIDE { | 1389 virtual bool asMode(Mode* mode) const SK_OVERRIDE { |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1441 } | 1443 } |
1442 | 1444 |
1443 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE { | 1445 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE { |
1444 this->INHERITED::flatten(buffer); | 1446 this->INHERITED::flatten(buffer); |
1445 buffer.write32(fMode); | 1447 buffer.write32(fMode); |
1446 } | 1448 } |
1447 | 1449 |
1448 private: | 1450 private: |
1449 Mode fMode; | 1451 Mode fMode; |
1450 Coeff fSrcCoeff, fDstCoeff; | 1452 Coeff fSrcCoeff, fDstCoeff; |
1451 | |
1452 typedef SkProcXfermode INHERITED; | |
1453 }; | 1453 }; |
1454 | 1454 |
1455 const char* SkXfermode::ModeName(Mode mode) { | 1455 const char* SkXfermode::ModeName(Mode mode) { |
1456 SkASSERT((unsigned) mode <= (unsigned)kLastMode); | 1456 SkASSERT((unsigned) mode <= (unsigned)kLastMode); |
1457 const char* gModeStrings[] = { | 1457 const char* gModeStrings[] = { |
1458 "Clear", "Src", "Dst", "SrcOver", "DstOver", "SrcIn", "DstIn", | 1458 "Clear", "Src", "Dst", "SrcOver", "DstOver", "SrcIn", "DstIn", |
1459 "SrcOut", "DstOut", "SrcATop", "DstATop", "Xor", "Plus", | 1459 "SrcOut", "DstOut", "SrcATop", "DstATop", "Xor", "Plus", |
1460 "Modulate", "Screen", "Overlay", "Darken", "Lighten", "ColorDodge", | 1460 "Modulate", "Screen", "Overlay", "Darken", "Lighten", "ColorDodge", |
1461 "ColorBurn", "HardLight", "SoftLight", "Difference", "Exclusion", | 1461 "ColorBurn", "HardLight", "SoftLight", "Difference", "Exclusion", |
1462 "Multiply", "Hue", "Saturation", "Color", "Luminosity" | 1462 "Multiply", "Hue", "Saturation", "Color", "Luminosity" |
(...skipping 25 matching lines...) Expand all Loading... |
1488 str->append("can't use"); | 1488 str->append("can't use"); |
1489 } else { | 1489 } else { |
1490 str->append(gCoeffStrings[fDstCoeff]); | 1490 str->append(gCoeffStrings[fDstCoeff]); |
1491 } | 1491 } |
1492 } | 1492 } |
1493 #endif | 1493 #endif |
1494 | 1494 |
1495 /////////////////////////////////////////////////////////////////////////////// | 1495 /////////////////////////////////////////////////////////////////////////////// |
1496 | 1496 |
1497 class SkClearXfermode : public SkProcCoeffXfermode { | 1497 class SkClearXfermode : public SkProcCoeffXfermode { |
| 1498 typedef SkProcCoeffXfermode INHERITED; |
| 1499 |
1498 public: | 1500 public: |
1499 SkClearXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kClear_Mode
) {} | 1501 SkClearXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kClear_Mode
) {} |
1500 | 1502 |
1501 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const
SK_OVERRIDE; | 1503 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; | 1504 virtual void xferA8(SkAlpha*, const SkPMColor*, int, const SkAlpha*) const S
K_OVERRIDE; |
1503 | 1505 |
1504 SK_DEVELOPER_TO_STRING() | 1506 SK_DEVELOPER_TO_STRING() |
1505 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkClearXfermode) | 1507 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkClearXfermode) |
1506 | 1508 |
1507 private: | 1509 private: |
1508 SkClearXfermode(SkFlattenableReadBuffer& buffer) | 1510 SkClearXfermode(SkFlattenableReadBuffer& buffer) |
1509 : SkProcCoeffXfermode(buffer) {} | 1511 : SkProcCoeffXfermode(buffer) {} |
1510 | |
1511 typedef SkProcCoeffXfermode INHERITED; | |
1512 }; | 1512 }; |
1513 | 1513 |
1514 void SkClearXfermode::xfer32(SkPMColor* SK_RESTRICT dst, | 1514 void SkClearXfermode::xfer32(SkPMColor* SK_RESTRICT dst, |
1515 const SkPMColor* SK_RESTRICT, int count, | 1515 const SkPMColor* SK_RESTRICT, int count, |
1516 const SkAlpha* SK_RESTRICT aa) const { | 1516 const SkAlpha* SK_RESTRICT aa) const { |
1517 SkASSERT(dst && count >= 0); | 1517 SkASSERT(dst && count >= 0); |
1518 | 1518 |
1519 if (NULL == aa) { | 1519 if (NULL == aa) { |
1520 memset(dst, 0, count << 2); | 1520 memset(dst, 0, count << 2); |
1521 } else { | 1521 } else { |
(...skipping 28 matching lines...) Expand all Loading... |
1550 | 1550 |
1551 #ifdef SK_DEVELOPER | 1551 #ifdef SK_DEVELOPER |
1552 void SkClearXfermode::toString(SkString* str) const { | 1552 void SkClearXfermode::toString(SkString* str) const { |
1553 this->INHERITED::toString(str); | 1553 this->INHERITED::toString(str); |
1554 } | 1554 } |
1555 #endif | 1555 #endif |
1556 | 1556 |
1557 /////////////////////////////////////////////////////////////////////////////// | 1557 /////////////////////////////////////////////////////////////////////////////// |
1558 | 1558 |
1559 class SkSrcXfermode : public SkProcCoeffXfermode { | 1559 class SkSrcXfermode : public SkProcCoeffXfermode { |
| 1560 typedef SkProcCoeffXfermode INHERITED; |
| 1561 |
1560 public: | 1562 public: |
1561 SkSrcXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kSrc_Mode) {} | 1563 SkSrcXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kSrc_Mode) {} |
1562 | 1564 |
1563 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const
SK_OVERRIDE; | 1565 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; | 1566 virtual void xferA8(SkAlpha*, const SkPMColor*, int, const SkAlpha*) const S
K_OVERRIDE; |
1565 | 1567 |
1566 SK_DEVELOPER_TO_STRING() | 1568 SK_DEVELOPER_TO_STRING() |
1567 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSrcXfermode) | 1569 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSrcXfermode) |
1568 | 1570 |
1569 private: | 1571 private: |
1570 SkSrcXfermode(SkFlattenableReadBuffer& buffer) | 1572 SkSrcXfermode(SkFlattenableReadBuffer& buffer) |
1571 : SkProcCoeffXfermode(buffer) {} | 1573 : SkProcCoeffXfermode(buffer) {} |
1572 | |
1573 typedef SkProcCoeffXfermode INHERITED; | |
1574 }; | 1574 }; |
1575 | 1575 |
1576 void SkSrcXfermode::xfer32(SkPMColor* SK_RESTRICT dst, | 1576 void SkSrcXfermode::xfer32(SkPMColor* SK_RESTRICT dst, |
1577 const SkPMColor* SK_RESTRICT src, int count, | 1577 const SkPMColor* SK_RESTRICT src, int count, |
1578 const SkAlpha* SK_RESTRICT aa) const { | 1578 const SkAlpha* SK_RESTRICT aa) const { |
1579 SkASSERT(dst && src && count >= 0); | 1579 SkASSERT(dst && src && count >= 0); |
1580 | 1580 |
1581 if (NULL == aa) { | 1581 if (NULL == aa) { |
1582 memcpy(dst, src, count << 2); | 1582 memcpy(dst, src, count << 2); |
1583 } else { | 1583 } else { |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1617 } | 1617 } |
1618 #ifdef SK_DEVELOPER | 1618 #ifdef SK_DEVELOPER |
1619 void SkSrcXfermode::toString(SkString* str) const { | 1619 void SkSrcXfermode::toString(SkString* str) const { |
1620 this->INHERITED::toString(str); | 1620 this->INHERITED::toString(str); |
1621 } | 1621 } |
1622 #endif | 1622 #endif |
1623 | 1623 |
1624 /////////////////////////////////////////////////////////////////////////////// | 1624 /////////////////////////////////////////////////////////////////////////////// |
1625 | 1625 |
1626 class SkDstInXfermode : public SkProcCoeffXfermode { | 1626 class SkDstInXfermode : public SkProcCoeffXfermode { |
| 1627 typedef SkProcCoeffXfermode INHERITED; |
| 1628 |
1627 public: | 1629 public: |
1628 SkDstInXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kDstIn_Mode
) {} | 1630 SkDstInXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kDstIn_Mode
) {} |
1629 | 1631 |
1630 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const
SK_OVERRIDE; | 1632 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const
SK_OVERRIDE; |
1631 | 1633 |
1632 SK_DEVELOPER_TO_STRING() | 1634 SK_DEVELOPER_TO_STRING() |
1633 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDstInXfermode) | 1635 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDstInXfermode) |
1634 | 1636 |
1635 private: | 1637 private: |
1636 SkDstInXfermode(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {} | 1638 SkDstInXfermode(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {} |
1637 | |
1638 typedef SkProcCoeffXfermode INHERITED; | |
1639 }; | 1639 }; |
1640 | 1640 |
1641 void SkDstInXfermode::xfer32(SkPMColor* SK_RESTRICT dst, | 1641 void SkDstInXfermode::xfer32(SkPMColor* SK_RESTRICT dst, |
1642 const SkPMColor* SK_RESTRICT src, int count, | 1642 const SkPMColor* SK_RESTRICT src, int count, |
1643 const SkAlpha* SK_RESTRICT aa) const { | 1643 const SkAlpha* SK_RESTRICT aa) const { |
1644 SkASSERT(dst && src); | 1644 SkASSERT(dst && src); |
1645 | 1645 |
1646 if (count <= 0) { | 1646 if (count <= 0) { |
1647 return; | 1647 return; |
1648 } | 1648 } |
(...skipping 11 matching lines...) Expand all Loading... |
1660 | 1660 |
1661 #ifdef SK_DEVELOPER | 1661 #ifdef SK_DEVELOPER |
1662 void SkDstInXfermode::toString(SkString* str) const { | 1662 void SkDstInXfermode::toString(SkString* str) const { |
1663 this->INHERITED::toString(str); | 1663 this->INHERITED::toString(str); |
1664 } | 1664 } |
1665 #endif | 1665 #endif |
1666 | 1666 |
1667 /////////////////////////////////////////////////////////////////////////////// | 1667 /////////////////////////////////////////////////////////////////////////////// |
1668 | 1668 |
1669 class SkDstOutXfermode : public SkProcCoeffXfermode { | 1669 class SkDstOutXfermode : public SkProcCoeffXfermode { |
| 1670 typedef SkProcCoeffXfermode INHERITED; |
| 1671 |
1670 public: | 1672 public: |
1671 SkDstOutXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kDstOut_Mo
de) {} | 1673 SkDstOutXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kDstOut_Mo
de) {} |
1672 | 1674 |
1673 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const
SK_OVERRIDE; | 1675 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const
SK_OVERRIDE; |
1674 | 1676 |
1675 SK_DEVELOPER_TO_STRING() | 1677 SK_DEVELOPER_TO_STRING() |
1676 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDstOutXfermode) | 1678 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDstOutXfermode) |
1677 | 1679 |
1678 private: | 1680 private: |
1679 SkDstOutXfermode(SkFlattenableReadBuffer& buffer) | 1681 SkDstOutXfermode(SkFlattenableReadBuffer& buffer) |
1680 : INHERITED(buffer) {} | 1682 : INHERITED(buffer) {} |
1681 | |
1682 typedef SkProcCoeffXfermode INHERITED; | |
1683 }; | 1683 }; |
1684 | 1684 |
1685 void SkDstOutXfermode::xfer32(SkPMColor* SK_RESTRICT dst, | 1685 void SkDstOutXfermode::xfer32(SkPMColor* SK_RESTRICT dst, |
1686 const SkPMColor* SK_RESTRICT src, int count, | 1686 const SkPMColor* SK_RESTRICT src, int count, |
1687 const SkAlpha* SK_RESTRICT aa) const { | 1687 const SkAlpha* SK_RESTRICT aa) const { |
1688 SkASSERT(dst && src); | 1688 SkASSERT(dst && src); |
1689 | 1689 |
1690 if (count <= 0) { | 1690 if (count <= 0) { |
1691 return; | 1691 return; |
1692 } | 1692 } |
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1963 return proc16; | 1963 return proc16; |
1964 } | 1964 } |
1965 | 1965 |
1966 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode) | 1966 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode) |
1967 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode) | 1967 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode) |
1968 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkClearXfermode) | 1968 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkClearXfermode) |
1969 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSrcXfermode) | 1969 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSrcXfermode) |
1970 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstInXfermode) | 1970 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstInXfermode) |
1971 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstOutXfermode) | 1971 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstOutXfermode) |
1972 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 1972 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
OLD | NEW |