summaryrefslogtreecommitdiff
path: root/vcl/source/image
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-05-03 17:47:43 +0100
committerCaolán McNamara <caolanm@redhat.com>2018-05-04 09:54:45 +0200
commit92d5cd31d93ca30f97fab09304a59aa41268431e (patch)
treebf5000b654d96e12cdf1a855db8dd16077966f57 /vcl/source/image
parenta7dde8db81624c4f31c93b8611a4636d662f548e (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.cxx5
-rw-r--r--vcl/source/image/ImplImageTree.cxx40
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;