LibreOffice Module vcl (master) 1
implimagetree.hxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
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/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
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 .
18 */
19
20#ifndef INCLUDED_VCL_INC_IMPLIMAGETREE_HXX
21#define INCLUDED_VCL_INC_IMPLIMAGETREE_HXX
22
23#include <sal/config.h>
24
25#include <memory>
26#include <unordered_map>
27#include <utility>
28#include <vector>
29
30#include <com/sun/star/uno/Reference.hxx>
31#include <rtl/ustring.hxx>
32#include <vcl/bitmapex.hxx>
34#include <vcl/ImageTree.hxx>
35
37 class XNameAccess;
38}
39
40namespace com::sun::star::io {
41 class XInputStream;
42}
43
45{
46 OUString msName;
47 OUString msStyle;
53
54 ImageRequestParameters(OUString aName, OUString aStyle, BitmapEx& rBitmap, bool bLocalized,
55 ImageLoadFlags eFlags, sal_Int32 nScalePercentage)
56 : msName(std::move(aName))
57 , msStyle(std::move(aStyle))
58 , mrBitmap(rBitmap)
59 , mbLocalized(bLocalized)
60 , meFlags(eFlags)
61 , mbWriteImageToCache(false)
62 , mnScalePercentage(nScalePercentage)
63 {}
64
65 bool convertToDarkTheme();
66 sal_Int32 scalePercentage();
67};
68
70{
71public:
74
75 OUString getImageUrl(
76 OUString const & name, OUString const & style, OUString const & lang);
77
78 css::uno::Reference<css::io::XInputStream> getImageXInputStream(OUString const & rName,
79 OUString const & rStyle, OUString const & rLang);
80
81 std::shared_ptr<SvMemoryStream> getImageStream(
82 OUString const & rName, OUString const & rStyle, OUString const & rLang);
83
84 bool loadImage(
85 OUString const & name, OUString const & style,
86 BitmapEx & bitmap, bool localized,
87 const ImageLoadFlags eFlags,
88 sal_Int32 nScalePercentage = -1);
89
93 void shutdown();
94
95 css::uno::Reference< css::container::XNameAccess > const & getNameAccess();
96
97private:
98 ImplImageTree(const ImplImageTree&) = delete;
100
101 typedef std::unordered_map<OUString, std::pair<bool,BitmapEx>> IconCache;
102 typedef std::unordered_map<sal_Int32, IconCache> ScaledIconCache;
103 typedef std::unordered_map<OUString, OUString> IconLinkHash;
104
105 struct IconSet
106 {
107 OUString maURL;
108 css::uno::Reference<css::container::XNameAccess> maNameAccess;
111
113 {
114 maLinkHash.reserve(50);
115 }
116
117 IconSet(OUString aURL)
118 : maURL(std::move(aURL))
119 {
120 maLinkHash.reserve(50);
121 }
122 };
123
126 std::unordered_map<OUString, IconSet> maIconSets;
127
130
132 {
134 }
135
136 bool doLoadImage(ImageRequestParameters& rParameters);
137
138 std::vector<OUString> getPaths(OUString const & name, LanguageTag const & rLanguageTag);
139
140 bool checkPathAccess();
141
142 void setStyle(OUString const & rStyle);
143
144 void createStyle();
145
146 IconCache &getIconCache(const ImageRequestParameters& rParameters);
147
148 bool iconCacheLookup(ImageRequestParameters& rParameters);
149
150 bool findImage(std::vector<OUString> const & rPaths, ImageRequestParameters& rParameters);
151
152 void loadImageLinks();
153
154 void parseLinkFile(std::shared_ptr<SvStream> const & aStream);
155
157 OUString const & getRealImageName(OUString const & rName);
158
159
164 static OUString fallbackStyle(std::u16string_view rStyle);
165};
166
167#endif
168
169/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
ImageLoadFlags
Definition: ImageTree.hxx:32
std::unordered_map< OUString, OUString > IconLinkHash
std::shared_ptr< SvMemoryStream > getImageStream(OUString const &rName, OUString const &rStyle, OUString const &rLang)
bool iconCacheLookup(ImageRequestParameters &rParameters)
OUString getImageUrl(OUString const &name, OUString const &style, OUString const &lang)
ImplImageTree(const ImplImageTree &)=delete
bool doLoadImage(ImageRequestParameters &rParameters)
OUString maCurrentStyle
Style used for the current operations; switches switch several times during fallback search.
std::unordered_map< sal_Int32, IconCache > ScaledIconCache
void shutdown()
a crude form of life cycle control (called from DeInitVCL; otherwise, if the ImplImageTree singleton ...
OUString const & getRealImageName(OUString const &rName)
Return name of a real .png according to links.txt.
std::vector< OUString > getPaths(OUString const &name, LanguageTag const &rLanguageTag)
std::unordered_map< OUString, IconSet > maIconSets
Remember all the (used) icon styles and individual icons in them.
ImplImageTree & operator=(const ImplImageTree &)=delete
IconSet & getCurrentIconSet()
css::uno::Reference< css::container::XNameAccess > const & getNameAccess()
IconCache & getIconCache(const ImageRequestParameters &rParameters)
Find an icon cache for the right scale factor.
static OUString fallbackStyle(std::u16string_view rStyle)
Return name of the fallback style for the provided one.
css::uno::Reference< css::io::XInputStream > getImageXInputStream(OUString const &rName, OUString const &rStyle, OUString const &rLang)
std::unordered_map< OUString, std::pair< bool, BitmapEx > > IconCache
bool loadImage(OUString const &name, OUString const &style, BitmapEx &bitmap, bool localized, const ImageLoadFlags eFlags, sal_Int32 nScalePercentage=-1)
void setStyle(OUString const &rStyle)
bool findImage(std::vector< OUString > const &rPaths, ImageRequestParameters &rParameters)
void parseLinkFile(std::shared_ptr< SvStream > const &aStream)
bool checkPathAccess()
URL aURL
const char * name
OUString aName
ImageLoadFlags meFlags
ImageRequestParameters(OUString aName, OUString aStyle, BitmapEx &rBitmap, bool bLocalized, ImageLoadFlags eFlags, sal_Int32 nScalePercentage)
ScaledIconCache maScaledIconCaches
css::uno::Reference< css::container::XNameAccess > maNameAccess