aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/pdf/SkPDFGraphicState.cpp
diff options
context:
space:
mode:
authorGravatar vandebo@chromium.org <vandebo@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-05-09 17:34:19 +0000
committerGravatar vandebo@chromium.org <vandebo@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-05-09 17:34:19 +0000
commit69d4ca32ec0d6e61061f7d3c321f1b9ced6dd3ea (patch)
treec5a7531e26cf710e809e3a326f4d3d2c1c1a6e9f /src/pdf/SkPDFGraphicState.cpp
parent20efde71b4fd28691b10c8f1cfe15cb2aafddaea (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.cpp35
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;
}