1 #ifndef DALI_TOOLKIT_VISUAL_FACTORY_H
2 #define DALI_TOOLKIT_VISUAL_FACTORY_H
5 * Copyright (c) 2024 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
22 #include <dali/public-api/images/image-operations.h>
23 #include <dali/public-api/object/base-handle.h>
24 #include <dali/public-api/object/property-map.h>
27 #include <dali-toolkit/devel-api/visual-factory/visual-base.h>
36 namespace Internal DALI_INTERNAL
42 * @brief VisualFactory is a singleton object that provides and shares visuals between controls
44 * By setting environment variable 'DALI_DEBUG_RENDERING', a debug visual is used which renders a quad wireframe.
46 * The visual type is required in the property map for requesting a visual.
48 * | %Property Name | Type |
49 * |--------------------------|-------------------|
50 * | visualType | INTEGER or STRING |
53 class DALI_TOOLKIT_API VisualFactory : public BaseHandle
60 IMAGE_VISUAL_LOAD_STATIC_IMAGES_ONLY = 1 << 0, ///< Load static images only when we use the image visual.
64 * @brief Create or retrieve VisualFactory singleton.
66 * @return A handle to the VisualFactory control.
68 static VisualFactory Get();
71 * @brief Create a VisualFactory handle.
73 * Calling member functions with an uninitialised handle is not allowed.
80 * This is non-virtual since derived Handle types must not contain data or virtual methods.
85 * @brief This copy constructor is required for (smart) pointer semantics.
87 * @param[in] handle A reference to the copied handle.
89 VisualFactory(const VisualFactory& handle);
92 * @brief This assignment operator is required for (smart) pointer semantics.
94 * @param [in] handle A reference to the copied handle.
95 * @return A reference to this.
97 VisualFactory& operator=(const VisualFactory& handle);
100 * @brief Request the visual
102 * @param[in] propertyMap The map contains the properties required by the visual.
103 * The content of the map determines the type of visual that will be returned.
104 * @return The handle to the created visual
106 Visual::Base CreateVisual(const Property::Map& propertyMap);
109 * @brief Request the visual with some options
111 * @param[in] propertyMap The map contains the properties required by the visual.
112 * The content of the map determines the type of visual that will be returned.
113 * @param[in] creationOptions The creation option.
114 * @return The handle to the created visual
116 Visual::Base CreateVisual(const Property::Map& propertyMap, CreationOptions creationOptions);
119 * @brief Request the visual to render the given resource at the url.
121 * @param[in] url The URL to the resource to be rendered.
122 * @param[in] size The width and height to fit the loaded image to.
123 * @return The pointer pointing to the visual
125 Visual::Base CreateVisual(const std::string& url, ImageDimensions size);
128 * @brief Request the visual to render the given resource at the url with some options.
130 * @param[in] url The URL to the resource to be rendered.
131 * @param[in] size The width and height to fit the loaded image to.
132 * @param[in] creationOptions The creation option.
133 * @return The pointer pointing to the visual
135 Visual::Base CreateVisual(const std::string& url, ImageDimensions size, CreationOptions creationOptions);
138 * @brief Enable or disable premultiplying alpha in images and image visuals.
140 * The default is to enable pre-multiplication on load.
142 * Applications that have assets with pre-multiplied alpha already applied should turn this option off.
144 * @param[in] preMultiply True if loaded images for image visuals should have alpha multiplied into the color
147 void SetPreMultiplyOnLoad(bool preMultiply);
150 * @brief Get the setting for automatically pre-multiplying image visual images on load.
152 * @return True if loaded images have pre-multiplied alpha applied on load, false otherwise.
154 bool GetPreMultiplyOnLoad() const;
157 * @brief Set the default creation options when we skip the creation options parameter.
159 * @param[in] creationOptions The default creation options for the visual factory.
161 void SetDefaultCreationOptions(CreationOptions creationOptions);
164 * @brief Set the default creation options when we skip the creation options parameter.
166 * @return The default creation options for the visual factory.
168 CreationOptions GetDefaultCreationOptions() const;
171 * @brief Discard visual base. It will keep reference of visual until idle callback called.
173 * @param[in] visual Discarded visual base.
175 void DiscardVisual(Visual::Base visual);
178 * @brief Compile the visual shader in advance. Afterwards,
179 * when a visual using a new shader is requested, the pre-compiled shader is used.
181 * @note It is recommended that this method be called at the top of the application code.
182 * @note Using precompiled shaders is helpful when the application is complex and uses
183 * many different styles of visual options. On the other hand,if most visuals are the same
184 * and the application is simple, it may use memory unnecessarily or slow down the application launching speed.
186 void UsePreCompiledShader();
189 explicit DALI_INTERNAL VisualFactory(Internal::VisualFactory* impl);
192 } // namespace Toolkit
196 #endif // DALI_TOOLKIT_VISUAL_FACTORY_H