From 799209411ee741b4a2c90bca87de8448e3965285 Mon Sep 17 00:00:00 2001 From: Matthew Leibowitz Date: Mon, 24 Apr 2017 16:17:02 +0200 Subject: [PATCH] A fix for detecting if XPS is supported on UWP --- src/xps/SkDocument_XPS.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) 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; -- 2.7.4