Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(343)

Side by Side Diff: src/core/SkXfermode.cpp

Issue 23021015: Initial error handling code (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Minor comment fixes Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 1377 matching lines...) Expand 10 before | Expand all | Expand 10 after
1402 return false; 1403 return false;
1403 } 1404 }
1404 #endif 1405 #endif
1405 1406
1406 SK_DEVELOPER_TO_STRING() 1407 SK_DEVELOPER_TO_STRING()
1407 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkProcCoeffXfermode) 1408 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkProcCoeffXfermode)
1408 1409
1409 protected: 1410 protected:
1410 SkProcCoeffXfermode(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { 1411 SkProcCoeffXfermode(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {
1411 fMode = (SkXfermode::Mode)buffer.read32(); 1412 fMode = (SkXfermode::Mode)buffer.read32();
1412 1413 bool modeIsValid = SkIsValidMode(fMode);
1413 const ProcCoeff& rec = gProcCoeffs[fMode]; 1414 if (modeIsValid) {
1414 // these may be valid, or may be CANNOT_USE_COEFF 1415 const ProcCoeff& rec = gProcCoeffs[fMode];
1415 fSrcCoeff = rec.fSC; 1416 // these may be valid, or may be CANNOT_USE_COEFF
1416 fDstCoeff = rec.fDC; 1417 fSrcCoeff = rec.fSC;
1417 // now update our function-ptr in the super class 1418 fDstCoeff = rec.fDC;
1418 this->INHERITED::setProc(rec.fProc); 1419 // now update our function-ptr in the super class
1420 this->INHERITED::setProc(rec.fProc);
1421 } else {
1422 fSrcCoeff = fDstCoeff = CANNOT_USE_COEFF;
1423 }
1424 buffer.validate(modeIsValid &&
1425 (SkIsValidCoeff(fSrcCoeff) || (fSrcCoeff == CANNOT_USE_C OEFF)) &&
1426 (SkIsValidCoeff(fDstCoeff) || (fDstCoeff == CANNOT_USE_C OEFF)));
1419 } 1427 }
1420 1428
1421 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE { 1429 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE {
1422 this->INHERITED::flatten(buffer); 1430 this->INHERITED::flatten(buffer);
1423 buffer.write32(fMode); 1431 buffer.write32(fMode);
1424 } 1432 }
1425 1433
1426 private: 1434 private:
1427 Mode fMode; 1435 Mode fMode;
1428 Coeff fSrcCoeff, fDstCoeff; 1436 Coeff fSrcCoeff, fDstCoeff;
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
1681 } 1689 }
1682 1690
1683 #ifdef SK_DEVELOPER 1691 #ifdef SK_DEVELOPER
1684 void SkDstOutXfermode::toString(SkString* str) const { 1692 void SkDstOutXfermode::toString(SkString* str) const {
1685 this->INHERITED::toString(str); 1693 this->INHERITED::toString(str);
1686 } 1694 }
1687 #endif 1695 #endif
1688 1696
1689 /////////////////////////////////////////////////////////////////////////////// 1697 ///////////////////////////////////////////////////////////////////////////////
1690 1698
1699 SkFlattenable::Factory SkProcXfermode::GetFactory(SkFlattenable::Type type) {
1700 switch(type) {
1701 case SkFlattenable::kSkClearXfermode_Type:
1702 return SkClearXfermode::CreateProc;
1703 case SkFlattenable::kSkDstInXfermode_Type:
1704 return SkDstInXfermode::CreateProc;
1705 case SkFlattenable::kSkDstOutXfermode_Type:
1706 return SkDstOutXfermode::CreateProc;
1707 case SkFlattenable::kSkProcCoeffXfermode_Type:
1708 return SkProcCoeffXfermode::CreateProc;
1709 case SkFlattenable::kSkSrcXfermode_Type:
1710 return SkSrcXfermode::CreateProc;
1711 default:
1712 break;
1713 }
1714 return NULL;
1715 }
1716
1717 SkFlattenable::TypeCheck SkProcXfermode::GetTypeCheck(SkFlattenable::Type type) {
1718 switch(type) {
1719 case SkFlattenable::kSkClearXfermode_Type:
1720 return SkClearXfermode::IsA;
1721 case SkFlattenable::kSkDstInXfermode_Type:
1722 return SkDstInXfermode::IsA;
1723 case SkFlattenable::kSkDstOutXfermode_Type:
1724 return SkDstOutXfermode::IsA;
1725 case SkFlattenable::kSkProcCoeffXfermode_Type:
1726 return SkProcCoeffXfermode::IsA;
1727 case SkFlattenable::kSkSrcXfermode_Type:
1728 return SkSrcXfermode::IsA;
1729 default:
1730 break;
1731 }
1732 return NULL;
1733 }
1734
1735 ///////////////////////////////////////////////////////////////////////////////
1736
1691 SkXfermode* SkXfermode::Create(Mode mode) { 1737 SkXfermode* SkXfermode::Create(Mode mode) {
1692 SkASSERT(SK_ARRAY_COUNT(gProcCoeffs) == kModeCount); 1738 SkASSERT(SK_ARRAY_COUNT(gProcCoeffs) == kModeCount);
1693 SkASSERT((unsigned)mode < kModeCount); 1739 SkASSERT((unsigned)mode < kModeCount);
1694 1740
1695 const ProcCoeff& rec = gProcCoeffs[mode]; 1741 const ProcCoeff& rec = gProcCoeffs[mode];
1696 1742
1697 switch (mode) { 1743 switch (mode) {
1698 case kClear_Mode: 1744 case kClear_Mode:
1699 return SkNEW_ARGS(SkClearXfermode, (rec)); 1745 return SkNEW_ARGS(SkClearXfermode, (rec));
1700 case kSrc_Mode: 1746 case kSrc_Mode:
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
1941 return proc16; 1987 return proc16;
1942 } 1988 }
1943 1989
1944 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode) 1990 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode)
1945 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode) 1991 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode)
1946 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkClearXfermode) 1992 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkClearXfermode)
1947 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSrcXfermode) 1993 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSrcXfermode)
1948 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstInXfermode) 1994 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstInXfermode)
1949 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstOutXfermode) 1995 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstOutXfermode)
1950 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END 1996 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698