Merge "Make -DUSE_DEFAULT_RESOURCE_DIR=OFF compile again" into devel/master
[platform/core/uifw/dali-toolkit.git] / dali-scene-loader / public-api / dli-loader.h
1 #ifndef DALI_SCENE_LOADER_DLI_LOADER_H
2 #define DALI_SCENE_LOADER_DLI_LOADER_H
3 /*
4  * Copyright (c) 2020 Samsung Electronics Co., Ltd.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  */
19
20  // INTERNAL INCLUDES
21 #include "dali-scene-loader/public-api/api.h"
22 #include "dali-scene-loader/public-api/animation-definition.h"
23 #include "dali-scene-loader/public-api/customization.h"
24 #include "dali-scene-loader/public-api/string-callback.h"
25 #include "dali-scene-loader/public-api/index.h"
26
27 // EXTERNAL INCLUDES
28 #include "dali/public-api/common/vector-wrapper.h"
29
30 namespace Dali
31 {
32 namespace SceneLoader
33 {
34 typedef std::pair<std::string, std::string> Metadata;
35
36 // Forward declarations
37 struct LoadResult;
38 struct CameraParameters;
39 struct LightParameters;
40 struct TextParameters;
41
42 class ResourceBundle;
43 struct NodeDefinition;
44 class SceneDefinition;
45
46 class DALI_SCENE_LOADER_API DliLoader
47 {
48 public:
49   using ConvertFontCode = void(*)(const std::string& code, std::string& fontFamily, std::string& slant, std::string& weight, float& size);
50   using ConvertColorCode = Vector4(*)(const std::string& code);
51
52   using CategoryProcessor = std::function<void(Property::Array&& categoryData, StringCallback onError)>;
53   using CategoryProcessorVector = std::vector<std::pair<std::string /*name*/, CategoryProcessor>>;
54
55   using NodeProcessor = std::function<void(const NodeDefinition& nodeDef,
56     Property::Map&& nodeData, StringCallback onError)>;
57
58   using AnimationProcessor = std::function<void(const AnimationDefinition& animDef,
59     Property::Map&& animData, StringCallback onError)>;
60
61   struct InputParams
62   {
63     /**
64      * @brief The absolute path of animation binaries referenced in the .dli.
65      */
66     std::string mAnimationsPath;
67
68     /**
69      * @brief Provides a facility to determine a color from a code instead of RGB(A) values.
70      */
71     ConvertColorCode mConvertColorCode;
72
73     /**
74      * @brief A collection of handlers, mapped to the names of the top level (i.e. below
75      *  root) element, whom they will attempt to process. This will take place before
76      *  the parsing of scene Nodes and Animations, but after skeletons, environment, mesh,
77      *  shader and material resources.
78      */
79     CategoryProcessorVector mPreNodeCategoryProcessors;
80
81     /**
82      * @brief A collection of handlers, mapped to the names of the top level (i.e. below
83      *  root) element, whom they will attempt to process. This will take place after
84      *  the parsing of the scene Nodes and Animations.
85      */
86     CategoryProcessorVector mPostNodeCategoryProcessors;
87
88     /**
89      * @brief Provides an extension point to nodes. If provided, this function will be
90      *  called with each JSON element and definition, of a scene node.
91      * @note Constraints rely on ID resolution (from .dli to scene definition), which
92      *  takes place after the parsing of the nodes; therefore AT THIS POINT the node
93      *  IDs seen in constraints will still be the .dli IDs - NOT to be relied on for
94      *  indexing into mScene.
95      */
96     NodeProcessor mNodePropertyProcessor;
97
98     /**
99      * @brief Provides an extension point to animations. If provided, this function will be
100      *  called with each JSON element and fully processed definition, of an animation.
101      */
102     AnimationProcessor mAnimationPropertyProcessor;
103   };
104
105   struct LoadParams
106   {
107     InputParams const& input;
108     LoadResult& output;
109   };
110
111   DliLoader();
112   ~DliLoader();
113
114   /**
115    * @brief Sets the callback that messages from non-fatal errors get posted to.
116    *  Uses DefaultErrorCallback by default.
117    */
118   void SetErrorCallback(StringCallback onError);
119
120   /**
121    * @brief Attempts to load and parse a .dli document into a DOM tree.
122    * @return Whether the operation was successful.
123    */
124   bool LoadScene(const std::string& uri, LoadParams& params);
125
126   /**
127    * @return The error string describing how the parse has failed, if any.
128    */
129   std::string GetParseError() const;
130
131 private:
132   struct Impl;
133   const std::unique_ptr<Impl> mImpl;
134 };
135
136 }
137 }
138
139 #endif // DALI_SCENE_LOADER_DLI_LOADER_H