diff options
author | Caolán McNamara <caolanm@redhat.com> | 2018-05-03 17:47:43 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2018-05-04 09:54:45 +0200 |
commit | 92d5cd31d93ca30f97fab09304a59aa41268431e (patch) | |
tree | bf5000b654d96e12cdf1a855db8dd16077966f57 /vcl/source/image | |
parent | a7dde8db81624c4f31c93b8611a4636d662f548e (diff) |
give icon data directly to gtk, skipping internal loaders
Change-Id: I4168b78d68a99e56105c49e1a1b6e1aa457609af
Reviewed-on: https://gerrit.libreoffice.org/53812
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl/source/image')
-rw-r--r-- | vcl/source/image/ImageTree.cxx | 5 | ||||
-rw-r--r-- | vcl/source/image/ImplImageTree.cxx | 40 |
2 files changed, 45 insertions, 0 deletions
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<SvMemoryStream> 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<SvMemoryStream> 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<css::container::XNameAccess>& rNameAccess = rIconSet.maNameAccess; + + LanguageTag aLanguageTag(rLang); + + for (OUString& rPath: getPaths(rName, aLanguageTag)) + { + if (rNameAccess->hasByName(rPath)) + { + css::uno::Reference<css::io::XInputStream> 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<SvMemoryStream>(); +} + OUString ImplImageTree::fallbackStyle(const OUString& rsStyle) { OUString sResult; |