// static SkPDFGraphicState* SkPDFGraphicState::GetSMaskGraphicState( SkPDFFormXObject* sMask, bool invert, SkPDFSMaskMode sMaskMode) { // The practical chances of using the same mask more than once are unlikely // enough that it's not worth canonicalizing. SkAutoMutexAcquire lock(CanonicalPaintsMutex()); SkAutoTUnref<SkPDFDict> sMaskDict(new SkPDFDict("Mask")); if (sMaskMode == kAlpha_SMaskMode) { sMaskDict->insertName("S", "Alpha"); } else if (sMaskMode == kLuminosity_SMaskMode) { sMaskDict->insertName("S", "Luminosity"); } sMaskDict->insert("G", new SkPDFObjRef(sMask))->unref(); SkPDFGraphicState* result = new SkPDFGraphicState; result->fPopulated = true; result->fSMask = true; result->insertName("Type", "ExtGState"); result->insert("SMask", sMaskDict.get()); result->fResources.push(sMask); sMask->ref(); if (invert) { SkPDFObject* invertFunction = GetInvertFunction(); result->fResources.push(invertFunction); invertFunction->ref(); sMaskDict->insert("TR", new SkPDFObjRef(invertFunction))->unref(); } return result; }
// static SkPDFDict* SkPDFGraphicState::GetSMaskGraphicState(SkPDFFormXObject* sMask, bool invert, SkPDFSMaskMode sMaskMode) { // The practical chances of using the same mask more than once are unlikely // enough that it's not worth canonicalizing. SkAutoTUnref<SkPDFDict> sMaskDict(new SkPDFDict("Mask")); if (sMaskMode == kAlpha_SMaskMode) { sMaskDict->insertName("S", "Alpha"); } else if (sMaskMode == kLuminosity_SMaskMode) { sMaskDict->insertName("S", "Luminosity"); } sMaskDict->insertObjRef("G", SkRef(sMask)); if (invert) { sMaskDict->insertObjRef("TR", SkRef(invertFunction.get())); } SkPDFDict* result = new SkPDFDict("ExtGState"); result->insertObject("SMask", sMaskDict.detach()); return result; }