diff options
author | 2011-05-09 17:34:19 +0000 | |
---|---|---|
committer | 2011-05-09 17:34:19 +0000 | |
commit | 69d4ca32ec0d6e61061f7d3c321f1b9ced6dd3ea (patch) | |
tree | c5a7531e26cf710e809e3a326f4d3d2c1c1a6e9f /src/pdf/SkPDFGraphicState.cpp | |
parent | 20efde71b4fd28691b10c8f1cfe15cb2aafddaea (diff) |
[PDF] Fix bug in graphic state comparison.
SkPDFGraphicState::GSCanonicalEntry::operator== was out of sync with SkPDFGraphicState::populateDict leading to graphic state objects with the same value.
Review URL: http://codereview.appspot.com/4516043
git-svn-id: http://skia.googlecode.com/svn/trunk@1278 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/pdf/SkPDFGraphicState.cpp')
-rw-r--r-- | src/pdf/SkPDFGraphicState.cpp | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/src/pdf/SkPDFGraphicState.cpp b/src/pdf/SkPDFGraphicState.cpp index 730dc29c69..e5badae663 100644 --- a/src/pdf/SkPDFGraphicState.cpp +++ b/src/pdf/SkPDFGraphicState.cpp @@ -179,20 +179,29 @@ bool SkPDFGraphicState::GSCanonicalEntry::operator==( return false; } - SkXfermode* aXfermode = a->getXfermode(); SkXfermode::Mode aXfermodeName = SkXfermode::kSrcOver_Mode; - bool aXfermodeKnown = true; - if (aXfermode) - aXfermodeKnown = aXfermode->asMode(&aXfermodeName); - SkXfermode* bXfermode = b->getXfermode(); + SkXfermode* aXfermode = a->getXfermode(); + if (aXfermode) { + aXfermode->asMode(&aXfermodeName); + } + if (aXfermodeName < 0 || aXfermodeName > SkXfermode::kLastMode || + blendModeFromXfermode(aXfermodeName) == NULL) { + aXfermodeName = SkXfermode::kSrcOver_Mode; + } + const char* aXfermodeString = blendModeFromXfermode(aXfermodeName); + SkASSERT(aXfermodeString != NULL); + SkXfermode::Mode bXfermodeName = SkXfermode::kSrcOver_Mode; - bool bXfermodeKnown = true; - if (bXfermode) - bXfermodeKnown = bXfermode->asMode(&bXfermodeName); + SkXfermode* bXfermode = b->getXfermode(); + if (bXfermode) { + bXfermode->asMode(&bXfermodeName); + } + if (bXfermodeName < 0 || bXfermodeName > SkXfermode::kLastMode || + blendModeFromXfermode(bXfermodeName) == NULL) { + bXfermodeName = SkXfermode::kSrcOver_Mode; + } + const char* bXfermodeString = blendModeFromXfermode(bXfermodeName); + SkASSERT(bXfermodeString != NULL); - if (aXfermodeKnown != bXfermodeKnown) - return false; - if (!aXfermodeKnown) - return aXfermode == bXfermode; - return aXfermodeName == bXfermodeName; + return strcmp(aXfermodeString, bXfermodeString) == 0; } |