[dali_2.3.21] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / public-api / particle-system / particle-domain.h
1 #ifndef DALI_TOOLKIT_PARTICLE_SYSTEM_PARTICLE_DOMAIN_H
2 #define DALI_TOOLKIT_PARTICLE_SYSTEM_PARTICLE_DOMAIN_H
3 /*
4  * Copyright (c) 2023 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-toolkit/public-api/particle-system/particle-types.h>
22
23 // EXTERNAL INCLUDES
24 #include <dali/public-api/object/base-handle.h>
25 #include <memory>
26
27 namespace Dali::Toolkit::ParticleSystem::Internal
28 {
29 class ParticleDomain;
30 }
31
32 namespace Dali::Toolkit::ParticleSystem
33 {
34
35 /**
36  * @class ParticleDomain
37  *
38  * @brief ParticleDomain bounds simulation area to the specified region
39  */
40 class DALI_TOOLKIT_API ParticleDomain : public Dali::BaseHandle
41 {
42 public:
43   /**
44    * @brief Constructor
45    */
46   ParticleDomain() = default;
47
48   /**
49    * @brief Creates new ParticleDomain object
50    *
51    * @return New ParticleDomain object
52    */
53   static ParticleDomain New();
54
55   /**
56    * @brief Downcasts a handle to ParticleDomain handle.
57    *
58    * If handle points to an ParticleDomain object, the downcast produces valid handle.
59    * If not, the returned handle is left uninitialized.
60    *
61    * @param[in] handle to An object
62    * @return handle to a ParticleDomain object or an uninitialized handle
63    */
64   static ParticleDomain DownCast(BaseHandle handle);
65
66 private:
67   /// @cond internal
68   /**
69    * @brief This constructor is used by ParticleDomain::New() methods.
70    *
71    * @param [in] impl A pointer to a newly allocated implementation
72    */
73   ParticleDomain(Internal::ParticleDomain* impl);
74   /// @endcond
75 };
76
77 } // namespace Dali::Toolkit::ParticleSystem
78
79 #endif // DALI_TOOLKIT_PARTICLE_SYSTEM_PARTICLE_DOMAIN_H