Apply new indicator UI.
[platform/framework/native/uifw.git] / src / ui / FUiControl.cpp
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 /**
19  * @file                FUiControl.cpp
20  * @brief               This is the implementation file for the Control class.
21  */
22
23 #include <FUiControl.h>
24 #include <FUiContainer.h>
25 #include <FUiTouchGestureDetector.h>
26 #include <FBaseSysLog.h>
27 #include <FApp_AppInfo.h>
28 #include "FUi_ControlImpl.h"
29 #include "FUi_ContainerImpl.h"
30 #include "FUi_ErrorMessages.h"
31 #include "FUiAnimVisualElement.h"
32 #include "FUiAnimVisualElementSurface.h"
33 #include "FUiAnim_VisualElementSurfaceImpl.h"
34
35 // for sto
36 #include <Evas.h>
37 #include "FUiAnim_EflNode.h"
38 #include "FUiAnim_EflLayer.h"
39 #include "FUiAnim_VisualElementImpl.h"
40 #include "FUiAnim_DisplayContextImpl.h"
41
42
43 using namespace Tizen::Base;
44 using namespace Tizen::Base::Collection;
45 using namespace Tizen::Graphics;
46 using namespace Tizen::Ui::Animations;
47
48 extern "C" _OSP_EXPORT_ void*
49 STO_GetNativeHandle(void* pControl)
50 {
51         Handle nativeHandle = 0;
52         Tizen::Ui::Control* pControlPointer = (Tizen::Ui::Control*)pControl;
53
54         if (pControlPointer)
55         {
56                 Tizen::Ui::_ControlImpl* pControlImpl = Tizen::Ui::_ControlImpl::GetInstance(*pControlPointer);
57
58                 if (pControlImpl)
59                 {
60                         VisualElement *pVisualElement = pControlImpl->GetVisualElement();
61
62                         if (pVisualElement)
63                         {
64                                 VisualElementSurface* pSurface = pVisualElement->GetSurfaceN();
65
66                                 if (pSurface)
67                                 {
68                                         _VisualElementSurfaceImpl* pSurfaceImpl = _VisualElementSurfaceImpl::GetInstance(*pSurface);
69                                         if (pSurfaceImpl)
70                                                 nativeHandle = pSurfaceImpl->GetNativeHandle();
71
72                                         delete pSurface;
73                                 }
74                         }
75                 }
76         }
77
78         return (void*)nativeHandle;
79 }
80
81 extern "C" _OSP_EXPORT_ void
82 STO_NativeHandleSetShowState(void* pNative, bool show)
83 {
84         if(show)
85                 evas_object_show((Evas_Object*)pNative);
86         else
87                 evas_object_hide((Evas_Object*)pNative);
88 }
89
90 extern "C" _OSP_EXPORT_ void*
91 STO_GetVisualElement(void* pControl)
92 {
93         Tizen::Ui::Control* pControlPointer = (Tizen::Ui::Control*)pControl;
94         Tizen::Ui::_ControlImpl* pControlImpl = Tizen::Ui::_ControlImpl::GetInstance(*pControlPointer);
95
96         return (void *)pControlImpl->GetVisualElement();
97 }
98
99 extern "C" _OSP_EXPORT_
100 void STO_NativeHandleDataSet(void* pEvasObject, void* pData, int width, int height)
101 {
102         evas_object_image_size_set((Evas_Object*)pEvasObject, width, height);
103         evas_object_image_data_set((Evas_Object*)pEvasObject, pData);
104 }
105
106
107
108 extern "C" _OSP_EXPORT_ void
109 STO_SetVisualElementNativeObject(void* pVisualElement, void* pNativeObject)
110 {
111         VisualElement* pVE = (VisualElement* )pVisualElement;
112         Evas_Object* pEO = (Evas_Object*)pNativeObject;
113
114         _VisualElementImpl* pVEImpl = _VisualElementImpl::GetInstance(*pVE);
115
116         _EflNode* pNode = (_EflNode*)pVEImpl->GetNativeNode();
117         pNode->AddNativeSmartObject(*pVE, pEO);
118
119         int imageWidth = 0;
120         int imageHeight = 0;
121
122         evas_object_image_size_get(pEO, &imageWidth, &imageHeight);
123         evas_object_image_data_update_add(pEO, 0, 0, imageWidth, imageHeight);
124 }
125
126 extern "C" _OSP_EXPORT_
127 void* STO_CreateNativeImageObject(void* pDisplayContext, int width, int height)
128 {
129
130         if(!pDisplayContext)
131         {
132                 return null;
133         }
134
135         _DisplayContextImpl* pDispImpl =  _DisplayContextImpl::GetInstance(*(DisplayContext*)pDisplayContext);
136
137         if(!pDispImpl->GetNativeLayer())
138         {
139                 return null;
140         }
141         Evas* pEvas = ((_EflLayer*)pDispImpl->GetNativeLayer())->GetEvas();
142
143         if(!pEvas)
144         {
145                 return null;
146         }
147
148         Evas_Object* pImage = evas_object_image_filled_add(pEvas);
149         evas_object_resize(pImage, width, height);
150         evas_object_move(pImage, 0, 0);
151 //      evas_object_show(pImage);
152
153         return pImage;
154
155 }
156
157 extern "C" _OSP_EXPORT_ void
158 STO_FillSet(void* pVisualElement, int x, int y, int w, int h)
159 {
160                    VisualElement* pVE = (VisualElement*)pVisualElement;
161
162                    _VisualElementImpl* pVEImpl = _VisualElementImpl::GetInstance(*pVE);
163
164                    _EflNode* pNode = (_EflNode*)pVEImpl->GetNativeNode();
165                    Evas_Object* pEvasObject = pNode->GetNativeObject();
166                    if (pEvasObject)
167                    {
168                                          evas_object_image_fill_set(pEvasObject, x, y, w, h);
169                    }
170 }
171
172 extern "C" _OSP_EXPORT_ void
173 STO_Destroy(void* pVisualElement, void* pEvasObject)
174 {
175         VisualElement* pVE = (VisualElement* )pVisualElement;
176
177         _VisualElementImpl* pVEImpl = _VisualElementImpl::GetInstance(*pVE);
178
179         _EflNode* pNode = (_EflNode*)pVEImpl->GetNativeNode();
180         pNode->AddNativeSmartObject(*pVE, null);
181
182         evas_object_del((Evas_Object*)pEvasObject);
183 }
184
185
186 namespace Tizen { namespace Ui {
187
188 Control::Control(void)
189         : _pControlImpl(null)
190 {
191 }
192
193 Control::~Control(void)
194 {
195         Dispose();
196 }
197
198 void
199 Control::Dispose(void)
200 {
201         delete _pControlImpl;
202         _pControlImpl = null;
203 }
204
205 result
206 Control::Construct(void)
207 {
208         SysAssertf(_pControlImpl == null, "Already constructed. Calling Construct() twice or more on a same instance is not allowed for this class.");
209
210         _ControlImpl* pImpl = _ControlImpl::CreateControlImplN(*this);
211         result r = GetLastResult();
212         SysTryReturn(NID_UI, pImpl, r, r, "[%s] Propagating.", GetErrorMessage(r));
213
214         _pControlImpl = pImpl;
215
216         return E_SUCCESS;
217 }
218
219 result
220 Control::Destroy(void)
221 {
222         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
223         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
224
225         result r = pControlImpl->Destroy();
226         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
227
228         return E_SUCCESS;
229 }
230
231 result
232 Control::Draw(void)
233 {
234         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
235         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
236
237         result r = pControlImpl->Draw(true);
238         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
239
240         return E_SUCCESS;
241 }
242
243 result
244 Control::Draw(bool recursive)
245 {
246         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
247         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
248
249         result r = pControlImpl->Draw(recursive);
250         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
251
252         return E_SUCCESS;
253 }
254
255 void
256 Control::Invalidate(bool recursive)
257 {
258         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
259         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
260
261         pControlImpl->Invalidate(recursive);
262         result r = GetLastResult();
263         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
264 }
265
266 void
267 Control::InvalidateBounds(const Rectangle& bounds)
268 {
269         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
270         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
271
272         pControlImpl->Invalidate(bounds);
273         result r = GetLastResult();
274         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
275 }
276
277 void
278 Control::InvalidateBounds(const FloatRectangle& bounds)
279 {
280         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
281         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
282
283         pControlImpl->Invalidate(bounds);
284         result r = GetLastResult();
285         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
286 }
287
288 Canvas*
289 Control::GetCanvasN(void) const
290 {
291         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
292         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
293
294         Canvas* pCanvas = pControlImpl->GetCanvasN();
295         result r = GetLastResult();
296         SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
297
298         return pCanvas;
299
300 CATCH:
301         delete pCanvas;
302         return null;
303 }
304
305 Canvas*
306 Control::GetCanvasN(int x, int y, int w, int h) const
307 {
308         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
309         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
310
311         Canvas* pCanvas = pControlImpl->GetCanvasN(Rectangle(x, y, w, h));
312         result r = GetLastResult();
313         SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
314
315         return pCanvas;
316
317 CATCH:
318         delete pCanvas;
319         return null;
320 }
321
322 Canvas*
323 Control::GetCanvasN(float x, float y, float w, float h) const
324 {
325         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
326         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
327
328         Canvas* pCanvas = pControlImpl->GetCanvasN(FloatRectangle(x, y, w, h));
329         result r = GetLastResult();
330         SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
331
332         return pCanvas;
333
334 CATCH:
335         delete pCanvas;
336         return null;
337 }
338
339 Canvas*
340 Control::GetCanvasN(const Rectangle& bounds) const
341 {
342         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
343         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
344
345         Canvas* pCanvas = pControlImpl->GetCanvasN(bounds);
346         result r = GetLastResult();
347         SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
348
349         return pCanvas;
350
351 CATCH:
352         delete pCanvas;
353         return null;
354 }
355
356 Canvas*
357 Control::GetCanvasN(const FloatRectangle& bounds) const
358 {
359         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
360         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
361
362         Canvas* pCanvas = pControlImpl->GetCanvasN(bounds);
363         result r = GetLastResult();
364         SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
365
366         return pCanvas;
367
368 CATCH:
369         delete pCanvas;
370         return null;
371 }
372
373 result
374 Control::SetEnabled(bool enable)
375 {
376         //versioning
377         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
378
379         if (Tizen::App::_AppInfo::GetApiVersion() == _API_VERSION_2_0 && Tizen::App::_AppInfo::IsOspCompat())
380         {
381                 SysTryReturn(NID_UI,
382                         pControlImpl, E_UNSUPPORTED_OPERATION,
383                         E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION] This control is not constructed.");
384         }
385         else
386         {
387                 SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
388         }
389
390         pControlImpl->SetEnableState(enable);
391         result r = GetLastResult();
392         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
393
394         return E_SUCCESS;
395 }
396
397 result
398 Control::Show(void)
399 {
400         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
401         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
402
403         result r = pControlImpl->Show();
404         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
405
406         return E_SUCCESS;
407 }
408
409 void
410 Control::GetBounds(int& x, int& y, int& w, int& h) const
411 {
412         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
413         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
414
415         Rectangle bounds = pControlImpl->GetBounds();
416         result r = GetLastResult();
417         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
418
419         x = bounds.x;
420         y = bounds.y;
421         w = bounds.width;
422         h = bounds.height;
423 }
424
425 void
426 Control::GetBounds(float& x, float& y, float& w, float& h) const
427 {
428         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
429         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
430
431         FloatRectangle bounds = pControlImpl->GetBoundsF();
432         result r = GetLastResult();
433         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
434
435         x = bounds.x;
436         y = bounds.y;
437         w = bounds.width;
438         h = bounds.height;
439 }
440
441 Rectangle
442 Control::GetBounds(void) const
443 {
444         const Rectangle errorBounds = _ControlImpl::GetErrorBounds();
445
446         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
447         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
448
449         Rectangle bounds = pControlImpl->GetBounds();
450         result r = GetLastResult();
451         SysTryReturn(NID_UI, r == E_SUCCESS, errorBounds, r, "[%s] Propagating.", GetErrorMessage(r));
452
453         return bounds;
454 }
455
456 FloatRectangle
457 Control::GetBoundsF(void) const
458 {
459         const FloatRectangle errorBounds = _ControlImpl::GetErrorBoundsF();
460
461         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
462         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
463
464         FloatRectangle bounds = pControlImpl->GetBoundsF();
465         result r = GetLastResult();
466         SysTryReturn(NID_UI, r == E_SUCCESS, errorBounds, r, "[%s] Propagating.", GetErrorMessage(r));
467
468         return bounds;
469 }
470
471 Dimension
472 Control::GetSize(void) const
473 {
474         const Rectangle errorBounds = _ControlImpl::GetErrorBounds();
475         const Dimension errorSize(errorBounds.width, errorBounds.height);
476
477         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
478         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
479
480         Dimension size = pControlImpl->GetSize();
481         result r = GetLastResult();
482         SysTryReturn(NID_UI, r == E_SUCCESS, errorSize, r, "[%s] Propagating.", GetErrorMessage(r));
483
484         return size;
485 }
486
487 FloatDimension
488 Control::GetSizeF(void) const
489 {
490         const FloatRectangle errorBounds = _ControlImpl::GetErrorBoundsF();
491         const FloatDimension errorSize(errorBounds.width, errorBounds.height);
492
493         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
494         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
495
496         FloatDimension size = pControlImpl->GetSizeF();
497         result r = GetLastResult();
498         SysTryReturn(NID_UI, r == E_SUCCESS, errorSize, r, "[%s] Propagating.", GetErrorMessage(r));
499
500         return size;
501 }
502
503 void
504 Control::GetSize(int& w, int& h) const
505 {
506         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
507         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
508
509         Dimension size = pControlImpl->GetSize();
510         result r = GetLastResult();
511         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
512
513         w = size.width;
514         h = size.height;
515 }
516
517 void
518 Control::GetSize(float& w, float& h) const
519 {
520         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
521         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
522
523         FloatDimension size = pControlImpl->GetSizeF();
524         result r = GetLastResult();
525         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
526
527         w = size.width;
528         h = size.height;
529 }
530
531 Point
532 Control::GetPosition(void) const
533 {
534         const Rectangle errorBounds = _ControlImpl::GetErrorBounds();
535         const Point errorPosition(errorBounds.x, errorBounds.y);
536
537         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
538         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
539
540         Point position = pControlImpl->GetPosition();
541         result r = GetLastResult();
542         SysTryReturn(NID_UI, r == E_SUCCESS, errorPosition, r, "[%s] Propagating.", GetErrorMessage(r));
543
544         return position;
545 }
546
547 FloatPoint
548 Control::GetPositionF(void) const
549 {
550         const FloatRectangle errorBounds = _ControlImpl::GetErrorBoundsF();
551         const FloatPoint errorPosition(errorBounds.x, errorBounds.y);
552
553         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
554         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
555
556         FloatPoint position = pControlImpl->GetPositionF();
557         result r = GetLastResult();
558         SysTryReturn(NID_UI, r == E_SUCCESS, errorPosition, r, "[%s] Propagating.", GetErrorMessage(r));
559
560         return position;
561 }
562
563 void
564 Control::GetPosition(int& x, int& y) const
565 {
566         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
567         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
568
569         Point position = pControlImpl->GetPosition();
570         result r = GetLastResult();
571         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
572
573         x = position.x;
574         y = position.y;
575 }
576
577 void
578 Control::GetPosition(float& x, float& y) const
579 {
580         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
581         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
582
583         FloatPoint position = pControlImpl->GetPositionF();
584         result r = GetLastResult();
585         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
586
587         x = position.x;
588         y = position.y;
589 }
590
591 int
592 Control::GetX(void) const
593 {
594         const Rectangle errorBounds = _ControlImpl::GetErrorBounds();
595         const int errorX = errorBounds.x;
596
597         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
598         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
599
600         int x = pControlImpl->GetPosition().x;
601         result r = GetLastResult();
602         SysTryReturn(NID_UI, r == E_SUCCESS, errorX, r, "[%s] Propagating.", GetErrorMessage(r));
603
604         return x;
605 }
606
607 float
608 Control::GetXF(void) const
609 {
610         const FloatRectangle errorBounds = _ControlImpl::GetErrorBoundsF();
611         const float errorX = errorBounds.x;
612
613         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
614         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
615
616         float x = pControlImpl->GetPositionF().x;
617         result r = GetLastResult();
618         SysTryReturn(NID_UI, r == E_SUCCESS, errorX, r, "[%s] Propagating.", GetErrorMessage(r));
619
620         return x;
621 }
622
623 int
624 Control::GetY(void) const
625 {
626         const Rectangle errorBounds = _ControlImpl::GetErrorBounds();
627         const int errorY = errorBounds.y;
628
629         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
630         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
631
632         int y = pControlImpl->GetPosition().y;
633         result r = GetLastResult();
634         SysTryReturn(NID_UI, r == E_SUCCESS, errorY, r, "[%s] Propagating.", GetErrorMessage(r));
635
636         return y;
637 }
638
639 float
640 Control::GetYF(void) const
641 {
642         const FloatRectangle errorBounds = _ControlImpl::GetErrorBoundsF();
643         const float errorY = errorBounds.y;
644
645         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
646         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
647
648         float y = pControlImpl->GetPositionF().y;
649         result r = GetLastResult();
650         SysTryReturn(NID_UI, r == E_SUCCESS, errorY, r, "[%s] Propagating.", GetErrorMessage(r));
651
652         return y;
653 }
654
655 int
656 Control::GetWidth(void) const
657 {
658         const Rectangle errorBounds = _ControlImpl::GetErrorBounds();
659         const int errorWidth = errorBounds.width;
660
661         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
662         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
663
664         int width = pControlImpl->GetSize().width;
665         result r = GetLastResult();
666         SysTryReturn(NID_UI, r == E_SUCCESS, errorWidth, r, "[%s] Propagating.", GetErrorMessage(r));
667
668         return width;
669 }
670
671 float
672 Control::GetWidthF(void) const
673 {
674         const FloatRectangle errorBounds = _ControlImpl::GetErrorBoundsF();
675         const float errorWidth = errorBounds.width;
676
677         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
678         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
679
680         float width = pControlImpl->GetSizeF().width;
681         result r = GetLastResult();
682         SysTryReturn(NID_UI, r == E_SUCCESS, errorWidth, r, "[%s] Propagating.", GetErrorMessage(r));
683
684         return width;
685 }
686
687 int
688 Control::GetHeight(void) const
689 {
690         const Rectangle errorBounds = _ControlImpl::GetErrorBounds();
691         const int errorHeight = errorBounds.height;
692
693         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
694         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
695
696         int height = pControlImpl->GetSize().height;
697         result r = GetLastResult();
698         SysTryReturn(NID_UI, r == E_SUCCESS, errorHeight, r, "[%s] Propagating.", GetErrorMessage(r));
699
700         return height;
701 }
702
703 float
704 Control::GetHeightF(void) const
705 {
706         const FloatRectangle errorBounds = _ControlImpl::GetErrorBoundsF();
707         const float errorHeight = errorBounds.height;
708
709         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
710         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
711
712         float height = pControlImpl->GetSizeF().height;
713         result r = GetLastResult();
714         SysTryReturn(NID_UI, r == E_SUCCESS, errorHeight, r, "[%s] Propagating.", GetErrorMessage(r));
715
716         return height;
717 }
718
719 Container*
720 Control::GetParent(void) const
721 {
722         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
723         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
724
725         _ContainerImpl* pParentImpl = pControlImpl->GetParent();
726         result r = GetLastResult();
727         SysTryReturn(NID_UI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
728
729         return pParentImpl ? &pParentImpl->GetPublic() : null;
730 }
731
732 String
733 Control::GetFont(void) const
734 {
735         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
736         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
737
738         return pControlImpl->GetFont();
739 }
740
741 result
742 Control::SetBounds(int x, int y, int w, int h)
743 {
744         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
745         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
746
747         result r = pControlImpl->SetBounds(Rectangle(x, y, w, h));
748         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
749
750         return E_SUCCESS;
751 }
752
753 result
754 Control::SetBounds(float x, float y, float w, float h)
755 {
756         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
757         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
758
759         result r = pControlImpl->SetBounds(FloatRectangle(x, y, w, h));
760         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
761
762         return E_SUCCESS;
763 }
764
765 result
766 Control::SetBounds(const Rectangle& bounds)
767 {
768         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
769         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
770
771         result r = pControlImpl->SetBounds(bounds);
772         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
773
774         return E_SUCCESS;
775 }
776
777 result
778 Control::SetBounds(const FloatRectangle& bounds)
779 {
780         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
781         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
782
783         result r = pControlImpl->SetBounds(bounds);
784         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
785
786         return E_SUCCESS;
787 }
788
789 result
790 Control::SetSize(int w, int h)
791 {
792         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
793         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
794
795         result r = pControlImpl->SetSize(Dimension(w, h));
796         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
797
798         return E_SUCCESS;
799 }
800
801 result
802 Control::SetSize(float w, float h)
803 {
804         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
805         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
806
807         result r = pControlImpl->SetSize(FloatDimension(w, h));
808         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
809
810         return E_SUCCESS;
811 }
812
813 result
814 Control::SetSize(const Dimension& size)
815 {
816         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
817         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
818
819         result r = pControlImpl->SetSize(size);
820         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
821
822         return E_SUCCESS;
823 }
824
825 result
826 Control::SetSize(const FloatDimension& size)
827 {
828         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
829         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
830
831         result r = pControlImpl->SetSize(size);
832         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
833
834         return E_SUCCESS;
835 }
836
837 result
838 Control::SetPosition(int x, int y)
839 {
840         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
841         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
842
843         result r = pControlImpl->SetPosition(Point(x, y));
844         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
845
846         return E_SUCCESS;
847 }
848
849 result
850 Control::SetPosition(float x, float y)
851 {
852         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
853         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
854
855         result r = pControlImpl->SetPosition(FloatPoint(x, y));
856         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
857
858         return E_SUCCESS;
859 }
860
861 result
862 Control::SetPosition(const Point& position)
863 {
864         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
865         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
866
867         result r = pControlImpl->SetPosition(position);
868         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
869
870         return E_SUCCESS;
871 }
872
873 result
874 Control::SetPosition(const FloatPoint& position)
875 {
876         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
877         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
878
879         result r = pControlImpl->SetPosition(position);
880         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
881
882         return E_SUCCESS;
883 }
884
885 result
886 Control::SetFont(const String& fontName)
887 {
888         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
889         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
890
891         result r = pControlImpl->SetFont(fontName);
892         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
893         return E_SUCCESS;
894 }
895
896 bool
897 Control::IsEnabled(void) const
898 {
899         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
900         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
901
902         return pControlImpl->IsEnabled();
903 }
904
905 bool
906 Control::IsVisible(void) const
907 {
908         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
909         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
910
911         return pControlImpl->IsVisible();
912 }
913
914 result
915 Control::SetFocus()
916 {
917         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
918         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
919
920         pControlImpl->SetFocused();
921         result r = GetLastResult();
922         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
923
924         return E_SUCCESS;
925 }
926
927 result
928 Control::SetShowState(bool state)
929 {
930         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
931         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
932
933         result r = pControlImpl->SetVisibleState(state);
934         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
935
936         return E_SUCCESS;
937 }
938
939 Tizen::Ui::Animations::VisualElement*
940 Control::GetVisualElement(void) const
941 {
942         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
943         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
944
945         return pControlImpl->GetVisualElement();
946         //return pControlImpl->GetCustomVisualElement();
947 }
948
949 bool
950 Control::Contains(int x, int y) const
951 {
952         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
953         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
954
955         return pControlImpl->Contains(Point(x, y));
956 }
957
958 bool
959 Control::Contains(float x, float y) const
960 {
961         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
962         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
963
964         return pControlImpl->Contains(FloatPoint(x, y));
965 }
966
967 bool
968 Control::Contains(const Point& point) const
969 {
970         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
971         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
972
973         return pControlImpl->Contains(point);
974 }
975
976 bool
977 Control::Contains(const FloatPoint& point) const
978 {
979         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
980         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
981
982         return pControlImpl->Contains(point);
983 }
984
985 bool
986 Control::HasFocus(void) const
987 {
988         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
989         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
990
991         return pControlImpl->IsFocused();
992 }
993
994 bool
995 Control::GetShowState(void) const
996 {
997         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
998         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
999
1000         return pControlImpl->GetVisibleState();
1001 }
1002
1003 String
1004 Control::GetName(void) const
1005 {
1006         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1007         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1008
1009         return pControlImpl->GetName();
1010 }
1011
1012 void
1013 Control::SetName(const String& name)
1014 {
1015         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1016         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1017
1018         pControlImpl->SetName(name);
1019 }
1020
1021 void
1022 Control::AddFocusEventListener(IFocusEventListener& listener)
1023 {
1024         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1025         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1026
1027         result r = pControlImpl->AddFocusEventListener(listener);
1028         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
1029 }
1030
1031 void
1032 Control::RemoveFocusEventListener(IFocusEventListener& listener)
1033 {
1034         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1035         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1036
1037         result r = pControlImpl->RemoveFocusEventListener(listener);
1038         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
1039 }
1040
1041 void
1042 Control::AddKeyEventListener(IKeyEventListener& listener)
1043 {
1044         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1045         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1046
1047         result r = pControlImpl->AddKeyEventListener(listener);
1048         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
1049 }
1050
1051 void
1052 Control::RemoveKeyEventListener(IKeyEventListener& listener)
1053 {
1054         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1055         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1056
1057         result r = pControlImpl->RemoveKeyEventListener(listener);
1058         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
1059 }
1060
1061 void
1062 Control::AddTouchEventListener(ITouchEventListener& listener)
1063 {
1064         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1065         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1066
1067         result r = pControlImpl->AddTouchEventListener(listener);
1068         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
1069 }
1070
1071 void
1072 Control::RemoveTouchEventListener(ITouchEventListener& listener)
1073 {
1074         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1075         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1076
1077         result r = pControlImpl->RemoveTouchEventListener(listener);
1078         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
1079 }
1080
1081 void
1082 Control::AddDragDropEventListener(IDragDropEventListener& listener)
1083 {
1084         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1085         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1086
1087         result r = pControlImpl->AddDragDropEventListener(listener);
1088         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
1089 }
1090
1091 void
1092 Control::AddDragDropEventListener(IDragDropEventListenerF& listener)
1093 {
1094         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1095         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1096
1097         result r = pControlImpl->AddDragDropEventListener(listener);
1098         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
1099 }
1100
1101 void
1102 Control::RemoveDragDropEventListener(IDragDropEventListener& listener)
1103 {
1104         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1105         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1106
1107         result r = pControlImpl->RemoveDragDropEventListener(listener);
1108         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
1109 }
1110
1111 void
1112 Control::RemoveDragDropEventListenerF(IDragDropEventListenerF& listener)
1113 {
1114         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1115         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1116
1117         result r = pControlImpl->RemoveDragDropEventListenerF(listener);
1118         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
1119 }
1120
1121 void
1122 Control::AddTouchModeChangedEventListener(ITouchModeChangedEventListener& listener)
1123 {
1124         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1125         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1126
1127         result r = pControlImpl->AddTouchModeChangedEventListener(listener);
1128         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
1129 }
1130
1131 void
1132 Control::RemoveTouchModeChangedEventListener(ITouchModeChangedEventListener& listener)
1133 {
1134         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1135         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1136
1137         result r = pControlImpl->RemoveTouchModeChangedEventListener(listener);
1138         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
1139 }
1140
1141 void
1142 Control::SetDragEnabled(bool enabled)
1143 {
1144         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1145         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1146
1147         pControlImpl->SetDragEnabled(enabled);
1148 }
1149
1150 void
1151 Control::SetDropEnabled(bool enabled)
1152 {
1153         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1154         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1155
1156         pControlImpl->SetDropEnabled(enabled);
1157 }
1158
1159 void
1160 Control::RequestRedraw(bool show) const
1161 {
1162         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1163         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1164
1165         pControlImpl->RequestRedraw(show);
1166         result r = GetLastResult();
1167         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
1168 }
1169
1170 result
1171 Control::OnInitializing(void)
1172 {
1173         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1174         SysTryReturn(NID_UI, pControlImpl, E_FAILURE, E_FAILURE, "[E_FAILURE] This callback returns failure.");
1175
1176         return E_SUCCESS;
1177 }
1178
1179 result
1180 Control::OnTerminating(void)
1181 {
1182         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1183         SysTryReturn(NID_UI, pControlImpl, E_FAILURE, E_FAILURE, "[E_FAILURE] This callback returns failure.");
1184
1185         return E_SUCCESS;
1186 }
1187
1188 void
1189 Control::OnUserEventReceivedN(RequestId requestId, IList* pArgs)
1190 {
1191 }
1192
1193 void
1194 Control::SendUserEvent(RequestId requestId, const IList* pArgs) const
1195 {
1196         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1197         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1198
1199         pControlImpl->SendUserEvent(requestId, pArgs);
1200         result r = GetLastResult();
1201         SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
1202 }
1203
1204 result
1205 Control::SetFocusable(bool focusable)
1206 {
1207         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1208         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1209
1210         result r = pControlImpl->SetFocusable(focusable);
1211         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1212
1213         return E_SUCCESS;
1214 }
1215
1216 bool
1217 Control::IsFocusable(void) const
1218 {
1219         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1220         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1221
1222         return pControlImpl->IsFocusable();
1223 }
1224
1225 bool
1226 Control::IsInTouchMode(void) const
1227 {
1228         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1229         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1230
1231         return pControlImpl->IsInTouchMode();
1232 }
1233
1234
1235 result
1236 Control::SetCompositeMode(Tizen::Ui::CompositeMode compositeMode)
1237 {
1238         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1239         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1240
1241         result r = pControlImpl->SetCompositeMode(compositeMode);
1242         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1243
1244         return E_SUCCESS;
1245 }
1246
1247 CompositeMode
1248 Control::GetCompositeMode(void) const
1249 {
1250         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1251         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1252
1253         return pControlImpl->GetCompositeMode();
1254 }
1255
1256 result
1257 Control::SetChromaKeyColor(Color chromaKeyColor)
1258 {
1259         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1260         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1261
1262         result r = pControlImpl->SetChromaKeyColor(chromaKeyColor);
1263         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1264
1265         return E_SUCCESS;
1266 }
1267
1268 Color
1269 Control::GetChromaKeyColor(void) const
1270 {
1271         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1272         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1273
1274         return pControlImpl->GetChromaKeyColor();
1275 }
1276
1277 result
1278 Control::ConsumeInputEvent(void)
1279 {
1280         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1281         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1282
1283         pControlImpl->ConsumeInputEvent();
1284         result r = GetLastResult();
1285         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1286
1287         return E_SUCCESS;
1288 }
1289
1290 IKeyEventListener*
1291 Control::GetDefaultkeyEventListener(void) const
1292 {
1293         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1294         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1295
1296         return pControlImpl->GetDefaultKeyEventListener();
1297 }
1298
1299 result
1300 Control::SetDefaultKeyEventListener(IKeyEventListener* pDefaultListener)
1301 {
1302         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1303         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1304
1305         pControlImpl->SetDefaultKeyEventListener(pDefaultListener);
1306         result r = GetLastResult();
1307         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1308
1309         return E_SUCCESS;
1310 }
1311
1312 ITouchEventListener*
1313 Control::GetDefaultTouchEventListener(void) const
1314 {
1315         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1316         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1317
1318         return pControlImpl->GetDefaultTouchEventListener();
1319 }
1320
1321 result
1322 Control::SetDefaultTouchEventListener(ITouchEventListener* pDefaultListener)
1323 {
1324         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1325         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1326
1327         pControlImpl->SetDefaultTouchEventListener(pDefaultListener);
1328         result r = GetLastResult();
1329         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1330
1331         return E_SUCCESS;
1332 }
1333
1334 bool
1335 Control::IsMovable(void) const
1336 {
1337         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1338         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1339
1340         return pControlImpl->IsMovable();
1341 }
1342
1343 bool
1344 Control::IsResizable(void) const
1345 {
1346         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1347         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1348
1349         return pControlImpl->IsResizable();
1350 }
1351
1352 result
1353 Control::SetMinimumSize(const Dimension& minSize)
1354 {
1355         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1356         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1357
1358         result r = pControlImpl->SetMinimumSize(minSize);
1359         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1360
1361         return E_SUCCESS;
1362 }
1363
1364 result
1365 Control::SetMinimumSize(const FloatDimension& minSize)
1366 {
1367         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1368         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1369
1370         result r = pControlImpl->SetMinimumSize(minSize);
1371         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1372
1373         return E_SUCCESS;
1374 }
1375
1376 result
1377 Control::SetMaximumSize(const Dimension& maxSize)
1378 {
1379         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1380         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1381
1382         result r = pControlImpl->SetMaximumSize(maxSize);
1383         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1384
1385         return E_SUCCESS;
1386 }
1387
1388 result
1389 Control::SetMaximumSize(const FloatDimension& maxSize)
1390 {
1391         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1392         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1393
1394         result r = pControlImpl->SetMaximumSize(maxSize);
1395         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1396
1397         return E_SUCCESS;
1398 }
1399
1400 Point
1401 Control::ConvertToControlPosition(const Point& screenPosition) const
1402 {
1403         const Rectangle errorBounds = _ControlImpl::GetErrorBounds();
1404         const Point errorPosition(errorBounds.x, errorBounds.y);
1405
1406         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1407         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
1408
1409         Point point = pControlImpl->ConvertToControlPosition(screenPosition);
1410         result r = GetLastResult();
1411         SysTryReturn(NID_UI, r == E_SUCCESS, errorPosition, r, "[%s] Propagating.", GetErrorMessage(r));
1412
1413         return point;
1414 }
1415
1416 FloatPoint
1417 Control::ConvertToControlPosition(const FloatPoint& screenPosition) const
1418 {
1419         const FloatRectangle errorBounds = _ControlImpl::GetErrorBoundsF();
1420         const FloatPoint errorPosition(errorBounds.x, errorBounds.y);
1421
1422         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1423         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
1424
1425         FloatPoint point = pControlImpl->ConvertToControlPosition(screenPosition);
1426         result r = GetLastResult();
1427         SysTryReturn(NID_UI, r == E_SUCCESS, errorPosition, r, "[%s] Propagating.", GetErrorMessage(r));
1428
1429         return point;
1430 }
1431
1432 Point
1433 Control::ConvertToScreenPosition(const Point& controlPosition) const
1434 {
1435         const Rectangle errorBounds = _ControlImpl::GetErrorBounds();
1436         const Point errorPosition(errorBounds.x, errorBounds.y);
1437
1438         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1439         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
1440
1441         Point point = pControlImpl->ConvertToScreenPosition(controlPosition);
1442         result r = GetLastResult();
1443         SysTryReturn(NID_UI, r == E_SUCCESS, errorPosition, r, "[%s] Propagating.", GetErrorMessage(r));
1444
1445         return point;
1446 }
1447
1448 FloatPoint
1449 Control::ConvertToScreenPosition(const FloatPoint& controlPosition) const
1450 {
1451         const FloatRectangle errorBounds = _ControlImpl::GetErrorBoundsF();
1452         const FloatPoint errorPosition(errorBounds.x, errorBounds.y);
1453
1454         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1455         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
1456
1457         FloatPoint point = pControlImpl->ConvertToScreenPosition(controlPosition);
1458         result r = GetLastResult();
1459         SysTryReturn(NID_UI, r == E_SUCCESS, errorPosition, r, "[%s] Propagating.", GetErrorMessage(r));
1460
1461         return point;
1462 }
1463
1464 Dimension
1465 Control::GetMinimumSize(void) const
1466 {
1467         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1468         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1469
1470         return pControlImpl->GetMinimumSize();
1471 }
1472
1473 FloatDimension
1474 Control::GetMinimumSizeF(void) const
1475 {
1476         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1477         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1478
1479         return pControlImpl->GetMinimumSizeF();
1480 }
1481
1482 Dimension
1483 Control::GetMaximumSize(void) const
1484 {
1485         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1486         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1487
1488         return pControlImpl->GetMaximumSize();
1489 }
1490
1491 FloatDimension
1492 Control::GetMaximumSizeF(void) const
1493 {
1494         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1495         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1496
1497         return pControlImpl->GetMaximumSizeF();
1498 }
1499
1500 ControlAnimator*
1501 Control::GetControlAnimator(void) const
1502 {
1503         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1504         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1505
1506         return pControlImpl->GetControlAnimator();
1507 }
1508
1509 result
1510 Control::AddGestureDetector(const TouchGestureDetector& gestureDetector)
1511 {
1512         return AddGestureDetector(const_cast< TouchGestureDetector* >(&gestureDetector));
1513 }
1514
1515 result
1516 Control::AddGestureDetector(TouchGestureDetector* pGestureDetector)
1517 {
1518         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1519         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1520
1521         result r = pControlImpl->AddGestureDetector(*pGestureDetector);
1522         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1523
1524         return E_SUCCESS;
1525 }
1526
1527 result
1528 Control::RemoveGestureDetector(const TouchGestureDetector& gestureDetector)
1529 {
1530         return RemoveGestureDetector(const_cast< TouchGestureDetector* >(&gestureDetector));
1531 }
1532
1533 result
1534 Control::RemoveGestureDetector(TouchGestureDetector* pGestureDetector)
1535 {
1536         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1537         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1538
1539         result r = pControlImpl->RemoveGestureDetector(*pGestureDetector);
1540         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1541
1542         return E_SUCCESS;
1543 }
1544
1545 void
1546 Control::SetContentAreaBounds(const Rectangle& rect)
1547 {
1548         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1549         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1550
1551         pControlImpl->SetContentAreaBounds(rect);
1552 }
1553
1554 void
1555 Control::SetContentAreaBounds(const FloatRectangle& rect)
1556 {
1557         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1558         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1559
1560         pControlImpl->SetContentAreaBounds(rect);
1561 }
1562
1563 Rectangle
1564 Control::GetContentAreaBounds(void) const
1565 {
1566         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1567         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1568
1569         Rectangle bounds = pControlImpl->GetContentAreaBounds();
1570
1571         return bounds;
1572 }
1573
1574 FloatRectangle
1575 Control::GetContentAreaBoundsF(void) const
1576 {
1577         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1578         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1579
1580         FloatRectangle bounds = pControlImpl->GetContentAreaBoundsF();
1581
1582         return bounds;
1583 }
1584
1585 Bitmap*
1586 Control::GetCapturedBitmapN(void) const
1587 {
1588         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1589         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1590
1591         return pControlImpl->GetCapturedBitmapN();
1592 }
1593
1594 Rectangle
1595 Control::GetInvalidatedBounds(void) const
1596 {
1597         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1598         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
1599
1600         return pControlImpl->GetInvalidatedBounds();
1601 }
1602
1603 FloatRectangle
1604 Control::GetInvalidatedBoundsF(void) const
1605 {
1606         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1607         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
1608
1609         return pControlImpl->GetInvalidatedBoundsF();
1610 }
1611
1612 void
1613 Control::SetMultipointTouchEnabled(bool enable)
1614 {
1615         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1616         if (pControlImpl)
1617         {
1618                 pControlImpl->SetMultiTouchEnabled(enable);
1619         }
1620 }
1621
1622 bool
1623 Control::IsMultipointTouchEnabled(void) const
1624 {
1625         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1626         if (pControlImpl)
1627         {
1628                 return pControlImpl->IsMultiTouchEnabled();
1629         }
1630
1631         return false;
1632 }
1633
1634 const AccessibilityContainer*
1635 Control::GetAccessibilityContainer(void) const
1636 {
1637         _ControlImpl* pControlImpl = const_cast<_ControlImpl*>(_ControlImpl::GetInstance(*this));
1638         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
1639
1640         return pControlImpl->GetAccessibilityContainer();
1641 }
1642 AccessibilityContainer*
1643 Control::GetAccessibilityContainer(void)
1644 {
1645         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1646         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
1647
1648         return pControlImpl->GetAccessibilityContainer();
1649 }
1650
1651 void
1652 Control::SetPropagatedTouchEventListener(IPropagatedTouchEventListener* pListener)
1653 {
1654         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1655         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
1656
1657         pControlImpl->SetPublicPropagatedTouchEventListener(pListener);
1658 }
1659
1660 void
1661 Control::SetPropagatedKeyEventListener(IPropagatedKeyEventListener* pListener)
1662 {
1663         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1664         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
1665
1666         pControlImpl->SetPublicPropagatedKeyEventListener(pListener);
1667 }
1668
1669 void
1670 Control::SetPreviousFocus(Control* pPreviousFocus)
1671 {
1672         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1673         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
1674
1675         _ControlImpl* pPreviousFocusControlImpl = _ControlImpl::GetInstance(*pPreviousFocus);
1676         SysAssertf(pPreviousFocusControlImpl != null, "Not yet constructed. Construct() should be called before used.");
1677
1678         pControlImpl->SetPreviousFocus(pPreviousFocusControlImpl);
1679
1680 }
1681
1682  void
1683  Control::SetNextFocus(Control* pNextFocus)
1684  {
1685         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1686         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
1687
1688         _ControlImpl* pNextFocusControlImpl = _ControlImpl::GetInstance(*pNextFocus);
1689         SysAssertf(pNextFocusControlImpl != null, "Not yet constructed. Construct() should be called before used.");
1690
1691         pControlImpl->SetNextFocus(pNextFocusControlImpl);
1692
1693  }
1694
1695 Control*
1696 Control::GetPreviousFocus(void) const
1697 {
1698         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1699         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
1700         _ControlImpl*previousControl = pControlImpl->GetPreviousFocus();
1701         return &previousControl->GetPublic();
1702
1703 }
1704
1705 Control*
1706 Control::GetNextFocus(void) const
1707 {
1708         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1709         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
1710
1711         _ControlImpl*nextControl = pControlImpl->GetNextFocus();
1712         return &nextControl->GetPublic();
1713
1714 }
1715
1716 void
1717 Control::SetTouchPressThreshold(float distance)
1718 {
1719         _ControlImpl* pControlImpl = const_cast<_ControlImpl*>(_ControlImpl::GetInstance(*this));
1720         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
1721
1722         return pControlImpl->SetTouchPressThreshold(distance);
1723 }
1724
1725 float
1726 Control::GetTouchPressThreshold(void) const
1727 {
1728         _ControlImpl* pControlImpl = const_cast<_ControlImpl*>(_ControlImpl::GetInstance(*this));
1729         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before used.");
1730
1731         return pControlImpl->GetTouchPressThreshold();
1732 }
1733 result
1734 Control::SetFontFromFile(const Tizen::Base::String& fileName)
1735 {
1736         _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1737         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1738
1739         result r = pControlImpl->SetFontFromFile(fileName);
1740         SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1741         return E_SUCCESS;
1742 }
1743
1744 String
1745 Control::GetFontFile(void) const
1746 {
1747         const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(*this);
1748         SysAssertf(pControlImpl != null, "Not yet constructed. Construct() should be called before use.");
1749
1750         return pControlImpl->GetFontFile();
1751 }
1752 }}      // Tizen::Ui