diff options
Diffstat (limited to 'src/pdf/SkPDFGraphicState.cpp')
-rw-r--r-- | src/pdf/SkPDFGraphicState.cpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/pdf/SkPDFGraphicState.cpp b/src/pdf/SkPDFGraphicState.cpp index 7c4c5e30eb..19e9a36d05 100644 --- a/src/pdf/SkPDFGraphicState.cpp +++ b/src/pdf/SkPDFGraphicState.cpp @@ -126,7 +126,7 @@ SkPDFGraphicState* SkPDFGraphicState::GetGraphicStateForPaint( return pdfGraphicState; } -static SkPDFObject* create_invert_function() { +static SkPDFStream* create_invert_function() { // Acrobat crashes if we use a type 0 function, kpdf crashes if we use // a type 2 function, so we use a type 4 function. auto domainAndRange = sk_make_sp<SkPDFArray>(); @@ -141,12 +141,17 @@ static SkPDFObject* create_invert_function() { auto invertFunction = sk_make_sp<SkPDFStream>(psInvertStream.get()); invertFunction->insertInt("FunctionType", 4); - invertFunction->insertObject("Domain", SkRef(domainAndRange.get())); - invertFunction->insertObject("Range", domainAndRange.release()); + invertFunction->insertObject("Domain", domainAndRange); + invertFunction->insertObject("Range", std::move(domainAndRange)); return invertFunction.release(); } -SK_DECLARE_STATIC_ONCE_PTR(SkPDFObject, invertFunction); +SK_DECLARE_STATIC_ONCE_PTR(SkPDFStream, invertFunction); + +static sk_sp<SkPDFStream> make_invert_function() { + return sk_sp<SkPDFStream>( + SkRef(invertFunction.get(create_invert_function))); +} // static SkPDFDict* SkPDFGraphicState::GetSMaskGraphicState(SkPDFFormXObject* sMask, @@ -160,13 +165,13 @@ SkPDFDict* SkPDFGraphicState::GetSMaskGraphicState(SkPDFFormXObject* sMask, } else if (sMaskMode == kLuminosity_SMaskMode) { sMaskDict->insertName("S", "Luminosity"); } - sMaskDict->insertObjRef("G", SkRef(sMask)); + sMaskDict->insertObjRef("G", sk_sp<SkPDFFormXObject>(SkRef(sMask))); if (invert) { - sMaskDict->insertObjRef("TR", SkRef(invertFunction.get(create_invert_function))); + sMaskDict->insertObjRef("TR", make_invert_function()); } auto result = sk_make_sp<SkPDFDict>("ExtGState"); - result->insertObject("SMask", sMaskDict.release()); + result->insertObject("SMask", std::move(sMaskDict)); return result.release(); } |