Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / effects / inc / FUiEffects_RendererRendererObject.h
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Flora License, Version 1.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://floralicense.org/license/
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an AS IS BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17 /**
18  * @file        FUiEffects_RendererRendererObject.h
19  * @brief               This is the header file for the RendererObject class
20  */
21
22 #ifndef _FUI_EFFECTS_INTERNAL_RENDERER_RENDEREROBJECT_H_
23 #define _FUI_EFFECTS_INTERNAL_RENDERER_RENDEREROBJECT_H_
24
25 #include <renderer/engine-model/FUiEffects_RendererEngineModelDrawable.h>
26 #include <renderer/engine-model/FUiEffects_RendererEngineModelPropertyHolderMaterial.h>
27 #include <renderer/engine-model/FUiEffects_RendererEngineModelFloatPropertyHolder.h>
28 #include <renderer/engine-model/FUiEffects_RendererEngineModelMatrix4fPropertyHolder.h>
29 #include <renderer/engine-model/FUiEffects_RendererEngineModelAlphaBlendProperty.h>
30 #include <renderer/math/FUiEffects_RendererMathMatrix.h>
31
32 #include "FUiEffects_RendererEffectShader.h"
33 #include "FUiEffects_RendererRendererGeometry.h"
34 #include "FUiEffects_RendererMemoryTexture2DProperty.h"
35
36 #include <FUiEffects_EffectErrorMessages.h>
37
38 namespace Tizen { namespace Ui { namespace Effects { namespace _Renderer
39 {
40
41 /**
42  * @class       RendererObject
43  * @brief       This class represents renderer object
44  *
45  */
46 class RendererObject
47         : public EngineModel::Drawable
48 {
49 public:
50
51         /**
52          * Constructor
53          */
54         RendererObject(void)
55         {
56                 result r = GetLastResult();
57                 SysTryReturnVoidResult(NID_UI_EFFECT, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
58
59                 opacity = EngineModel::FloatPropertyHolderPtr(new (std::nothrow) EngineModel::FloatPropertyHolder);
60                 alphablend = EngineModel::AlphaBlendPropertyPtr(new (std::nothrow) EngineModel::AlphaBlendProperty);
61                 normalMtr = EngineModel::Matrix4fPropertyHolderPtr(new (std::nothrow) EngineModel::Matrix4fPropertyHolder);
62                 modelMtr = EngineModel::Matrix4fPropertyHolderPtr(new (std::nothrow) EngineModel::Matrix4fPropertyHolder);
63                 setMaterial(EngineModel::PropertyHolderMaterialPtr(new (std::nothrow) EngineModel::PropertyHolderMaterial));
64
65                 r = GetLastResult();
66                 SysTryReturnVoidResult(NID_UI_EFFECT, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
67                 SysTryReturnVoidResult(NID_UI_EFFECT, System::GetImpl(opacity) != null, E_OUT_OF_MEMORY, _UiEffectError::OUT_OF_MEMORY);
68                 SysTryReturnVoidResult(NID_UI_EFFECT, System::GetImpl(alphablend) != null, E_OUT_OF_MEMORY, _UiEffectError::OUT_OF_MEMORY);
69                 SysTryReturnVoidResult(NID_UI_EFFECT, System::GetImpl(normalMtr) != null, E_OUT_OF_MEMORY, _UiEffectError::OUT_OF_MEMORY);
70                 SysTryReturnVoidResult(NID_UI_EFFECT, System::GetImpl(modelMtr) != null, E_OUT_OF_MEMORY, _UiEffectError::OUT_OF_MEMORY);
71                 SysTryReturnVoidResult(NID_UI_EFFECT, System::GetImpl(__mat) != null, E_OUT_OF_MEMORY, _UiEffectError::OUT_OF_MEMORY);
72
73
74                 normalMtr->Set(Math::Matrix4f::GetIdentity());
75                 modelMtr->Set(Math::Matrix4f::GetIdentity());
76
77                 __mat->AddProperty(OPACITY_STR, opacity);
78                 __mat->AddProperty("AlphaBlendProp", alphablend);
79                 __mat->AddProperty(MODEL_MTR_STR, modelMtr);
80                 __mat->AddProperty(NORMAL_MTR_STR, normalMtr);
81         }
82
83
84         /**
85          * Destructor
86          */
87         ~RendererObject(void)
88         {
89         }
90
91
92         /**
93          * Sets new geometry for drawable
94          *
95          * @param [in]  aGeom     New geometry
96          *
97          * @return              void
98          */
99         void setGeometry(RendererGeometryPtr aGeom)
100         {
101                 EngineModel::Drawable::SetGeometry(aGeom);
102                 __geom = aGeom;
103         }
104
105         /**
106          * Sets new material for drawable
107          *
108          * @param [in]  aGeom     New material
109          *
110          * @return              void
111          */
112         void setMaterial(EngineModel::PropertyHolderMaterialPtr aMat)
113         {
114                 EngineModel::Drawable::SetMaterial(aMat);
115                 __mat = aMat;
116         }
117
118         /**
119          * Gets current geometry of drawable
120          *
121          * @return              RendererGeometryPtr
122          */
123         RendererGeometryPtr GetGeom(void) const
124         {
125                 return __geom;
126         }
127
128         /**
129          * Gets current material of drawable
130          *
131          * @return              EngineModel::PropertyHolderMaterialPtr
132          */
133         EngineModel::PropertyHolderMaterialPtr GetMat(void) const
134         {
135                 return __mat;
136         }
137
138 private:
139
140         /**
141          * Hidden copy constructor
142          */
143         RendererObject(const RendererObject &rhs);
144
145         /**
146          * Hidden assignment operator
147          */
148         RendererObject& operator=(const RendererObject &rhs);
149
150 public:
151         EngineModel::Matrix4fPropertyHolderPtr normalMtr;
152         EngineModel::Matrix4fPropertyHolderPtr modelMtr;
153
154         EngineModel::FloatPropertyHolderPtr opacity;
155         EngineModel::AlphaBlendPropertyPtr alphablend;
156
157 private:
158         RendererGeometryPtr __geom;
159         EngineModel::PropertyHolderMaterialPtr __mat;
160 };
161
162 typedef System::SmartPtr<RendererObject> RendererObjectPtr;
163
164 } } } } // Tizen::Ui::Effects::_EffectRenderer
165
166 #endif //_FUI_EFFECTS_INTERNAL_RENDERER_RENDEREROBJECT_H_