From: Matthew Leibowitz Date: Mon, 24 Apr 2017 14:17:02 +0000 (+0200) Subject: A fix for detecting if XPS is supported on UWP X-Git-Tag: accepted/tizen/5.0/unified/20181102.025319~56 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=799209411ee741b4a2c90bca87de8448e3965285;p=platform%2Fupstream%2FlibSkiaSharp.git A fix for detecting if XPS is supported on UWP --- diff --git a/src/xps/SkDocument_XPS.cpp b/src/xps/SkDocument_XPS.cpp index d05764a..53144e4 100644 --- a/src/xps/SkDocument_XPS.cpp +++ b/src/xps/SkDocument_XPS.cpp @@ -65,13 +65,37 @@ private: /////////////////////////////////////////////////////////////////////////////// +// UWP Mobile does not support XPS, but Desktop does +static inline bool xps_available() { +#ifdef SK_BUILD_FOR_WINRT + static bool available = []{ + SkTScopedComPtr factory; + auto hr = CoCreateInstance( + CLSID_XpsOMObjectFactory, + nullptr, + CLSCTX_INPROC_SERVER, + IID_PPV_ARGS(&factory)); + return SUCCEEDED(hr); + }(); + return available; +#else + return true; +#endif +} + sk_sp SkDocument::MakeXPS(SkWStream* stream, SkScalar dpi) { + if (!xps_available()) { + return nullptr; + } return stream ? sk_make_sp(stream, nullptr, dpi) : nullptr; } static void delete_wstream(SkWStream* stream, bool aborted) { delete stream; } sk_sp SkDocument::MakeXPS(const char path[], SkScalar dpi) { + if (!xps_available()) { + return nullptr; + } std::unique_ptr stream(new SkFILEWStream(path)); if (!stream->isValid()) { return nullptr;