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 1219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1230 int mode = rand->nextRangeU(SkXfermode::kLastCoeffMode + 1, SkXfermode::kLas
tSeparableMode); | 1230 int mode = rand->nextRangeU(SkXfermode::kLastCoeffMode + 1, SkXfermode::kLas
tSeparableMode); |
1231 | 1231 |
1232 return SkNEW_ARGS(XferEffect, (static_cast<SkXfermode::Mode>(mode), NULL)); | 1232 return SkNEW_ARGS(XferEffect, (static_cast<SkXfermode::Mode>(mode), NULL)); |
1233 } | 1233 } |
1234 | 1234 |
1235 #endif | 1235 #endif |
1236 | 1236 |
1237 /////////////////////////////////////////////////////////////////////////////// | 1237 /////////////////////////////////////////////////////////////////////////////// |
1238 /////////////////////////////////////////////////////////////////////////////// | 1238 /////////////////////////////////////////////////////////////////////////////// |
1239 | 1239 |
| 1240 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING |
| 1241 SkProcCoeffXfermode::SkProcCoeffXfermode(SkReadBuffer& buffer) : INHERITED(buffe
r) { |
| 1242 uint32_t mode32 = buffer.read32() % SK_ARRAY_COUNT(gProcCoeffs); |
| 1243 if (mode32 >= SK_ARRAY_COUNT(gProcCoeffs)) { |
| 1244 // out of range, just set to something harmless |
| 1245 mode32 = SkXfermode::kSrcOut_Mode; |
| 1246 } |
| 1247 fMode = (SkXfermode::Mode)mode32; |
| 1248 |
| 1249 const ProcCoeff& rec = gProcCoeffs[fMode]; |
| 1250 fProc = rec.fProc; |
| 1251 // these may be valid, or may be CANNOT_USE_COEFF |
| 1252 fSrcCoeff = rec.fSC; |
| 1253 fDstCoeff = rec.fDC; |
| 1254 } |
| 1255 #endif |
| 1256 |
1240 SkFlattenable* SkProcCoeffXfermode::CreateProc(SkReadBuffer& buffer) { | 1257 SkFlattenable* SkProcCoeffXfermode::CreateProc(SkReadBuffer& buffer) { |
1241 uint32_t mode32 = buffer.read32(); | 1258 uint32_t mode32 = buffer.read32(); |
1242 if (!buffer.validate(mode32 < SK_ARRAY_COUNT(gProcCoeffs))) { | 1259 if (!buffer.validate(mode32 < SK_ARRAY_COUNT(gProcCoeffs))) { |
1243 return NULL; | 1260 return NULL; |
1244 } | 1261 } |
1245 return SkXfermode::Create((SkXfermode::Mode)mode32); | 1262 return SkXfermode::Create((SkXfermode::Mode)mode32); |
1246 } | 1263 } |
1247 | 1264 |
1248 void SkProcCoeffXfermode::flatten(SkWriteBuffer& buffer) const { | 1265 void SkProcCoeffXfermode::flatten(SkWriteBuffer& buffer) const { |
1249 buffer.write32(fMode); | 1266 buffer.write32(fMode); |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1419 return SkNEW_ARGS(SkClearXfermode, (rec)); | 1436 return SkNEW_ARGS(SkClearXfermode, (rec)); |
1420 } | 1437 } |
1421 | 1438 |
1422 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const
SK_OVERRIDE; | 1439 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const
SK_OVERRIDE; |
1423 virtual void xferA8(SkAlpha*, const SkPMColor*, int, const SkAlpha*) const S
K_OVERRIDE; | 1440 virtual void xferA8(SkAlpha*, const SkPMColor*, int, const SkAlpha*) const S
K_OVERRIDE; |
1424 | 1441 |
1425 SK_TO_STRING_OVERRIDE() | 1442 SK_TO_STRING_OVERRIDE() |
1426 | 1443 |
1427 private: | 1444 private: |
1428 SkClearXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kClear_Mode
) {} | 1445 SkClearXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kClear_Mode
) {} |
| 1446 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING |
| 1447 SkClearXfermode(SkReadBuffer& buffer) : SkProcCoeffXfermode(buffer) {} |
| 1448 #endif |
1429 | 1449 |
1430 typedef SkProcCoeffXfermode INHERITED; | 1450 typedef SkProcCoeffXfermode INHERITED; |
1431 }; | 1451 }; |
1432 | 1452 |
1433 void SkClearXfermode::xfer32(SkPMColor* SK_RESTRICT dst, | 1453 void SkClearXfermode::xfer32(SkPMColor* SK_RESTRICT dst, |
1434 const SkPMColor* SK_RESTRICT, int count, | 1454 const SkPMColor* SK_RESTRICT, int count, |
1435 const SkAlpha* SK_RESTRICT aa) const { | 1455 const SkAlpha* SK_RESTRICT aa) const { |
1436 SkASSERT(dst && count >= 0); | 1456 SkASSERT(dst && count >= 0); |
1437 | 1457 |
1438 if (NULL == aa) { | 1458 if (NULL == aa) { |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1481 return SkNEW_ARGS(SkSrcXfermode, (rec)); | 1501 return SkNEW_ARGS(SkSrcXfermode, (rec)); |
1482 } | 1502 } |
1483 | 1503 |
1484 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const
SK_OVERRIDE; | 1504 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const
SK_OVERRIDE; |
1485 virtual void xferA8(SkAlpha*, const SkPMColor*, int, const SkAlpha*) const S
K_OVERRIDE; | 1505 virtual void xferA8(SkAlpha*, const SkPMColor*, int, const SkAlpha*) const S
K_OVERRIDE; |
1486 | 1506 |
1487 SK_TO_STRING_OVERRIDE() | 1507 SK_TO_STRING_OVERRIDE() |
1488 | 1508 |
1489 private: | 1509 private: |
1490 SkSrcXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kSrc_Mode) {} | 1510 SkSrcXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kSrc_Mode) {} |
| 1511 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING |
| 1512 SkSrcXfermode(SkReadBuffer& buffer) : SkProcCoeffXfermode(buffer) {} |
| 1513 #endif |
1491 typedef SkProcCoeffXfermode INHERITED; | 1514 typedef SkProcCoeffXfermode INHERITED; |
1492 }; | 1515 }; |
1493 | 1516 |
1494 void SkSrcXfermode::xfer32(SkPMColor* SK_RESTRICT dst, | 1517 void SkSrcXfermode::xfer32(SkPMColor* SK_RESTRICT dst, |
1495 const SkPMColor* SK_RESTRICT src, int count, | 1518 const SkPMColor* SK_RESTRICT src, int count, |
1496 const SkAlpha* SK_RESTRICT aa) const { | 1519 const SkAlpha* SK_RESTRICT aa) const { |
1497 SkASSERT(dst && src && count >= 0); | 1520 SkASSERT(dst && src && count >= 0); |
1498 | 1521 |
1499 if (NULL == aa) { | 1522 if (NULL == aa) { |
1500 memcpy(dst, src, count << 2); | 1523 memcpy(dst, src, count << 2); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1546 static SkDstInXfermode* Create(const ProcCoeff& rec) { | 1569 static SkDstInXfermode* Create(const ProcCoeff& rec) { |
1547 return SkNEW_ARGS(SkDstInXfermode, (rec)); | 1570 return SkNEW_ARGS(SkDstInXfermode, (rec)); |
1548 } | 1571 } |
1549 | 1572 |
1550 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const
SK_OVERRIDE; | 1573 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const
SK_OVERRIDE; |
1551 | 1574 |
1552 SK_TO_STRING_OVERRIDE() | 1575 SK_TO_STRING_OVERRIDE() |
1553 | 1576 |
1554 private: | 1577 private: |
1555 SkDstInXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kDstIn_Mode
) {} | 1578 SkDstInXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kDstIn_Mode
) {} |
| 1579 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING |
| 1580 SkDstInXfermode(SkReadBuffer& buffer) : INHERITED(buffer) {} |
| 1581 #endif |
1556 | 1582 |
1557 typedef SkProcCoeffXfermode INHERITED; | 1583 typedef SkProcCoeffXfermode INHERITED; |
1558 }; | 1584 }; |
1559 | 1585 |
1560 void SkDstInXfermode::xfer32(SkPMColor* SK_RESTRICT dst, | 1586 void SkDstInXfermode::xfer32(SkPMColor* SK_RESTRICT dst, |
1561 const SkPMColor* SK_RESTRICT src, int count, | 1587 const SkPMColor* SK_RESTRICT src, int count, |
1562 const SkAlpha* SK_RESTRICT aa) const { | 1588 const SkAlpha* SK_RESTRICT aa) const { |
1563 SkASSERT(dst && src); | 1589 SkASSERT(dst && src); |
1564 | 1590 |
1565 if (count <= 0) { | 1591 if (count <= 0) { |
(...skipping 24 matching lines...) Expand all Loading... |
1590 static SkDstOutXfermode* Create(const ProcCoeff& rec) { | 1616 static SkDstOutXfermode* Create(const ProcCoeff& rec) { |
1591 return SkNEW_ARGS(SkDstOutXfermode, (rec)); | 1617 return SkNEW_ARGS(SkDstOutXfermode, (rec)); |
1592 } | 1618 } |
1593 | 1619 |
1594 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const
SK_OVERRIDE; | 1620 virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const
SK_OVERRIDE; |
1595 | 1621 |
1596 SK_TO_STRING_OVERRIDE() | 1622 SK_TO_STRING_OVERRIDE() |
1597 | 1623 |
1598 private: | 1624 private: |
1599 SkDstOutXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kDstOut_Mo
de) {} | 1625 SkDstOutXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kDstOut_Mo
de) {} |
| 1626 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING |
| 1627 SkDstOutXfermode(SkReadBuffer& buffer) : INHERITED(buffer) {} |
| 1628 #endif |
1600 | 1629 |
1601 typedef SkProcCoeffXfermode INHERITED; | 1630 typedef SkProcCoeffXfermode INHERITED; |
1602 }; | 1631 }; |
1603 | 1632 |
1604 void SkDstOutXfermode::xfer32(SkPMColor* SK_RESTRICT dst, | 1633 void SkDstOutXfermode::xfer32(SkPMColor* SK_RESTRICT dst, |
1605 const SkPMColor* SK_RESTRICT src, int count, | 1634 const SkPMColor* SK_RESTRICT src, int count, |
1606 const SkAlpha* SK_RESTRICT aa) const { | 1635 const SkAlpha* SK_RESTRICT aa) const { |
1607 SkASSERT(dst && src); | 1636 SkASSERT(dst && src); |
1608 | 1637 |
1609 if (count <= 0) { | 1638 if (count <= 0) { |
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1924 } else { | 1953 } else { |
1925 proc16 = rec.fProc16_General; | 1954 proc16 = rec.fProc16_General; |
1926 } | 1955 } |
1927 } | 1956 } |
1928 return proc16; | 1957 return proc16; |
1929 } | 1958 } |
1930 | 1959 |
1931 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode) | 1960 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode) |
1932 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode) | 1961 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode) |
1933 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 1962 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
OLD | NEW |