bump product version to 7.2.5.1
[LibreOffice.git] / vcl / inc / implimagetree.hxx
blob72cdd02d85cf1c68225e445b43af01710dee6cc5
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #ifndef INCLUDED_VCL_INC_IMPLIMAGETREE_HXX
21 #define INCLUDED_VCL_INC_IMPLIMAGETREE_HXX
23 #include <sal/config.h>
25 #include <memory>
26 #include <unordered_map>
27 #include <utility>
28 #include <vector>
30 #include <com/sun/star/uno/Reference.hxx>
31 #include <rtl/ustring.hxx>
32 #include <vcl/bitmapex.hxx>
33 #include <i18nlangtag/languagetag.hxx>
34 #include <vcl/ImageTree.hxx>
36 namespace com::sun::star::container {
37 class XNameAccess;
40 struct ImageRequestParameters
42 OUString msName;
43 OUString msStyle;
44 BitmapEx& mrBitmap;
45 bool mbLocalized;
46 ImageLoadFlags meFlags;
47 bool mbWriteImageToCache;
48 sal_Int32 mnScalePercentage;
50 ImageRequestParameters(const OUString & rName, const OUString & rStyle, BitmapEx& rBitmap, bool bLocalized,
51 ImageLoadFlags eFlags, sal_Int32 nScalePercentage)
52 : msName(rName)
53 , msStyle(rStyle)
54 , mrBitmap(rBitmap)
55 , mbLocalized(bLocalized)
56 , meFlags(eFlags)
57 , mbWriteImageToCache(false)
58 , mnScalePercentage(nScalePercentage)
61 bool convertToDarkTheme();
62 sal_Int32 scalePercentage();
65 class ImplImageTree
67 public:
68 ImplImageTree();
69 ~ImplImageTree();
71 OUString getImageUrl(
72 OUString const & name, OUString const & style, OUString const & lang);
74 std::shared_ptr<SvMemoryStream> getImageStream(
75 OUString const & rName, OUString const & rStyle, OUString const & rLang);
77 bool loadImage(
78 OUString const & name, OUString const & style,
79 BitmapEx & bitmap, bool localized,
80 const ImageLoadFlags eFlags,
81 sal_Int32 nScalePercentage = -1);
83 /** a crude form of life cycle control (called from DeInitVCL; otherwise,
84 * if the ImplImageTree singleton were destroyed during exit that would
85 * be too late for the destructors of the bitmaps in maIconCache)*/
86 void shutdown();
88 css::uno::Reference< css::container::XNameAccess > const & getNameAccess();
90 private:
91 ImplImageTree(const ImplImageTree&) = delete;
92 ImplImageTree& operator=(const ImplImageTree&) = delete;
94 typedef std::unordered_map<OUString, std::pair<bool,BitmapEx>> IconCache;
95 typedef std::unordered_map<sal_Int32, std::unique_ptr<IconCache>> ScaledIconCache;
96 typedef std::unordered_map<OUString, OUString> IconLinkHash;
98 struct IconSet
100 OUString maURL;
101 css::uno::Reference<css::container::XNameAccess> maNameAccess;
102 ScaledIconCache maScaledIconCaches;
103 IconLinkHash maLinkHash;
105 IconSet()
108 IconSet(const OUString & rURL)
109 : maURL(rURL)
113 /// Remember all the (used) icon styles and individual icons in them.
114 /// Map between the theme name(s) and the content.
115 std::unordered_map<OUString, IconSet> maIconSets;
117 /// Style used for the current operations; switches switch several times during fallback search.
118 OUString maCurrentStyle;
120 IconSet& getCurrentIconSet()
122 return maIconSets[maCurrentStyle];
125 bool doLoadImage(ImageRequestParameters& rParameters);
127 std::vector<OUString> getPaths(OUString const & name, LanguageTag const & rLanguageTag);
129 bool checkPathAccess();
131 void setStyle(OUString const & rStyle);
133 void createStyle();
135 IconCache &getIconCache(const ImageRequestParameters& rParameters);
137 bool iconCacheLookup(ImageRequestParameters& rParameters);
139 bool findImage(std::vector<OUString> const & rPaths, ImageRequestParameters& rParameters);
141 void loadImageLinks();
143 void parseLinkFile(std::shared_ptr<SvStream> const & aStream);
145 /// Return name of a real .png according to links.txt.
146 OUString const & getRealImageName(OUString const & rName);
149 /** Return name of the fallback style for the provided one.
151 Must not be cyclic :-) The last theme in the chain returns an empty string.
153 static OUString fallbackStyle(std::u16string_view rStyle);
156 #endif
158 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */