From 92d5cd31d93ca30f97fab09304a59aa41268431e Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Thu, 3 May 2018 17:47:43 +0100 Subject: give icon data directly to gtk, skipping internal loaders MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I4168b78d68a99e56105c49e1a1b6e1aa457609af Reviewed-on: https://gerrit.libreoffice.org/53812 Tested-by: Jenkins Reviewed-by: Caolán McNamara Tested-by: Caolán McNamara --- vcl/source/image/ImageTree.cxx | 5 +++++ vcl/source/image/ImplImageTree.cxx | 40 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) (limited to 'vcl/source/image') diff --git a/vcl/source/image/ImageTree.cxx b/vcl/source/image/ImageTree.cxx index 941812925190..2e20183b0da5 100644 --- a/vcl/source/image/ImageTree.cxx +++ b/vcl/source/image/ImageTree.cxx @@ -30,6 +30,11 @@ OUString ImageTree::getImageUrl(OUString const & rName, OUString const & rStyle, return mpImplImageTree->getImageUrl(rName, rStyle, rLang); } +std::shared_ptr ImageTree::getImageStream(OUString const & rName, OUString const & rStyle, OUString const & rLang) +{ + return mpImplImageTree->getImageStream(rName, rStyle, rLang); +} + bool ImageTree::loadImage(OUString const & rName, OUString const & rStyle, BitmapEx & rBitmap, bool bLocalized, const ImageLoadFlags eFlags) diff --git a/vcl/source/image/ImplImageTree.cxx b/vcl/source/image/ImplImageTree.cxx index 296800681fa7..ba1f22155d27 100644 --- a/vcl/source/image/ImplImageTree.cxx +++ b/vcl/source/image/ImplImageTree.cxx @@ -256,6 +256,46 @@ OUString ImplImageTree::getImageUrl(OUString const & rName, OUString const & rSt return OUString(); } +std::shared_ptr ImplImageTree::getImageStream(OUString const & rName, OUString const & rStyle, OUString const & rLang) +{ + OUString aStyle(rStyle); + + while (!aStyle.isEmpty()) + { + try + { + setStyle(aStyle); + + if (checkPathAccess()) + { + IconSet& rIconSet = getCurrentIconSet(); + const css::uno::Reference& rNameAccess = rIconSet.maNameAccess; + + LanguageTag aLanguageTag(rLang); + + for (OUString& rPath: getPaths(rName, aLanguageTag)) + { + if (rNameAccess->hasByName(rPath)) + { + css::uno::Reference aStream; + bool ok = rNameAccess->getByName(rPath) >>= aStream; + assert(ok); + (void)ok; // prevent unused warning in release build + return wrapStream(aStream); + } + } + } + } + catch (const css::uno::Exception & e) + { + SAL_INFO("vcl", e); + } + + aStyle = fallbackStyle(aStyle); + } + return std::shared_ptr(); +} + OUString ImplImageTree::fallbackStyle(const OUString& rsStyle) { OUString sResult; -- cgit