2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.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
9 // http://www.apache.org/licenses/LICENSE-2.0/
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.
19 * @file FUi_ControlImpl.cpp
20 * @brief This is the implementation file for _ControlImpl class.
23 #include <FBaseColArrayListT.h>
24 #include <FBaseColLinkedListT.h>
25 #include <FBaseRtIEventListener.h>
26 #include <FBaseRtITimerEventListener.h>
27 #include <FUiIDragDropEventListener.h>
28 #include <FUiAccessibilityContainer.h>
29 #include <FUiAnimControlAnimator.h>
30 #include <FUiTouchGestureDetector.h>
31 #include <FApp_AppInfo.h>
32 #include <FBaseSysLog.h>
33 #include <FBase_Log.h>
34 #include <FUiIPropagatedTouchEventListener.h>
35 #include <FUiIPropagatedKeyEventListener.h>
36 #include <FUiKeyEventInfo.h>
37 #include "FUi_ControlImpl.h"
38 #include "FUi_ContainerImpl.h"
39 #include "FUi_Control.h"
40 #include "FUi_ControlManager.h"
41 #include "FUi_ControlImplManager.h"
42 #include "FUi_CoordinateSystemUtils.h"
43 #include "FUi_UiEventManager.h"
44 #include "FUi_UiNotificationEvent.h"
45 #include "FUi_UiTouchEvent.h"
46 #include "FUi_TouchManager.h"
47 #include "FUi_TouchEventArg.h"
48 #include "FUi_ITouchLongPressGestureEventListener.h"
49 #include "FUi_TouchFlickGestureDetector.h"
50 #include "FUi_TouchGestureDetectorImpl.h"
51 #include "FUi_AccessibilityContainerImpl.h"
52 #include "FUi_ResourceManager.h"
53 #include "FUi_WindowImpl.h"
54 #include "FUiAnim_VisualElement.h"
55 #include "FUiAnim_VisualElementImpl.h"
59 using namespace Tizen::Base;
60 using namespace Tizen::Base::Collection;
61 using namespace Tizen::Base::Runtime;
62 using namespace Tizen::Graphics;
63 using namespace Tizen::Ui::Animations;
64 using namespace Tizen::App;
65 using namespace Tizen::Base::Utility;
67 namespace Tizen { namespace Ui {
69 _ControlImpl::SizeInfo::~SizeInfo(void)
74 _ControlImpl::SizeInfo::GetDefaultMinimumSize(_ControlOrientation orientation) const
76 return Dimension(0, 0);
80 _ControlImpl::SizeInfo::GetDefaultMinimumSizeF(_ControlOrientation orientation) const
82 return FloatDimension(0.0f, 0.0f);
86 _ControlImpl::SizeInfo::GetDefaultMaximumSize(_ControlOrientation orientation) const
88 return Dimension(_Control::MAX_LENGTH, _Control::MAX_LENGTH);
92 _ControlImpl::SizeInfo::GetDefaultMaximumSizeF(_ControlOrientation orientation) const
94 return FloatDimension(_Control::MAX_LENGTH, _Control::MAX_LENGTH);
98 _ControlImpl::SizeInfo::GetMinimumSizeLimit(_ControlOrientation orientation) const
100 return Dimension(0, 0);
104 _ControlImpl::SizeInfo::GetMinimumSizeLimitF(_ControlOrientation orientation) const
106 return FloatDimension(0.0f, 0.0f);
110 _ControlImpl::SizeInfo::GetMaximumSizeLimit(_ControlOrientation orientation) const
112 return Dimension(_Control::MAX_LENGTH, _Control::MAX_LENGTH);
116 _ControlImpl::SizeInfo::GetMaximumSizeLimitF(_ControlOrientation orientation) const
118 return FloatDimension(_Control::MAX_LENGTH, _Control::MAX_LENGTH);
122 _ControlImpl::SizeInfo::CheckInitialSizeValid(const Dimension& size, _ControlOrientation orientation) const
126 const Dimension minSize = GetDefaultMinimumSize(orientation);
127 const Dimension maxSize = GetDefaultMaximumSize(orientation);
130 (minSize.width <= size.width) && (size.width <= maxSize.width), E_INVALID_ARG,
131 E_INVALID_ARG, "[E_INVALID_ARG] The width %d is out of width range(%d ~ %d).",
132 size.width, minSize.width, maxSize.width);
135 (minSize.height <= size.height) && (size.height <= maxSize.height), E_INVALID_ARG,
136 E_INVALID_ARG, "[E_INVALID_ARG] The height %d is out of height range(%d ~ %d).",
137 size.height, minSize.height, maxSize.height);
143 _ControlImpl::SizeInfo::CheckInitialSizeValidF(const FloatDimension& size, _ControlOrientation orientation) const
147 const FloatDimension minSize = GetDefaultMinimumSizeF(orientation);
148 const FloatDimension maxSize = GetDefaultMaximumSizeF(orientation);
151 (minSize.width <= size.width) && (size.width <= maxSize.width), E_INVALID_ARG,
152 E_INVALID_ARG, "[E_INVALID_ARG] The width %f is out of width range(%f ~ %f).",
153 size.width, minSize.width, maxSize.width);
156 (minSize.height <= size.height) && (size.height <= maxSize.height), E_INVALID_ARG,
157 E_INVALID_ARG, "[E_INVALID_ARG] The height %f is out of height range(%f ~ %f).",
158 size.height, minSize.height, maxSize.height);
163 const _ControlImpl::SizeInfo&
164 _ControlImpl::GetFullScreenSizeInfo(void)
166 class FullScreenSizeInfo : public _ControlImpl::SizeInfo
169 virtual Dimension GetDefaultMinimumSize(_ControlOrientation orientation) const
171 return GetScreenSize();
174 virtual FloatDimension GetDefaultMinimumSizeF(_ControlOrientation orientation) const
176 return GetScreenSizeF();
179 virtual Dimension GetDefaultMaximumSize(_ControlOrientation orientation) const
181 return GetScreenSize();
184 virtual FloatDimension GetDefaultMaximumSizeF(_ControlOrientation orientation) const
186 return GetScreenSizeF();
189 virtual Dimension GetMinimumSizeLimit(_ControlOrientation orientation) const
191 return GetScreenSize();
194 virtual FloatDimension GetMinimumSizeLimitF(_ControlOrientation orientation) const
196 return GetScreenSizeF();
199 virtual Dimension GetMaximumSizeLimit(_ControlOrientation orientation) const
201 return GetScreenSize();
204 virtual FloatDimension GetMaximumSizeLimitF(_ControlOrientation orientation) const
206 return GetScreenSizeF();
210 Dimension GetScreenSize(void) const
212 _ControlManager* pMgr = _ControlManager::GetInstance();
213 SysTryReturn(NID_UI, pMgr, Dimension(0, 0), E_SYSTEM, "[E_SYSTEM] Failed to get control manager.");
214 return pMgr->GetScreenSize();
217 FloatDimension GetScreenSizeF(void) const
219 _ControlManager* pMgr = _ControlManager::GetInstance();
220 SysTryReturn(NID_UI, pMgr, FloatDimension(0.0f, 0.0f), E_SYSTEM, "[E_SYSTEM] Failed to get control manager.");
221 return pMgr->GetScreenSizeF();
225 static FullScreenSizeInfo sizeInfo;
229 // [ToDo] How to turn-off callback while initializing: Reset/Set delegate?
231 _ControlImpl::InitializeBoundsProperties(const SizeInfo& sizeInfo, _ControlOrientation orientation)
233 result r = E_SUCCESS;
235 bool resizable = IsResizable();
238 r = SetMinimumSize(sizeInfo.GetDefaultMinimumSize(orientation));
240 r == E_SUCCESS, E_SYSTEM,
241 E_SYSTEM, "[E_SYSTEM] Failed to initialize default minimum size.");
243 r = SetMaximumSize(sizeInfo.GetDefaultMaximumSize(orientation));
245 r == E_SUCCESS, E_SYSTEM,
246 E_SYSTEM, "[E_SYSTEM] Failed to initialize default maximum size.");
248 SetResizable(resizable);
254 _ControlImpl::InitializeBoundsProperties(const SizeInfo& sizeInfo, const Tizen::Graphics::Rectangle& bounds, _ControlOrientation orientation)
256 result r = InitializeBoundsProperties(sizeInfo, orientation);
262 bool movable = IsMovable();
263 bool resizable = IsResizable();
267 r = SetBounds(bounds);
270 SetResizable(resizable);
276 _ControlImpl::InitializeBoundsPropertiesF(const SizeInfo& sizeInfo, const Tizen::Graphics::FloatRectangle& bounds, _ControlOrientation orientation)
278 result r = InitializeBoundsProperties(sizeInfo, orientation);
284 bool movable = IsMovable();
285 bool resizable = IsResizable();
289 r = SetBounds(bounds);
292 SetResizable(resizable);
298 _ControlImpl::InitializeBoundsProperties(const SizeInfo& sizeInfo, const Tizen::Graphics::Dimension& size, _ControlOrientation orientation)
300 return InitializeBoundsProperties(sizeInfo, Rectangle(0, 0, size.width, size.height), orientation);
304 _ControlImpl::InitializeBoundsPropertiesF(const SizeInfo& sizeInfo, const Tizen::Graphics::FloatDimension& size, _ControlOrientation orientation)
306 return InitializeBoundsPropertiesF(sizeInfo, FloatRectangle(0.0f, 0.0f, size.width, size.height), orientation);
310 _ControlImpl::CreateControlImplN(Control& control)
313 result r = E_SUCCESS;
315 _Control* pCore = _Control::CreateControlN();
317 SysTryReturn(NID_UI, pCore, null, r, "[%s] Propagating.", GetErrorMessage(r));
319 _ControlImpl* pImpl = new (std::nothrow) _ControlImpl(&control, pCore);
320 r = CheckConstruction(pCore, pImpl);
321 SysTryReturn(NID_UI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
327 _ControlImpl::Destroy(void)
329 result r = E_SUCCESS;
331 _ContainerImpl* pParent = GetParent();
334 r = pParent->RemoveChild(this, true);
335 SysAssert(r == E_SUCCESS);
339 _Control* pParent = GetCore().GetParent();
342 ControlList& children = pParent->GetChildList();
343 r = children.Remove(&GetCore());
346 Control* pControl= &GetPublic();
355 _ControlImpl::GetInstance(Control& control)
357 return static_cast <_ControlImpl*> (control._pControlImpl);
361 _ControlImpl::GetInstance(const Control& control)
363 return static_cast <const _ControlImpl*> (control._pControlImpl);
367 _ControlImpl::CheckConstruction(_Control* pCore, _ControlImpl* pImpl)
373 SysLogException(NID_UI, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
374 return E_OUT_OF_MEMORY;
377 result r = GetLastResult();
382 SysLogException(NID_UI, r, "[%s] Propagating.", GetErrorMessage(r));
389 const Tizen::Base::String _USER_EVENT = L"UserEvent";
390 const Tizen::Base::String _REQUEST_REDRAW_EVENT = L"RequestRedrawEvent";
391 const Tizen::Base::String _KEYBOARD_INSERTED_EVENT = L"KeyboardInsertedEvent";
392 const int keyPressTimer = 500;
393 const int doublePressTime = 330;
394 const int doublePressMoveAllowance = 10;
397 : public Tizen::Base::Object
400 _UserEventInfo(RequestId requestId, const IList* pArgs)
401 : __requestId(requestId)
402 , __pArgs(const_cast <IList*>(pArgs))
405 virtual ~_UserEventInfo(void) {}
407 RequestId GetRequestId(void) const
418 _UserEventInfo(const _UserEventInfo& rhs);
419 _UserEventInfo& operator =(const _UserEventInfo& rhs);
422 RequestId __requestId;
426 class _ControlImpl::CoreKeyEvent
429 CoreKeyEvent(_ControlImpl& impl)
431 , __core(impl.GetCore())
432 , __public(impl.GetPublic())
441 bool IsPublicKey(_KeyCode keyCode)
443 bool isPublicKey = false;
445 if (keyCode <= _KEY_HARDWARE_MAX)
453 result FirePublicListener(IKeyEventListener& listener, KeyState keyState, KeyCode keyCode)
455 result r = E_SUCCESS;
460 listener.OnKeyPressed(__public, keyCode);
463 listener.OnKeyReleased(__public, keyCode);
465 case KEY_LONGPRESSED:
466 listener.OnKeyLongPressed(__public, keyCode);
478 bool ProcessListener(KeyState keyState, _KeyCode keyCode)
480 bool filterd = false;
483 if (IsPublicKey(keyCode))
485 IEnumeratorT <IEventListener*>* pEnumerator = __impl.__pPublicKeyEventListeners->GetEnumeratorN();
488 while (pEnumerator->MoveNext() == E_SUCCESS)
490 IEventListener* pListener = null;
491 pEnumerator->GetCurrent(pListener);
493 IKeyEventListener* pKeyEventListener = dynamic_cast <IKeyEventListener*>(pListener);
494 if (pKeyEventListener)
496 FirePublicListener(*pKeyEventListener, keyState, (KeyCode)keyCode);
503 if (__impl.IsInputEventConsumed())
505 __impl.ResetInputEventConsumed();
512 if (IsPublicKey(keyCode))
514 IKeyEventListener* pDefaultListener = __impl.GetDefaultKeyEventListener();
515 if (pDefaultListener)
517 FirePublicListener(*pDefaultListener, keyState, (KeyCode)keyCode);
519 if (__impl.IsInputEventConsumed())
521 __impl.ResetInputEventConsumed();
533 CoreKeyEvent(const CoreKeyEvent& rhs);
534 CoreKeyEvent& operator =(const CoreKeyEvent& rhs);
537 _ControlImpl& __impl;
542 class _ControlImpl::CoreTouchEvent
545 CoreTouchEvent(_ControlImpl& impl)
547 , __core(impl.GetCore())
548 , __public(impl.GetPublic())
549 , __oldPreviousPressedTime(0)
550 , __previousPressedTime(0)
551 , __currentPressedTime(0)
552 , __previousPressedPoint(0, 0)
553 , __currentPressedPoint(0, 0)
556 __pTouchManager = _TouchManager::GetInstance();
557 SysTryReturnVoidResult(NID_UI, __pTouchManager, E_SYSTEM, "[E_SYSTEM] System error occurred.");
560 ~CoreTouchEvent(void)
566 _TouchEventArg* GetTouchEventArgN(const _TouchInfo& touchInfo)
568 _TouchEventArg* pEventArg = new (std::nothrow) _TouchEventArg(__public, touchInfo.GetTouchStatus());
569 SysTryReturn(NID_UI, pEventArg, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
571 Point startPoint(__pTouchManager->GetStartPoint(touchInfo.GetPointId()).x - __core.GetAbsoluteBounds().x,
572 __pTouchManager->GetStartPoint(touchInfo.GetPointId()).y - __core.GetAbsoluteBounds().y);
574 pEventArg->SetTouchPosition(touchInfo.GetPointId(), startPoint.x, startPoint.y,
575 touchInfo.GetCurrentPosition().x, touchInfo.GetCurrentPosition().y);
579 __impl.__pFlickGestureDetector->GetDistance(xDistance, yDistance);
581 if (xDistance != 0 || yDistance != 0)
583 pEventArg->SetFlickedStatus(true);
587 pEventArg->SetFlickedStatus(false);
593 result FirePublicListener(ITouchEventListener& listener, const TouchEventInfo& touchEventInfo)
595 result r = E_SUCCESS;
597 switch (touchEventInfo.GetTouchStatus())
600 listener.OnTouchPressed(__public, touchEventInfo.GetCurrentPosition(), touchEventInfo);
602 case TOUCH_LONG_PRESSED:
603 listener.OnTouchLongPressed(__public, touchEventInfo.GetCurrentPosition(), touchEventInfo);
606 listener.OnTouchReleased(__public, touchEventInfo.GetCurrentPosition(), touchEventInfo);
609 listener.OnTouchMoved(__public, touchEventInfo.GetCurrentPosition(), touchEventInfo);
611 case TOUCH_DOUBLE_PRESSED:
612 listener.OnTouchDoublePressed(__public, touchEventInfo.GetCurrentPosition(), touchEventInfo);
615 listener.OnTouchFocusIn(__public, touchEventInfo.GetCurrentPosition(), touchEventInfo);
617 case TOUCH_FOCUS_OUT:
618 listener.OnTouchFocusOut(__public, touchEventInfo.GetCurrentPosition(), touchEventInfo);
621 listener.OnTouchCanceled(__public, touchEventInfo.GetCurrentPosition(), touchEventInfo);
632 result FireFocusListener(ITouchEventListener& listener, const TouchEventInfo& touchEventInfo)
634 result r = E_SUCCESS;
636 _ControlManager* pControlManager = _ControlManager::GetInstance();
637 SysTryReturn(NID_UI, pControlManager, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
639 _TouchManager* pTouchManager = _TouchManager::GetInstance();
640 SysTryReturn(NID_UI, pTouchManager, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
642 Point screenPoint(pTouchManager->GetScreenPoint(touchEventInfo.GetPointId()).x, pTouchManager->GetScreenPoint(touchEventInfo.GetPointId()).y);
644 _Control* pTouchedControl = pControlManager->GetTopmostTouchedControl(screenPoint);
645 SysTryReturn(NID_UI, pTouchedControl, E_INVALID_CONDITION, E_INVALID_CONDITION, "[E_INVALID_CONDITION] pTouchedControl is null.");
647 if (__pTouchManager->GetFocusedControlSource() != pTouchedControl)
649 if (&(__core) != pTouchedControl)
651 if (__pTouchManager->GetFocusedControlSource() == &(__core))
653 listener.OnTouchFocusOut(__public, touchEventInfo.GetCurrentPosition(), touchEventInfo);
658 listener.OnTouchFocusIn(__public, touchEventInfo.GetCurrentPosition(), touchEventInfo);
661 __pTouchManager->SetFocusedControlSource(*pTouchedControl);
668 result ProcessDragListener(const _TouchInfo& touchInfo)
670 if (!__core.IsDragEnabled())
672 return E_INVALID_CONDITION;
675 result r = E_SUCCESS;
677 IEnumeratorT <IEventListener*>* pDragEnumerator = __impl.__pPublicDragDropEventListeners->GetEnumeratorN();
680 while (pDragEnumerator->MoveNext() == E_SUCCESS)
682 IEventListener* pDragListener = null;
683 pDragEnumerator->GetCurrent(pDragListener);
685 if (pDragListener != null)
687 IDragDropEventListener* pDragDropEventListener = dynamic_cast <IDragDropEventListener*>(pDragListener);
688 if (pDragDropEventListener != null)
690 pDragDropEventListener->OnTouchDragged(__public, _CoordinateSystemUtils::ConvertToInteger(touchInfo.GetCurrentPosition()), _CoordinateSystemUtils::ConvertToInteger(touchInfo.GetCurrentPosition()));
692 IDragDropEventListenerF* pDragDropEventListenerF = dynamic_cast <IDragDropEventListenerF*>(pDragListener);
693 if (pDragDropEventListenerF != null)
695 pDragDropEventListenerF->OnTouchDraggedF(__public, touchInfo.GetCurrentPosition(), touchInfo.GetCurrentPosition());
699 delete pDragEnumerator;
705 result ProcessDropListener(const _TouchInfo& touchInfo)
707 if (!__core.IsDropEnabled())
709 return E_INVALID_CONDITION;
712 result r = E_SUCCESS;
714 _Control* pDraggedControl = __pTouchManager->GetTouchControlSource();
715 if (pDraggedControl != null)
717 IEnumeratorT<IEventListener*>* pDropEnumerator = __impl.__pPublicDragDropEventListeners->GetEnumeratorN();
720 while (pDropEnumerator->MoveNext() == E_SUCCESS)
722 IEventListener* pDropListener = null;
723 pDropEnumerator->GetCurrent(pDropListener);
725 if (pDropListener != null)
727 IDragDropEventListener* pDropEventListener = dynamic_cast <IDragDropEventListener*>(pDropListener);
728 if (pDropEventListener != null)
730 pDropEventListener->OnTouchDropped(__public, _CoordinateSystemUtils::ConvertToInteger(__pTouchManager->GetStartPoint(touchInfo.GetPointId())), _CoordinateSystemUtils::ConvertToInteger(touchInfo.GetCurrentPosition()));
735 delete pDropEnumerator;
742 result ProcessDropListenerToTopControl(const _TouchInfo& touchInfo)
744 result r = E_SUCCESS;
745 Point pt(__pTouchManager->GetScreenPoint(touchInfo.GetPointId()).x, __pTouchManager->GetScreenPoint(touchInfo.GetPointId()).y);
747 _Control* pCapturedControl = __pTouchManager->GetCapturedControl();
748 _Control* pDraggedControl = __pTouchManager->GetTouchControlSource();
749 if (!pDraggedControl || pCapturedControl)
755 _Control* pTopmostTouchedSource = __core.GetTopmostChildAt(pt);
756 if (!pTopmostTouchedSource)
762 if (!pTopmostTouchedSource->IsDragEnabled())
764 return E_INVALID_CONDITION;
767 TouchEventInfo publicTouchInfo;
769 _TouchEventArg* pEventArg = GetTouchEventArgN(touchInfo);
770 SysTryReturn(NID_UI, pEventArg, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
772 publicTouchInfo.Construct(*pEventArg);
774 if (pTopmostTouchedSource != pDraggedControl)
776 _ControlImpl* pTopmostTouchedTarget = static_cast <_ControlImpl*>(pTopmostTouchedSource->GetUserData());
777 SysTryCatch(NID_UI, pTopmostTouchedTarget, , E_SYSTEM, "[E_SYSTEM] System error occurred.");
779 IEnumeratorT <Runtime::IEventListener*>* pDropEnumerator =
780 pTopmostTouchedTarget->GetDragDropEventListener()->GetEnumeratorN();
784 while (pDropEnumerator->MoveNext() == E_SUCCESS)
786 IEventListener* pDropListener = null;
787 pDropEnumerator->GetCurrent(pDropListener);
789 if (pDropListener != null)
791 IDragDropEventListener* pDropEventListener = dynamic_cast <IDragDropEventListener*>(pDropListener);
792 if (pDropEventListener != null)
794 pDropEventListener->OnTouchDropped(pTopmostTouchedTarget->GetPublic(),
795 publicTouchInfo.GetStartPosition(), _CoordinateSystemUtils::ConvertToInteger(touchInfo.GetCurrentPosition()));
799 delete pDropEnumerator;
802 IEnumeratorT <Runtime::IEventListener*>* pEnumerator =
803 pTopmostTouchedTarget->GetTouchEventListener()->GetEnumeratorN();
807 while (pEnumerator->MoveNext() == E_SUCCESS)
809 Runtime::IEventListener* pListener = null;
810 pEnumerator->GetCurrent(pListener);
812 if (pListener != null)
814 ITouchEventListener* pPublicListener = dynamic_cast <ITouchEventListener*>(pListener);
815 SysAssert(pPublicListener);
817 pPublicListener->OnTouchReleased(pTopmostTouchedTarget->GetPublic(), _CoordinateSystemUtils::ConvertToInteger(touchInfo.GetCurrentPosition()), publicTouchInfo);
823 if (pTopmostTouchedTarget->IsInputEventConsumed())
825 pTopmostTouchedTarget->ResetInputEventConsumed();
829 ITouchEventListener* pDefaultListener = pTopmostTouchedTarget->GetDefaultTouchEventListener();
830 if (pDefaultListener)
832 pDefaultListener->OnTouchReleased(pTopmostTouchedTarget->GetPublic(), _CoordinateSystemUtils::ConvertToInteger(touchInfo.GetCurrentPosition()), publicTouchInfo);
834 if (pTopmostTouchedTarget->IsInputEventConsumed())
836 pTopmostTouchedTarget->ResetInputEventConsumed();
841 if (pTopmostTouchedTarget->OnTouchReleased(*pTopmostTouchedTarget, touchInfo))
853 pTopmostTouchedSource->OnTouchReleased(*pTopmostTouchedSource, touchInfo);
874 bool ProcessListener(const _TouchInfo& touchInfo)
876 bool filterd = false;
878 TouchEventInfo publicTouchInfo;
880 _TouchEventArg* pEventArg = GetTouchEventArgN(touchInfo);
881 SysTryReturn(NID_UI, pEventArg, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
883 publicTouchInfo.Construct(*pEventArg);
885 _Control* pDraggedControl = __pTouchManager->GetTouchControlSource();
888 IEnumeratorT<IEventListener*>* pEnumerator = __impl.__pPublicTouchEventListeners->GetEnumeratorN();
891 while (pEnumerator->MoveNext() == E_SUCCESS)
893 IEventListener* pListener = null;
894 pEnumerator->GetCurrent(pListener);
896 ITouchEventListener* pTouchEventListener = dynamic_cast <ITouchEventListener*>(pListener);
897 if (pTouchEventListener)
899 FirePublicListener(*pTouchEventListener, publicTouchInfo);
901 if (touchInfo.GetTouchStatus() == _TOUCH_RELEASED)
903 if (pDraggedControl == null) //if exist dragged control, don't send focus event
905 FireFocusListener(*pTouchEventListener, publicTouchInfo);
908 else if (touchInfo.GetTouchStatus() == _TOUCH_MOVED)
910 FireFocusListener(*pTouchEventListener, publicTouchInfo);
915 SysAssert(pTouchEventListener);
921 if (__impl.IsInputEventConsumed())
923 __impl.ResetInputEventConsumed();
936 ITouchEventListener* pDefaultListener = __impl.GetDefaultTouchEventListener();
937 if (pDefaultListener)
939 FirePublicListener(*pDefaultListener, publicTouchInfo);
941 if (__impl.IsInputEventConsumed())
943 __impl.ResetInputEventConsumed();
961 bool ProcessDoublePress(const _TouchInfo& touchinfo, bool& isFiltered)
963 if (__pTouchManager->GetPointCount() == 1)
965 __oldPreviousPressedTime = __previousPressedTime;
966 __previousPressedTime = __currentPressedTime;
967 __currentPressedTime = touchinfo.GetTimeStamp();
968 __previousPressedPoint.x = __currentPressedPoint.x;
969 __previousPressedPoint.y = __currentPressedPoint.y;
970 __currentPressedPoint.x = touchinfo.GetCurrentPosition().x;
971 __currentPressedPoint.y = touchinfo.GetCurrentPosition().y;
973 if (Math::Abs(__previousPressedTime - __currentPressedTime) < doublePressTime)
975 if (Math::Abs(__previousPressedTime - __oldPreviousPressedTime) > doublePressTime)
977 if (Math::Abs(__previousPressedPoint.x - __currentPressedPoint.x) < doublePressMoveAllowance
978 && Math::Abs(__previousPressedPoint.y - __currentPressedPoint.y) < doublePressMoveAllowance )
980 _TouchInfo touchInfo(0, _TOUCH_DOUBLE_PRESSED, __pTouchManager->GetPosition(0), false, 0);
982 SysTryReturn(NID_UI, __impl.__pCoreTouchEvent, false, E_SYSTEM, "[E_SYSTEM] System error occurred.");
983 isFiltered = __impl.__pCoreTouchEvent->ProcessListener(touchInfo);
995 CoreTouchEvent(const CoreTouchEvent& rhs);
996 CoreTouchEvent& operator =(const CoreTouchEvent& rhs);
999 _ControlImpl& __impl;
1002 _TouchManager* __pTouchManager;
1003 unsigned int __oldPreviousPressedTime;
1004 unsigned int __previousPressedTime;
1005 unsigned int __currentPressedTime;
1006 Point __previousPressedPoint;
1007 Point __currentPressedPoint;
1010 class _ControlImpl::CoreFocusEvent
1013 CoreFocusEvent(_ControlImpl& impl)
1015 , __core(impl.GetCore())
1016 , __public(impl.GetPublic())
1020 ~CoreFocusEvent(void)
1025 result FirePublicListener(IFocusEventListener& listener, FocusStatus focusState)
1027 result r = E_SUCCESS;
1032 listener.OnFocusGained(__public);
1035 listener.OnFocusLost(__public);
1047 bool ProcessListener(FocusStatus focusState)
1049 bool filterd = false;
1052 IEnumeratorT <IEventListener*>* pEnumerator = __impl.__pPublicFocusEventListeners->GetEnumeratorN();
1055 while (pEnumerator->MoveNext() == E_SUCCESS)
1057 Runtime::IEventListener* pListener = null;
1058 pEnumerator->GetCurrent(pListener);
1059 IFocusEventListener* pFocusEventListener = dynamic_cast <IFocusEventListener*>(pListener);
1060 if (pFocusEventListener)
1062 FirePublicListener(*pFocusEventListener, focusState);
1073 CoreFocusEvent(const CoreFocusEvent& rhs);
1074 CoreFocusEvent& operator =(const CoreFocusEvent& rhs);
1077 _ControlImpl& __impl;
1082 class _ControlImpl::CoreGestureEvent
1085 CoreGestureEvent(_ControlImpl& impl)
1087 , __core(impl.GetCore())
1088 , __public(impl.GetPublic())
1092 ~CoreGestureEvent(void)
1097 bool ProcessListener(_TouchGestureDetectorType gestureType)
1099 bool filterd = false;
1101 _TouchManager* pTouchManager = _TouchManager::GetInstance();
1102 SysTryReturn(NID_UI, pTouchManager, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1104 switch (gestureType)
1106 case _TOUCH_GESTURE_DETECTOR_TYPE_TAP:
1108 _TouchInfo touchInfo(0, _TOUCH_DOUBLE_PRESSED, pTouchManager->GetPosition(0), false, 0);
1110 SysTryReturn(NID_UI, __impl.__pCoreTouchEvent, false, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1111 filterd = __impl.__pCoreTouchEvent->ProcessListener(touchInfo);
1114 case _TOUCH_GESTURE_DETECTOR_TYPE_LONG_PRESS:
1116 _TouchInfo touchInfo(0, _TOUCH_LONG_PRESSED, pTouchManager->GetPosition(0), false, 0);
1118 SysTryReturn(NID_UI, __impl.__pCoreTouchEvent, false, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1119 filterd = __impl.__pCoreTouchEvent->ProcessListener(touchInfo);
1131 CoreGestureEvent(const CoreGestureEvent& rhs);
1132 CoreGestureEvent& operator =(const CoreGestureEvent& rhs);
1135 _ControlImpl& __impl;
1140 class _ControlImpl::CoreEventListener
1141 : public _IFocusEventListener
1142 , public _INotificationEventListener
1143 , public _ITouchLongPressGestureEventListener
1144 , virtual public Tizen::Base::Runtime::IEventListener
1145 , virtual public _IUiEventListener
1146 , virtual public _ITouchGestureEventListener
1149 CoreEventListener(_ControlImpl& impl)
1151 , __core(impl.GetCore())
1152 , __public(impl.GetPublic())
1153 , __isKeyPressed(false)
1156 __pTouchManager = _TouchManager::GetInstance();
1157 SysTryReturnVoidResult(NID_UI, __pTouchManager, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1162 virtual ~CoreEventListener(void)
1166 virtual bool OnFocusGained(const _Control& source)
1168 SysTryReturn(NID_UI, __impl.__pCoreFocusEvent, false, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1170 bool isFiltered = false;
1172 isFiltered = __impl.__pCoreFocusEvent->ProcessListener(FOCUS_GAINED);
1179 isFiltered = __impl.OnFocusGained(__impl);
1186 isFiltered = __core.OnFocusGained(source);
1191 virtual bool OnFocusLost(const _Control& source)
1193 SysTryReturn(NID_UI, __impl.__pCoreFocusEvent, false, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1195 bool isFiltered = false;
1197 isFiltered = __impl.__pCoreFocusEvent->ProcessListener(FOCUS_LOST);
1204 isFiltered = __impl.OnFocusLost(__impl);
1211 isFiltered = __core.OnFocusLost(source);
1216 virtual bool OnNotifiedN(const _Control& source, Tizen::Base::Collection::IList* pArgs)
1218 if (__impl.SendNotification(__impl, pArgs))
1223 if (&source == &__core)
1225 if (ProcessTouchModeChangedListener(source, pArgs))
1227 pArgs->RemoveAll(true);
1234 if (__impl.OnNotifiedN(__impl, pArgs))
1240 return __core.OnNotifiedN(source, pArgs);
1243 virtual bool OnLongPressGestureDetected(_TouchLongPressGestureDetector& gesture)
1245 SysTryReturn(NID_UI, __impl.__pCoreGestureEvent, false, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1246 bool isFiltered = false;
1248 isFiltered = __impl.__pCoreGestureEvent->ProcessListener(_TOUCH_GESTURE_DETECTOR_TYPE_LONG_PRESS);
1253 virtual bool OnLongPressGestureCanceled(_TouchLongPressGestureDetector& gesture)
1258 bool ProcessTouchModeChangedListener(const _Control& source, Tizen::Base::Collection::IList* pArgs)
1260 IEnumeratorT<IEventListener*>* pEnumerator = __impl.__pPublicTouchModeChangedEventListeners->GetEnumeratorN();
1261 bool isFiltered = false;
1265 while(pEnumerator->MoveNext() == E_SUCCESS)
1267 IEventListener* pEventListener = null;
1268 pEnumerator->GetCurrent(pEventListener);
1270 if (!pEventListener)
1275 String* pString = dynamic_cast<String*>(pArgs->GetAt(0));
1276 if (pString && (*pString == _KEYBOARD_INSERTED_EVENT))
1278 Boolean* pIsTouchMode = dynamic_cast<Boolean*>(pArgs->GetAt(1));
1279 ITouchModeChangedEventListener* pTouchModeListener = dynamic_cast<ITouchModeChangedEventListener*>(pEventListener);
1280 if (pTouchModeListener && pIsTouchMode)
1282 pTouchModeListener->OnTouchModeChanged(__impl.GetPublic(), pIsTouchMode->ToBool()) ;
1294 CoreEventListener(const CoreEventListener& rhs);
1295 CoreEventListener& operator =(const CoreEventListener& rhs);
1298 _ControlImpl& __impl;
1301 _TouchManager* __pTouchManager;
1302 bool __isKeyPressed;
1303 _KeyInfo* __pKeyInfo;
1306 class _ControlImpl::_PropagatedTouchEventListener
1307 : public _IPropagatedTouchEventListener
1310 _PropagatedTouchEventListener(_ControlImpl& impl)
1312 , __core(impl.GetCore())
1313 , __public(impl.GetPublic())
1317 virtual ~_PropagatedTouchEventListener()
1321 _TouchEventArg* GetTouchEventArgN(const _TouchInfo& touchInfo)
1323 _TouchEventArg* pEventArg = new (std::nothrow) _TouchEventArg(__public, touchInfo.GetTouchStatus());
1324 SysTryReturn(NID_UI, pEventArg, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
1326 _TouchManager* __pTouchManager = _TouchManager::GetInstance();
1327 SysTryReturn(NID_UI, __pTouchManager, null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] __pTouchManager == null.");
1329 Point startPoint(__pTouchManager->GetStartPoint(touchInfo.GetPointId()).x - __core.GetAbsoluteBounds().x,
1330 __pTouchManager->GetStartPoint(touchInfo.GetPointId()).y - __core.GetAbsoluteBounds().y);
1332 pEventArg->SetTouchPosition(touchInfo.GetPointId(), startPoint.x, startPoint.y,
1333 touchInfo.GetCurrentPosition().x, touchInfo.GetCurrentPosition().y);
1337 __impl.__pFlickGestureDetector->GetDistance(xDistance, yDistance);
1339 if (xDistance != 0 || yDistance != 0)
1341 pEventArg->SetFlickedStatus(true);
1345 pEventArg->SetFlickedStatus(false);
1351 virtual bool OnTouchPressed(const _Control& source, const _TouchInfo& touchInfo)
1353 bool isFiltered = false;
1355 if (__impl.__pPublicPropagatedTouchEventListener != null)
1357 _ControlImpl* pControlImpl = static_cast<_ControlImpl*>(source.GetUserData());
1358 SysTryReturn(NID_UI, pControlImpl, false, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] pControlImpl == null.");
1360 Control& control = static_cast<Control&>(pControlImpl->GetPublic());
1362 TouchEventInfo publicTouchInfo;
1364 _TouchEventArg* pEventArg = GetTouchEventArgN(touchInfo);
1365 SysTryReturn(NID_UI, pEventArg, false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
1367 publicTouchInfo.Construct(*pEventArg);
1375 isFiltered = __impl.__pPublicPropagatedTouchEventListener->OnTouchPressed(control, publicTouchInfo);
1382 return __impl.CallOnTouchPressed(source, touchInfo);
1385 virtual bool OnTouchReleased(const _Control& source, const _TouchInfo& touchInfo)
1387 bool isFiltered = false;
1389 if (__impl.__pPublicPropagatedTouchEventListener != null)
1391 _ControlImpl* pControlImpl = static_cast<_ControlImpl*>(source.GetUserData());
1392 SysTryReturn(NID_UI, pControlImpl, false, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] pControlImpl == null.");
1394 Control& control = static_cast<Control&>(pControlImpl->GetPublic());
1396 TouchEventInfo publicTouchInfo;
1398 _TouchEventArg* pEventArg = GetTouchEventArgN(touchInfo);
1399 SysTryReturn(NID_UI, pEventArg, false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
1401 publicTouchInfo.Construct(*pEventArg);
1409 isFiltered = __impl.__pPublicPropagatedTouchEventListener->OnTouchReleased(control, publicTouchInfo);
1416 return __impl.CallOnTouchReleased(source, touchInfo);
1419 virtual bool OnTouchMoved(const _Control& source, const _TouchInfo& touchInfo)
1421 bool isFiltered = false;
1423 if (__impl.__pPublicPropagatedTouchEventListener != null)
1425 _ControlImpl* pControlImpl = static_cast<_ControlImpl*>(source.GetUserData());
1426 SysTryReturn(NID_UI, pControlImpl, false, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] pControlImpl == null.");
1428 Control& control = static_cast<Control&>(pControlImpl->GetPublic());
1430 TouchEventInfo publicTouchInfo;
1432 _TouchEventArg* pEventArg = GetTouchEventArgN(touchInfo);
1433 SysTryReturn(NID_UI, pEventArg, false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
1435 publicTouchInfo.Construct(*pEventArg);
1443 isFiltered = __impl.__pPublicPropagatedTouchEventListener->OnTouchMoved(control, publicTouchInfo);
1450 return __impl.CallOnTouchMoved(source, touchInfo);
1453 virtual bool OnTouchCanceled(const _Control& source, const _TouchInfo& touchInfo)
1455 bool isFiltered = false;
1457 if (__impl.__pPublicPropagatedTouchEventListener != null)
1459 _ControlImpl* pControlImpl = static_cast<_ControlImpl*>(source.GetUserData());
1460 SysTryReturn(NID_UI, pControlImpl, false, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] pControlImpl == null.");
1462 Control& control = static_cast<Control&>(pControlImpl->GetPublic());
1464 TouchEventInfo publicTouchInfo;
1466 _TouchEventArg* pEventArg = GetTouchEventArgN(touchInfo);
1467 SysTryReturn(NID_UI, pEventArg, false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
1469 publicTouchInfo.Construct(*pEventArg);
1477 isFiltered = __impl.__pPublicPropagatedTouchEventListener->OnTouchCanceled(control, publicTouchInfo);
1484 return __impl.CallOnTouchCanceled(source, touchInfo);
1487 virtual _UiTouchEventDelivery OnPreviewTouchPressed(const _Control& source, const _TouchInfo& touchInfo)
1489 _UiTouchEventDelivery isFiltered = _UI_TOUCH_EVENT_DELIVERY_NO;
1491 if (__impl.__pPublicPropagatedTouchEventListener != null)
1493 _ControlImpl* pControlImpl = static_cast<_ControlImpl*>(source.GetUserData());
1494 SysTryReturn(NID_UI, pControlImpl, _UI_TOUCH_EVENT_DELIVERY_YES, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] pControlImpl == null.");
1496 Control& control = static_cast<Control&>(pControlImpl->GetPublic());
1498 TouchEventInfo publicTouchInfo;
1500 _TouchEventArg* pEventArg = GetTouchEventArgN(touchInfo);
1501 SysTryReturn(NID_UI, pEventArg, _UI_TOUCH_EVENT_DELIVERY_YES, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
1503 publicTouchInfo.Construct(*pEventArg);
1511 if (__impl.__pPublicPropagatedTouchEventListener->OnPreviewTouchPressed(control, publicTouchInfo) == true)
1513 return _UI_TOUCH_EVENT_DELIVERY_NO;
1518 isFiltered = __impl.OnPreviewTouchPressed(__impl, touchInfo);
1519 if (isFiltered == _UI_TOUCH_EVENT_DELIVERY_NO)
1521 return _UI_TOUCH_EVENT_DELIVERY_NO;
1525 isFiltered = __core.OnPreviewTouchPressed(source, touchInfo);
1530 virtual _UiTouchEventDelivery OnPreviewTouchReleased(const _Control& source, const _TouchInfo& touchInfo)
1532 _UiTouchEventDelivery isFiltered = _UI_TOUCH_EVENT_DELIVERY_NO;
1534 if (__impl.__pPublicPropagatedTouchEventListener != null)
1536 _ControlImpl* pControlImpl = static_cast<_ControlImpl*>(source.GetUserData());
1537 SysTryReturn(NID_UI, pControlImpl, _UI_TOUCH_EVENT_DELIVERY_YES, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] pControlImpl == null.");
1539 Control& control = static_cast<Control&>(pControlImpl->GetPublic());
1541 TouchEventInfo publicTouchInfo;
1543 _TouchEventArg* pEventArg = GetTouchEventArgN(touchInfo);
1544 SysTryReturn(NID_UI, pEventArg, _UI_TOUCH_EVENT_DELIVERY_YES, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
1546 publicTouchInfo.Construct(*pEventArg);
1554 if (__impl.__pPublicPropagatedTouchEventListener->OnPreviewTouchReleased(control, publicTouchInfo) == true)
1556 return _UI_TOUCH_EVENT_DELIVERY_NO;
1561 isFiltered = __impl.OnPreviewTouchReleased(__impl, touchInfo);
1562 if (isFiltered == _UI_TOUCH_EVENT_DELIVERY_NO)
1564 return _UI_TOUCH_EVENT_DELIVERY_NO;
1568 isFiltered = __core.OnPreviewTouchReleased(source, touchInfo);
1573 virtual _UiTouchEventDelivery OnPreviewTouchMoved(const _Control& source, const _TouchInfo& touchInfo)
1575 _UiTouchEventDelivery isFiltered = _UI_TOUCH_EVENT_DELIVERY_NO;
1577 if (__impl.__pPublicPropagatedTouchEventListener != null)
1579 _ControlImpl* pControlImpl = static_cast<_ControlImpl*>(source.GetUserData());
1580 SysTryReturn(NID_UI, pControlImpl, _UI_TOUCH_EVENT_DELIVERY_YES, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] pControlImpl == null.");
1582 Control& control = static_cast<Control&>(pControlImpl->GetPublic());
1584 TouchEventInfo publicTouchInfo;
1586 _TouchEventArg* pEventArg = GetTouchEventArgN(touchInfo);
1587 SysTryReturn(NID_UI, pEventArg, _UI_TOUCH_EVENT_DELIVERY_YES, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
1589 publicTouchInfo.Construct(*pEventArg);
1597 if (__impl.__pPublicPropagatedTouchEventListener->OnPreviewTouchMoved(control, publicTouchInfo) == true)
1599 return _UI_TOUCH_EVENT_DELIVERY_NO;
1604 isFiltered = __impl.OnPreviewTouchMoved(__impl, touchInfo);
1605 if (isFiltered == _UI_TOUCH_EVENT_DELIVERY_NO)
1607 return _UI_TOUCH_EVENT_DELIVERY_NO;
1611 isFiltered = __core.OnPreviewTouchMoved(source, touchInfo);
1616 virtual _UiTouchEventDelivery OnPreviewTouchCanceled(const _Control& source, const _TouchInfo& touchInfo)
1618 return _UI_TOUCH_EVENT_DELIVERY_YES;
1621 virtual void OnTouchPressHandled(const _Control& source)
1623 __impl.OnTouchPressHandled(source);
1626 virtual void OnTouchReleaseHandled(const _Control& source)
1628 __impl.OnTouchReleaseHandled(source);
1631 virtual void OnTouchMoveHandled(const _Control& source)
1633 __impl.OnTouchMoveHandled(source);
1636 virtual void OnTouchCancelHandled(const _Control& source)
1638 __impl.OnTouchCancelHandled(source);
1642 _ControlImpl& __impl;
1647 class _ControlImpl::_PropagatedKeyEventListener
1648 : public _IPropagatedKeyEventListener
1649 , public ITimerEventListener
1652 _PropagatedKeyEventListener(_ControlImpl& impl)
1654 , __core(impl.GetCore())
1655 , __public(impl.GetPublic())
1657 , __isKeyPressed(false)
1662 virtual ~_PropagatedKeyEventListener()
1664 if (__pTimer != null)
1673 void OnTimerExpired(Timer& timer)
1677 SysTryReturnVoidResult(NID_UI, __impl.__pCoreKeyEvent, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1679 __impl.__pCoreKeyEvent->ProcessListener(KEY_LONGPRESSED, __pKeyInfo->GetKeyCode());
1683 virtual bool OnKeyPressed(const _Control& source, const _KeyInfo& keyInfo)
1685 SysTryReturn(NID_UI, __impl.__pCoreKeyEvent, false, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1687 bool isFiltered = false;
1689 //SysLog(NID_UI, ">>> [impl.1] OnKeyPressed(%d, %d)", keyInfo.GetKeyCode(), keyInfo.GetKeyModifier());
1691 if (__impl.__pPublicPropagatedKeyEventListener != null)
1693 _ControlImpl* pControlImpl = static_cast<_ControlImpl*>(source.GetUserData());
1694 SysTryReturn(NID_UI, pControlImpl, false, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] pControlImpl == null.");
1696 Control& control = static_cast<Control&>(pControlImpl->GetPublic());
1698 KeyEventInfo* pKeyEventInfo = new (std::nothrow) KeyEventInfo(static_cast<KeyCode>(keyInfo.GetKeyCode()),
1699 static_cast<KeyModifier>(keyInfo.GetKeyModifier()));
1701 //SysLog(NID_UI, ">>> [impl.2] OnKeyPressed(%d, %d)", keyInfo.GetKeyCode(), keyInfo.GetKeyModifier());
1703 isFiltered = __impl.__pPublicPropagatedKeyEventListener->OnKeyPressed(control, *pKeyEventInfo);
1710 //SysLog(NID_UI, ">>> [impl.3] OnKeyPressed(%d, %d)", keyInfo.GetKeyCode(), keyInfo.GetKeyModifier());
1712 if (&source == &__core)
1714 if (!__isKeyPressed)
1716 __pTimer = new (std::nothrow) Timer;
1717 SysTryReturn(NID_UI, __pTimer, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1719 result r = __pTimer->Construct(*this);
1720 SysTryReturn(NID_UI, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1722 r = __pTimer->Start(keyPressTimer);
1725 __isKeyPressed = true;
1726 __pKeyInfo = const_cast<_KeyInfo*>(&keyInfo);
1730 isFiltered = __impl.__pCoreKeyEvent->ProcessListener(KEY_PRESSED, keyInfo.GetKeyCode());
1738 isFiltered = __impl.OnKeyPressed(__impl, keyInfo);
1745 isFiltered = __core.OnKeyPressed(source, keyInfo);
1750 virtual bool OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
1752 SysTryReturn(NID_UI, __impl.__pCoreKeyEvent, false, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1754 bool isFiltered = false;
1756 //SysLog(NID_UI, ">>> [impl.1] OnKeyReleased(%d, %d)", keyInfo.GetKeyCode(), keyInfo.GetKeyModifier());
1758 if (__impl.__pPublicPropagatedKeyEventListener != null)
1760 _ControlImpl* pControlImpl = static_cast<_ControlImpl*>(source.GetUserData());
1761 SysTryReturn(NID_UI, pControlImpl, false, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] pControlImpl == null.");
1763 Control& control = static_cast<Control&>(pControlImpl->GetPublic());
1765 KeyEventInfo* pKeyEventInfo = new (std::nothrow) KeyEventInfo(static_cast<KeyCode>(keyInfo.GetKeyCode()),
1766 static_cast<KeyModifier>(keyInfo.GetKeyModifier()));
1768 //SysLog(NID_UI, ">>> [impl.2] OnKeyReleased(%d, %d)", keyInfo.GetKeyCode(), keyInfo.GetKeyModifier());
1770 isFiltered = __impl.__pPublicPropagatedKeyEventListener->OnKeyReleased(control, *pKeyEventInfo);
1777 //SysLog(NID_UI, ">>> [impl.3] OnKeyReleased(%d, %d)", keyInfo.GetKeyCode(), keyInfo.GetKeyModifier());
1779 if (&source == &__core)
1781 __isKeyPressed = false;
1784 if (__pTimer != null)
1792 isFiltered = __impl.__pCoreKeyEvent->ProcessListener(KEY_RELEASED, keyInfo.GetKeyCode());
1800 isFiltered = __impl.OnKeyReleased(__impl, keyInfo);
1807 isFiltered = __core.OnKeyReleased(source, keyInfo);
1812 virtual bool OnPreviewKeyPressed(const _Control& source, const _KeyInfo& keyInfo)
1814 bool isFiltered = false;
1816 if (__impl.__pPublicPropagatedKeyEventListener != null)
1818 _ControlImpl* pControlImpl = static_cast<_ControlImpl*>(source.GetUserData());
1819 SysTryReturn(NID_UI, pControlImpl, false, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] pControlImpl == null.");
1821 Control& control = static_cast<Control&>(pControlImpl->GetPublic());
1823 KeyEventInfo* pKeyEventInfo = new (std::nothrow) KeyEventInfo(static_cast<KeyCode>(keyInfo.GetKeyCode()),
1824 static_cast<KeyModifier>(keyInfo.GetKeyModifier()));
1826 isFiltered = __impl.__pPublicPropagatedKeyEventListener->OnPreviewKeyPressed(control, *pKeyEventInfo);
1834 isFiltered = __impl.OnPreviewKeyPressed(__impl, keyInfo);
1841 isFiltered = __core.OnPreviewKeyPressed(source, keyInfo);
1846 virtual bool OnPreviewKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
1848 bool isFiltered = false;
1850 if (__impl.__pPublicPropagatedKeyEventListener != null)
1852 _ControlImpl* pControlImpl = static_cast<_ControlImpl*>(source.GetUserData());
1853 SysTryReturn(NID_UI, pControlImpl, false, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] pControlImpl == null.");
1855 Control& control = static_cast<Control&>(pControlImpl->GetPublic());
1857 KeyEventInfo* pKeyEventInfo = new (std::nothrow) KeyEventInfo(static_cast<KeyCode>(keyInfo.GetKeyCode()),
1858 static_cast<KeyModifier>(keyInfo.GetKeyModifier()));
1860 isFiltered = __impl.__pPublicPropagatedKeyEventListener->OnPreviewKeyReleased(control, *pKeyEventInfo);
1868 isFiltered = __impl.OnPreviewKeyReleased(__impl, keyInfo);
1875 isFiltered = __core.OnPreviewKeyReleased(source, keyInfo);
1880 _ControlImpl& __impl;
1884 Tizen::Base::Runtime::Timer* __pTimer;
1885 bool __isKeyPressed;
1886 _KeyInfo* __pKeyInfo;
1890 _ControlImpl::GetErrorBounds(void)
1892 return Rectangle(0, 0, -1, -1);
1896 _ControlImpl::GetErrorBoundsF(void)
1898 return FloatRectangle(0.0f, 0.0f, -1.0f, -1.0f);
1902 _ControlImpl::GetErrorCompositeMode(void)
1904 return COMPOSITE_MODE_ALPHA_BLENDING;
1908 _ControlImpl::GetErrorChromaKeyColor(void)
1910 return Color::GetColor(COLOR_ID_MAGENTA);
1914 _ControlImpl::GetErrorMinimumSize(void)
1916 return Dimension(-1, -1);
1920 _ControlImpl::GetErrorMinimumSizeF(void)
1922 return FloatDimension(-1.0f, -1.0f);
1926 _ControlImpl::GetErrorMaximumSize(void)
1928 return Dimension(-1, -1);
1932 _ControlImpl::GetErrorMaximumSizeF(void)
1934 return FloatDimension(-1.0f, -1.0f);
1938 _ControlImpl::GetPublicClassName(void) const
1940 return "Tizen::Ui::Control";
1944 _ControlImpl::GetPublic(void) const
1946 return *__pControlPublic;
1950 _ControlImpl::GetPublic(void)
1952 return *__pControlPublic;
1956 _ControlImpl::GetCore(void) const
1958 return *__pControlCore;
1962 _ControlImpl::GetCore(void)
1964 return *__pControlCore;
1968 _ControlImpl::AddFocusEventListener(IFocusEventListener& listener)
1971 SysTryReturn(NID_UI,
1972 __pPublicFocusEventListeners->Add(const_cast <IFocusEventListener*>(&listener)) == E_SUCCESS, E_SYSTEM,
1973 E_SYSTEM, "[E_SYSTEM] System error occurred.");
1979 _ControlImpl::AddKeyEventListener(IKeyEventListener& listener)
1982 SysTryReturn(NID_UI,
1983 __pPublicKeyEventListeners->Add(const_cast <IKeyEventListener*>(&listener)) == E_SUCCESS, E_SYSTEM,
1984 E_SYSTEM, "[E_SYSTEM] System error occurred.");
1990 _ControlImpl::AddTouchEventListener(ITouchEventListener& listener)
1992 SysAssert(__pControlCore && __pCoreEventListener && __pLongPressGestureDetector && __pFlickGestureDetector);
1995 SysTryReturn(NID_UI,
1996 __pPublicTouchEventListeners->Add(const_cast <ITouchEventListener*>(&listener)) == E_SUCCESS, E_SYSTEM,
1997 E_SYSTEM, "[E_SYSTEM] System error occurred.");
1999 OnTouchEventListenerAdded();
2004 Tizen::Base::Collection::LinkedListT <Tizen::Base::Runtime::IEventListener*>*
2005 _ControlImpl::GetTouchEventListener(void) const
2007 return __pPublicTouchEventListeners;
2011 _ControlImpl::AddDragDropEventListener(IDragDropEventListener& listener)
2014 SysTryReturn(NID_UI,
2015 __pPublicDragDropEventListeners->Add(const_cast <IDragDropEventListener*>(&listener)) == E_SUCCESS, E_SYSTEM,
2016 E_SYSTEM, "[E_SYSTEM] System error occurred.");
2022 _ControlImpl::AddDragDropEventListener(IDragDropEventListenerF& listener)
2025 SysTryReturn(NID_UI,
2026 __pPublicDragDropEventListeners->Add(const_cast <IDragDropEventListenerF*>(&listener)) == E_SUCCESS, E_SYSTEM,
2027 E_SYSTEM, "[E_SYSTEM] System error occurred.");
2032 Tizen::Base::Collection::LinkedListT <Tizen::Base::Runtime::IEventListener*>*
2033 _ControlImpl::GetDragDropEventListener(void) const
2035 return __pPublicDragDropEventListeners;
2039 _ControlImpl::AddTouchModeChangedEventListener(ITouchModeChangedEventListener& listener)
2042 SysTryReturn(NID_UI,
2043 __pPublicTouchModeChangedEventListeners->Add(
2044 const_cast <ITouchModeChangedEventListener*>(&listener)) == E_SUCCESS, E_SYSTEM,
2045 E_SYSTEM, "[E_SYSTEM] System error occurred.");
2051 _ControlImpl::RemoveFocusEventListener(IFocusEventListener& listener)
2054 SysTryReturn(NID_UI,
2055 __pPublicFocusEventListeners->Remove(&listener) == E_SUCCESS, E_SYSTEM,
2056 E_SYSTEM, "[E_SYSTEM] System error occurred.");
2062 _ControlImpl::RemoveKeyEventListener(IKeyEventListener& listener)
2065 SysTryReturn(NID_UI,
2066 __pPublicKeyEventListeners->Remove(&listener) == E_SUCCESS, E_SYSTEM,
2067 E_SYSTEM, "[E_SYSTEM] System error occurred.");
2073 _ControlImpl::RemoveTouchEventListener(ITouchEventListener& listener)
2076 SysTryReturn(NID_UI,
2077 __pPublicTouchEventListeners->Remove(&listener) == E_SUCCESS, E_SYSTEM,
2078 E_SYSTEM, "[E_SYSTEM] System error occurred.");
2080 // [ToDo] if the number of touch event listers becomes 0, disable gesture recognition.
2082 OnTouchEventListenerRemoved();
2088 _ControlImpl::RemoveDragDropEventListener(IDragDropEventListener& listener)
2091 SysTryReturn(NID_UI,
2092 __pPublicDragDropEventListeners->Remove(&listener) == E_SUCCESS, E_SYSTEM,
2093 E_SYSTEM, "[E_SYSTEM] System error occurred.");
2099 _ControlImpl::RemoveDragDropEventListenerF(IDragDropEventListenerF& listener)
2102 SysTryReturn(NID_UI,
2103 __pPublicDragDropEventListeners->Remove(&listener) == E_SUCCESS, E_SYSTEM,
2104 E_SYSTEM, "[E_SYSTEM] System error occurred.");
2110 _ControlImpl::RemoveTouchModeChangedEventListener(ITouchModeChangedEventListener& listener)
2113 SysTryReturn(NID_UI,
2114 __pPublicTouchModeChangedEventListeners->Remove(&listener) == E_SUCCESS, E_SYSTEM,
2115 E_SYSTEM, "[E_SYSTEM] System error occurred.");
2121 _ControlImpl::AddGestureDetector(const TouchGestureDetector& gestureDetector)
2123 SysTryReturn(NID_UI,
2124 __pPublicGestureDetectors->Add(
2125 const_cast <TouchGestureDetector*>(&gestureDetector)) == E_SUCCESS, E_SYSTEM,
2126 E_SYSTEM, "[E_SYSTEM] System error occurred.");
2128 const _TouchGestureDetectorImpl* pImpl = _TouchGestureDetectorImpl::GetInstance(gestureDetector);
2129 SysTryReturn(NID_UI, pImpl, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
2131 result r = GetCore().AddGestureDetector(pImpl->GetCore());
2132 SysTryReturn(NID_UI, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
2138 _ControlImpl::RemoveGestureDetector(const TouchGestureDetector& gestureDetector)
2140 SysTryReturn(NID_UI,
2141 __pPublicGestureDetectors->Remove(
2142 const_cast <TouchGestureDetector*>(&gestureDetector)) == E_SUCCESS, E_SYSTEM,
2143 E_SYSTEM, "[E_SYSTEM] System error occurred.");
2145 const _TouchGestureDetectorImpl* pImpl = _TouchGestureDetectorImpl::GetInstance(gestureDetector);
2146 SysTryReturn(NID_UI, pImpl, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
2148 result r = GetCore().RemoveGestureDetector(pImpl->GetCore());
2149 SysTryReturn(NID_UI, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
2154 IListT<TouchGestureDetector*>*
2155 _ControlImpl::GetGestureDetectorList(void) const
2157 return __pPublicGestureDetectors;
2161 _ControlImpl::IsMovable(void) const
2163 return GetCore().IsMovable();
2167 _ControlImpl::IsResizable(void) const
2169 return GetCore().IsResizable();
2173 _ControlImpl::GetContentSize(void) const
2175 return GetCore().GetContentSize();
2179 _ControlImpl::GetContentSizeF(void) const
2181 return GetCore().GetContentSizeF();
2185 _ControlImpl::HitTest(const Tizen::Graphics::FloatPoint& point)
2187 return GetCore().HitTest(point);
2191 _ControlImpl::GetDescription(void) const
2193 String description(L"");
2195 description.Format(LOG_LEN_MAX, L"0x%x(0x%x, %s) fgColor(0x%x) fontSize(%d) ", this, __pControlPublic, GetPublicClassName(), __foregroundColor.GetRGB32(), __fontSize);
2197 if (__pControlAnimator)
2199 description.Append(L"ControlAnimator(");
2200 description.Append((int)__pControlAnimator);
2201 description.Append(L") ");
2204 if (__pCustomVisualElement)
2206 description.Append(L"CustomVisualElement(");
2207 description.Append((int)__pCustomVisualElement);
2208 description.Append(L") ");
2211 if (__pBuilderPortraitBounds)
2213 description.Append(L"PortraitBounds(");
2214 description.Append(__pBuilderPortraitBounds->x);
2215 description.Append(L" ");
2216 description.Append(__pBuilderPortraitBounds->y);
2217 description.Append(L" ");
2218 description.Append(__pBuilderPortraitBounds->width);
2219 description.Append(L" ");
2220 description.Append(__pBuilderPortraitBounds->height);
2221 description.Append(L") ");
2224 if (__pBuilderLandscapeBounds)
2226 description.Append(L"LandscapeBounds(");
2227 description.Append(__pBuilderLandscapeBounds->x);
2228 description.Append(L" ");
2229 description.Append(__pBuilderLandscapeBounds->y);
2230 description.Append(L" ");
2231 description.Append(__pBuilderLandscapeBounds->width);
2232 description.Append(L" ");
2233 description.Append(__pBuilderLandscapeBounds->height);
2234 description.Append(L") ");
2237 if (__pPublicGestureDetectors->GetCount() > 0 )
2239 IEnumeratorT<TouchGestureDetector*>* pEnumerator = __pPublicGestureDetectors->GetEnumeratorN();
2242 description.Append(L"TouchGestureDetector(");
2244 while (pEnumerator->MoveNext() == E_SUCCESS)
2246 TouchGestureDetector* pTouchGestureDetector = null;
2247 pEnumerator->GetCurrent(pTouchGestureDetector);
2248 if (pTouchGestureDetector)
2250 description.Append((int)pTouchGestureDetector);
2251 description.Append(L" ");
2255 description.Append(L") ");
2261 if (__pPublicFocusEventListeners->GetCount() > 0 )
2263 IEnumeratorT<IEventListener*>* pEnumerator = __pPublicFocusEventListeners->GetEnumeratorN();
2266 description.Append(L"FocusListener(");
2268 while (pEnumerator->MoveNext() == E_SUCCESS)
2270 IEventListener* pListener = null;
2271 pEnumerator->GetCurrent(pListener);
2274 description.Append((int)pListener);
2275 description.Append(L" ");
2279 description.Append(L") ");
2285 if (__pPublicKeyEventListeners->GetCount() > 0 )
2287 IEnumeratorT<IEventListener*>* pEnumerator = __pPublicKeyEventListeners->GetEnumeratorN();
2290 description.Append(L"KeyListener(");
2292 while (pEnumerator->MoveNext() == E_SUCCESS)
2294 IEventListener* pListener = null;
2295 pEnumerator->GetCurrent(pListener);
2298 description.Append((int)pListener);
2299 description.Append(L" ");
2303 description.Append(L") ");
2309 if (__pPublicTouchEventListeners->GetCount() > 0 )
2311 IEnumeratorT<IEventListener*>* pEnumerator = __pPublicTouchEventListeners->GetEnumeratorN();
2314 description.Append(L"TouchListener(");
2316 while (pEnumerator->MoveNext() == E_SUCCESS)
2318 IEventListener* pListener = null;
2319 pEnumerator->GetCurrent(pListener);
2322 description.Append((int)pListener);
2323 description.Append(L" ");
2327 description.Append(L") ");
2333 if (__pPublicDragDropEventListeners->GetCount() > 0 )
2335 IEnumeratorT<IEventListener*>* pEnumerator = __pPublicDragDropEventListeners->GetEnumeratorN();
2338 description.Append(L"DragDropListener(");
2340 while (pEnumerator->MoveNext() == E_SUCCESS)
2342 IEventListener* pListener = null;
2343 pEnumerator->GetCurrent(pListener);
2346 description.Append((int)pListener);
2347 description.Append(L" ");
2351 description.Append(L") ");
2357 if (__pPublicTouchModeChangedEventListeners->GetCount() > 0 )
2359 IEnumeratorT<IEventListener*>* pEnumerator = __pPublicTouchModeChangedEventListeners->GetEnumeratorN();
2362 description.Append(L"TouchModeListener(");
2364 while (pEnumerator->MoveNext() == E_SUCCESS)
2366 IEventListener* pListener = null;
2367 pEnumerator->GetCurrent(pListener);
2370 description.Append((int)pListener);
2371 description.Append(L" ");
2375 description.Append(L") ");
2385 _ControlImpl::OnDraw(void)
2390 Tizen::Graphics::Canvas*
2391 _ControlImpl::OnCanvasRequestedN(const Tizen::Graphics::Dimension& size)
2393 return GetCore().OnCanvasRequestedN(size);
2396 Tizen::Graphics::Canvas*
2397 _ControlImpl::OnCanvasRequestedFN(const Tizen::Graphics::FloatRectangle& bounds)
2399 return GetCore().OnCanvasRequestedFN(bounds);
2402 Tizen::Graphics::Bitmap*
2403 _ControlImpl::OnCapturedBitmapRequestedN(void)
2406 return GetCore().OnCapturedBitmapRequestedN();
2410 _ControlImpl::OnAttaching(const _Control* pParent)
2412 return GetCore().OnAttaching(pParent);
2416 _ControlImpl::OnAttached(void)
2418 return GetCore().OnAttached();
2422 _ControlImpl::OnAttachingToMainTree(const _Control* pParent)
2424 return GetCore().OnAttachingToMainTree(pParent);
2428 _ControlImpl::OnAttachedToMainTree(void)
2430 result r = E_SUCCESS;
2431 result returnResultPublic = E_SUCCESS;
2432 result returnResultCore = E_SUCCESS;
2434 if (_AppInfo::GetApiVersion() == _API_VERSION_2_0 && _AppInfo::IsOspCompat())
2436 GetCore().SetDrawWhenVisible(false);
2437 GetCore().SetTerminatingOrder(true);
2440 returnResultPublic = GetPublic().OnInitializing();
2441 returnResultCore = GetCore().OnAttachedToMainTree();
2443 if (IsFailed(returnResultPublic) || IsFailed(returnResultCore))
2445 _ContainerImpl* pParent = GetParent();
2446 SysTryReturn(NID_UI, pParent, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
2448 r = pParent->RemoveChild(this, false);
2449 SysAssert(r == E_SUCCESS);
2451 SysTryReturn(NID_UI, returnResultPublic == E_SUCCESS, returnResultPublic, returnResultPublic, "[%s] propagated.", GetErrorMessage(returnResultPublic));
2452 SysTryReturn(NID_UI, returnResultCore == E_SUCCESS, returnResultCore, returnResultCore, "[%s] propagated.", GetErrorMessage(returnResultCore));
2455 return returnResultPublic;
2459 _ControlImpl::OnDetachingFromMainTree(void)
2461 GetPublic().OnTerminating();
2462 return GetCore().OnDetachingFromMainTree();
2466 _ControlImpl::OnAttachingFailed(const _Control& parent)
2468 GetCore().OnAttachingFailed(parent);
2472 _ControlImpl::OnDetaching(void)
2478 _ControlImpl::OnBoundsChanging(const Rectangle& bounds)
2480 __oldBounds = _CoordinateSystemUtils::ConvertToFloat(GetBounds());
2482 return GetCore().OnBoundsChanging(bounds);
2486 _ControlImpl::OnBoundsChanging(const FloatRectangle& bounds)
2488 __oldBounds = GetBoundsF();
2490 return GetCore().OnBoundsChanging(bounds);
2494 _ControlImpl::OnBoundsChanged(void)
2496 GetCore().OnBoundsChanged();
2500 _ControlImpl::OnEvaluateSize(Dimension& evaluatedSize)
2502 GetCore().OnEvaluateSize(evaluatedSize);
2506 _ControlImpl::OnEvaluateSize(FloatDimension& evaluatedSize)
2508 return GetCore().OnEvaluateSize(evaluatedSize);
2512 _ControlImpl::OnParentBoundsChanged(const _Control& parent)
2514 GetCore().OnParentBoundsChanged(parent);
2518 _ControlImpl::OnChildAttached(const _Control& child)
2520 GetCore().OnChildAttached(child);
2524 _ControlImpl::OnChildDetaching(const _Control& child)
2526 GetCore().OnChildDetaching(child);
2530 _ControlImpl::OnChildDetached(const _Control& child)
2532 GetCore().OnChildDetached(child);
2536 _ControlImpl::OnChildBoundsChanged(const _Control& child)
2538 GetCore().OnChildBoundsChanged(child);
2542 _ControlImpl::OnChildVisibleStateChanged(const _Control& child)
2544 GetCore().OnChildVisibleStateChanged(child);
2548 _ControlImpl::OnChangeLayout(_ControlOrientation orientation)
2550 result r = E_SUCCESS;
2552 if (IsAttachedToMainTree())
2554 Rectangle builderBounds;
2555 bool exist = GetBuilderBounds(orientation, builderBounds);
2558 bool movable = IsMovable();
2559 bool resizable = IsResizable();
2564 r = SetBounds(builderBounds);
2565 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] Failed to set bounds of %s.", GetPublicClassName());
2566 builderBounds.x = 0;
2567 builderBounds.y = 0;
2568 SetClientBounds(builderBounds);
2570 SetMovable(movable);
2571 SetResizable(resizable);
2576 GetCore().OnChangeLayout(orientation);
2580 _ControlImpl::OnZOrderChanging(_ControlZOrderUpdate zOrderUpdate)
2582 GetCore().OnZOrderChanging(zOrderUpdate);
2586 _ControlImpl::OnVisibleStateChanging(void)
2588 GetCore().OnVisibleStateChanging();
2592 _ControlImpl::OnVisibleStateChanged(void)
2594 _TouchManager* pTouchManager = _TouchManager::GetInstance();
2597 if ((_TouchManager::GetInstance()->IsTouchAllowed() == true) && (GetPublic().GetShowState() == false))
2599 _ControlManager* pControlManager = _ControlManager::GetInstance();
2600 SysTryReturnVoidResult(NID_UI, pControlManager, E_SYSTEM, "[E_SYSTEM] _ControlManager does not exist.");
2602 bool gestureDetecting = false;
2604 IListT<_TouchGestureDetector*>* pGestureList = GetCore().GetGestureDetectorList();
2607 IEnumeratorT<_TouchGestureDetector*>* pEnumerator = pGestureList->GetEnumeratorN();
2608 SysTryReturnVoidResult(NID_UI, pEnumerator, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
2610 while (pEnumerator->MoveNext() == E_SUCCESS)
2612 _TouchGestureDetector* pGestureDetector = null;
2613 pEnumerator->GetCurrent(pGestureDetector);
2614 if (pGestureDetector)
2616 gestureDetecting = true;
2624 if (!gestureDetecting)
2626 pTouchManager->SetTouchCanceled(&GetCore());
2631 GetCore().OnVisibleStateChanged();
2635 _ControlImpl::OnAncestorVisibleStateChanged(const _Control& control)
2637 GetCore().OnAncestorVisibleStateChanged(control);
2641 _ControlImpl::OnAncestorEnableStateChanged(const _Control& control)
2643 GetCore().OnAncestorEnableStateChanged(control);
2647 _ControlImpl::OnAncestorInputEnableStateChanged(const _Control& control)
2649 GetCore().OnAncestorInputEnableStateChanged(control);
2653 _ControlImpl::OnTouchPressHandled(const _Control& control)
2655 GetCore().OnTouchPressHandled(control);
2659 _ControlImpl::OnTouchReleaseHandled(const _Control& control)
2661 GetCore().OnTouchReleaseHandled(control);
2665 _ControlImpl::OnTouchMoveHandled(const _Control& control)
2667 GetCore().OnTouchMoveHandled(control);
2671 _ControlImpl::OnFontChanged(Font* pFont)
2673 GetCore().OnFontChanged(pFont);
2677 _ControlImpl::OnFontInfoRequested(unsigned long& style, int& size)
2679 GetCore().OnFontInfoRequested(style, size);
2683 _ControlImpl::OnFontInfoRequested(unsigned long& style, float& size)
2685 GetCore().OnFontInfoRequested(style, size);
2689 _ControlImpl::OnBackgroundColorChanged(Color& backgroundColor)
2691 GetCore().OnBackgroundColorChanged(backgroundColor);
2695 _ControlImpl::OnTouchCancelHandled(const _Control& control)
2697 GetCore().OnTouchCancelHandled(control);
2701 _ControlImpl::OnKeyPressed(const _ControlImpl& source, const _KeyInfo& keyInfo)
2707 _ControlImpl::OnKeyReleased(const _ControlImpl& source, const _KeyInfo& keyInfo)
2712 bool _ControlImpl::OnPreviewKeyPressed(const _ControlImpl& source, const _KeyInfo& keyInfo)
2717 bool _ControlImpl::OnPreviewKeyReleased(const _ControlImpl& source, const _KeyInfo& keyInfo)
2723 _ControlImpl::CallOnTouchPressed(const _Control& source, const _TouchInfo& touchinfo)
2725 bool isFiltered = false;
2727 if (source.IsDelayedTouchEventEnabled())
2729 if (&source == &GetCore())
2731 const_cast<_Control&>(source).AddTouchInfo(touchinfo);
2737 GetCore().SetEventEnableState(true);
2739 LinkedListT <Tizen::Base::Runtime::IEventListener*>* pList = GetTouchEventListener();
2740 if (pList && (pList->GetCount() > 0) && (&source == &GetCore()))
2742 bool returnValue = __pCoreTouchEvent->ProcessDoublePress(touchinfo, isFiltered);
2749 if (&source == &GetCore())
2751 isFiltered = __pCoreTouchEvent->ProcessListener(touchinfo);
2757 __pCoreTouchEvent->ProcessDragListener(touchinfo);
2760 _TouchManager* __pTouchManager = _TouchManager::GetInstance();
2761 SysTryReturn(NID_UI, __pTouchManager, false, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] __pTouchManager == null.");
2763 if (!GetCore().IsEventEnabled())
2765 __pTouchManager->ResetTouchInfo();
2770 if (!__pTouchManager->IsTouchAllowed())
2776 isFiltered = OnTouchPressed(*this, touchinfo);
2783 isFiltered = GetCore().OnTouchPressed(source, touchinfo);
2790 _ControlImpl::CallOnTouchReleased(const _Control& source, const _TouchInfo& touchinfo)
2792 bool isFiltered = false;
2794 if (source.IsDelayedTouchEventEnabled())
2796 if (&source == &GetCore())
2798 const_cast<_Control&>(source).AddTouchInfo(touchinfo);
2804 if (&source == &GetCore())
2806 isFiltered = __pCoreTouchEvent->ProcessListener(touchinfo);
2813 __pCoreTouchEvent->ProcessDropListener(touchinfo);
2815 _TouchManager* __pTouchManager = _TouchManager::GetInstance();
2816 SysTryReturn(NID_UI, __pTouchManager, false, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] __pTouchManager == null.");
2818 if (!__pTouchManager->IsTouchAllowed())
2824 isFiltered = OnTouchReleased(*this, touchinfo);
2830 //send drop event to topmost touched control
2831 __pCoreTouchEvent->ProcessDropListenerToTopControl(touchinfo);
2834 isFiltered = GetCore().OnTouchReleased(source, touchinfo);
2840 _ControlImpl::CallOnTouchMoved(const _Control& source, const _TouchInfo& touchinfo)
2842 bool isFiltered = false;
2844 if (source.IsDelayedTouchEventEnabled())
2846 if (&source == &GetCore())
2848 const_cast<_Control&>(source).AddTouchInfo(touchinfo);
2854 if (&source == &GetCore())
2856 isFiltered = __pCoreTouchEvent->ProcessListener(touchinfo);
2862 __pCoreTouchEvent->ProcessDragListener(touchinfo);
2865 _TouchManager* __pTouchManager = _TouchManager::GetInstance();
2866 SysTryReturn(NID_UI, __pTouchManager, false, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] __pTouchManager == null.");
2868 if (!__pTouchManager->IsTouchAllowed())
2874 isFiltered = OnTouchMoved(*this, touchinfo);
2881 isFiltered = GetCore().OnTouchMoved(source, touchinfo);
2887 _ControlImpl::CallOnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo)
2889 bool isFiltered = false;
2891 __pCoreTouchEvent->ProcessDropListener(touchinfo);
2892 __pCoreTouchEvent->ProcessDropListenerToTopControl(touchinfo);
2894 if (&source == &GetCore())
2896 isFiltered = __pCoreTouchEvent->ProcessListener(touchinfo);
2904 isFiltered = OnTouchCanceled(*this, touchinfo);
2911 isFiltered = GetCore().OnTouchCanceled(source, touchinfo);
2917 _ControlImpl::OnTouchEventListenerAdded(void)
2919 // First time, enable gesture.
2920 if (__pPublicTouchEventListeners->GetCount() == 1)
2922 result r = E_SUCCESS;
2924 r = __pControlCore->AddGestureDetector(*__pLongPressGestureDetector);
2925 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
2927 r = __pLongPressGestureDetector->AddGestureListener(*__pCoreEventListener);
2928 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
2930 r = __pControlCore->AddGestureDetector(*__pFlickGestureDetector);
2931 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
2933 r = __pFlickGestureDetector->AddGestureListener(*__pCoreEventListener);
2934 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
2940 _ControlImpl::OnTouchEventListenerRemoved(void)
2947 _ControlImpl::OnTouchPressed(const _ControlImpl& source, const _TouchInfo& touchinfo)
2953 _ControlImpl::OnTouchCanceled(const _ControlImpl& source, const _TouchInfo& touchinfo)
2959 _ControlImpl::OnTouchReleased(const _ControlImpl& source, const _TouchInfo& touchinfo)
2965 _ControlImpl::OnTouchMoved(const _ControlImpl& source, const _TouchInfo& touchinfo)
2970 _UiTouchEventDelivery
2971 _ControlImpl::OnPreviewTouchPressed(const _ControlImpl& source, const _TouchInfo& touchInfo)
2973 return _UI_TOUCH_EVENT_DELIVERY_YES;
2976 _UiTouchEventDelivery
2977 _ControlImpl::OnPreviewTouchReleased(const _ControlImpl& source, const _TouchInfo& touchInfo)
2979 return _UI_TOUCH_EVENT_DELIVERY_YES;
2982 _UiTouchEventDelivery
2983 _ControlImpl::OnPreviewTouchMoved(const _ControlImpl& source, const _TouchInfo& touchInfo)
2985 return _UI_TOUCH_EVENT_DELIVERY_YES;
2988 _UiTouchEventDelivery
2989 _ControlImpl::OnPreviewTouchCanceled(const _ControlImpl& source, const _TouchInfo& touchInfo)
2991 return _UI_TOUCH_EVENT_DELIVERY_YES;
2995 _ControlImpl::OnFocusGained(const _ControlImpl& source)
3001 _ControlImpl::OnFocusLost(const _ControlImpl& source)
3007 _ControlImpl::OnNotifiedN(const _ControlImpl& source, Tizen::Base::Collection::IList* pArgs)
3013 _ControlImpl::OnUserEventReceivedN(RequestId requestId, Tizen::Base::Collection::IList* pArgs)
3015 GetPublic().OnUserEventReceivedN(requestId, pArgs);
3019 _ControlImpl::SendNotification(const _ControlImpl& source, Tizen::Base::Collection::IList* pArgs)
3021 _ControlImpl& impl = const_cast <_ControlImpl&>(source);
3023 Tizen::Base::String* pString = dynamic_cast <Tizen::Base::String*>(pArgs->GetAt(0));
3026 if (*pString == _USER_EVENT)
3028 _UserEventInfo* pUserEventInfo = dynamic_cast <_UserEventInfo*>(pArgs->GetAt(1));
3031 impl.OnUserEventReceivedN(pUserEventInfo->GetRequestId(), pUserEventInfo->GetArgs());
3033 pArgs->RemoveAll(true);
3038 else if (*pString == _REQUEST_REDRAW_EVENT)
3042 Boolean* pBoolean = dynamic_cast <Boolean*>(pArgs->GetAt(1));
3043 if (pBoolean && pBoolean->ToBool())
3047 pArgs->RemoveAll(true);
3058 _ControlImpl::Draw(bool recursive)
3060 SysTryReturn(NID_UI,
3061 IsAttachedToMainTree(), E_INVALID_OPERATION,
3062 E_INVALID_OPERATION, "[E_INVALID_OPERATION] The control should be attached to the main tree.");
3064 GetCore().Draw(recursive);
3070 _ControlImpl::Show(void)
3072 SysTryReturn(NID_UI,
3073 GetParent() || IsAttachedToMainTree(), E_INVALID_OPERATION,
3074 E_INVALID_OPERATION, "[E_INVALID_OPERATION] This control should have a parent or be attached to the main tree.");
3082 _ControlImpl::Invalidate(bool recursive)
3084 SysTryReturnVoidResult(NID_UI,
3085 IsAttachedToMainTree(),
3086 E_INVALID_OPERATION, "[E_INVALID_OPERATION] The control should be attached to the main tree.");
3088 GetCore().Invalidate(recursive);
3092 _ControlImpl::Invalidate(const Rectangle& rect)
3094 SysTryReturnVoidResult(NID_UI,
3095 IsAttachedToMainTree(),
3096 E_INVALID_OPERATION, "[E_INVALID_OPERATION] The control should be attached to the main tree.");
3098 GetCore().Invalidate(rect);
3102 _ControlImpl::Invalidate(const FloatRectangle& rect)
3104 SysTryReturnVoidResult(NID_UI,
3105 IsAttachedToMainTree(),
3106 E_INVALID_OPERATION, "[E_INVALID_OPERATION] The control should be attached to the main tree.");
3108 GetCore().Invalidate(rect);
3112 _ControlImpl::RequestRedraw(bool show) const
3116 ArrayList* pEventArgs = new (std::nothrow) ArrayList;
3117 SysTryReturnVoidResult(NID_UI, pEventArgs, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
3119 pEventArgs->Construct();
3121 Tizen::Base::String* pString = new (std::nothrow) Tizen::Base::String(_REQUEST_REDRAW_EVENT);
3122 SysTryReturnVoidResult(NID_UI, pString, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
3125 pEventArgs->Add(*pString);
3127 Boolean* pBoolean = new (std::nothrow) Boolean(show);
3128 SysTryReturnVoidResult(NID_UI, pBoolean, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
3130 // Index 1 : User Data
3131 pEventArgs->Add(*pBoolean);
3133 _UiEventManager* pEventManager = _UiEventManager::GetInstance();
3134 SysTryReturnVoidResult(NID_UI, pEventManager, E_SYSTEM, "[E_SYSTEM] System error occurred.");
3136 _UiNotificationEvent event(GetCore().GetHandle(), pEventArgs);
3138 result r = pEventManager->PostEvent(event);
3139 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] System error occurred.");
3143 _ControlImpl::SendUserEvent(RequestId requestId, const IList* pArgs) const
3147 ArrayList* pEventArgs = new (std::nothrow) ArrayList;
3148 SysTryReturnVoidResult(NID_UI, pEventArgs, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
3150 pEventArgs->Construct();
3152 Tizen::Base::String* pString = new (std::nothrow) Tizen::Base::String(_USER_EVENT);
3153 SysTryReturnVoidResult(NID_UI, pString, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
3156 pEventArgs->Add(*pString);
3158 _UserEventInfo* pUserEventInfo = new (std::nothrow) _UserEventInfo(requestId, pArgs);
3159 SysTryReturnVoidResult(NID_UI, pUserEventInfo, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
3161 // Index 1 : User Data
3162 pEventArgs->Add(*pUserEventInfo);
3164 _UiEventManager* pEventManager = _UiEventManager::GetInstance();
3165 SysTryReturnVoidResult(NID_UI, pEventManager, E_SYSTEM, "[E_SYSTEM] System error occurred.");
3167 _UiNotificationEvent event(GetCore().GetHandle(), pEventArgs);
3169 result r = pEventManager->PostEvent(event);
3170 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] System error occurred.");
3174 _ControlImpl::Contains(const Point& point) const
3176 return GetCore().Contains(point);
3180 _ControlImpl::Contains(const FloatPoint& point) const
3182 return GetCore().Contains(point);
3186 _ControlImpl::ConsumeInputEvent(void)
3189 __inputEventConsumed = true;
3193 _ControlImpl::IsInputEventConsumed(void) const
3196 return __inputEventConsumed;
3200 _ControlImpl::ResetInputEventConsumed(void)
3203 __inputEventConsumed = false;
3207 _ControlImpl::GetName(void) const
3209 return GetCore().GetName();
3213 _ControlImpl::SetName(const Tizen::Base::String& name)
3215 GetCore().SetName(name);
3219 _ControlImpl::GetParent(void) const
3223 _Control* pParent = GetCore().GetParent();
3224 if (pParent == null)
3229 void* pData = pParent->GetUserData();
3232 return null; // This is for the _ControlManager::__pRoot.
3235 _ContainerImpl* pParentImpl = static_cast <_ContainerImpl*>(pData);
3240 _ControlImpl::GetCanvasN(void) const
3242 SysTryReturn(NID_UI,
3243 GetParent() || IsAttachedToMainTree(), null,
3244 E_INVALID_OPERATION, "[E_INVALID_OPERATION] This control should have a parent or be attached to the main tree.");
3246 Canvas* pCanvas = GetCore().GetCanvasN();
3247 result r = GetLastResult();
3250 if (r == E_OPERATION_FAILED)
3252 SetLastResult(E_INVALID_OPERATION);
3254 SysLog(NID_UI_CTRL, "[%s] Propagated", GetErrorMessage(GetLastResult()));
3260 pCanvas->SetBackgroundColor(GetBackgroundColor());
3261 pCanvas->SetForegroundColor(GetForegroundColor());
3269 _ControlImpl::GetCanvasN(const Rectangle& bounds) const
3271 SysTryReturn(NID_UI,
3272 GetParent() || IsAttachedToMainTree(), null,
3273 E_INVALID_OPERATION, "[E_INVALID_OPERATION] This control should have a parent or be attached to the main tree.");
3275 Canvas* pCanvas = GetCore().GetCanvasN(bounds);
3276 result r = GetLastResult();
3279 if (r == E_OPERATION_FAILED)
3281 SetLastResult(E_INVALID_OPERATION);
3283 SysLog(NID_UI_CTRL, "[%s] Propagated", GetErrorMessage(GetLastResult()));
3289 pCanvas->SetBackgroundColor(GetBackgroundColor());
3290 pCanvas->SetForegroundColor(GetForegroundColor());
3298 _ControlImpl::GetCanvasN(const FloatRectangle& bounds) const
3300 SysTryReturn(NID_UI,
3301 GetParent() || IsAttachedToMainTree(), null,
3302 E_INVALID_OPERATION, "[E_INVALID_OPERATION] This control should have a parent or be attached to the main tree.");
3304 Canvas* pCanvas = GetCore().GetCanvasN(bounds);
3305 result r = GetLastResult();
3308 if (r == E_OPERATION_FAILED)
3310 SetLastResult(E_INVALID_OPERATION);
3312 SysLog(NID_UI_CTRL, "[%s] Propagated", GetErrorMessage(GetLastResult()));
3318 pCanvas->SetBackgroundColor(GetBackgroundColor());
3319 pCanvas->SetForegroundColor(GetForegroundColor());
3327 _ControlImpl::GetClientCanvasN(void) const
3329 SysTryReturn(NID_UI,
3330 GetParent() || IsAttachedToMainTree(), null,
3331 E_INVALID_OPERATION, "[E_INVALID_OPERATION] This control should have a parent or be attached to the main tree.");
3333 Canvas* pCanvas = GetCore().GetClientCanvasN();
3334 result r = GetLastResult();
3337 if (r == E_OPERATION_FAILED)
3339 SetLastResult(E_INVALID_OPERATION);
3341 SysLog(NID_UI_CTRL, "[%s] Propagated", GetErrorMessage(GetLastResult()));
3347 pCanvas->SetBackgroundColor(GetBackgroundColor());
3348 pCanvas->SetForegroundColor(GetForegroundColor());
3356 _ControlImpl::IsAttachedToMainTree(void) const
3358 return GetCore().IsAttachedToMainTree();
3362 _ControlImpl::IsInTouchMode(void) const
3370 _ControlImpl::IsFocusable(void) const
3372 return GetCore().IsFocusable();
3376 _ControlImpl::SetFocusable(bool focusable)
3378 // [ToDo] Focusable is simple flag. Make this method do not check belows.
3379 SysTryReturn(NID_UI,
3380 __focusableChangable, E_INVALID_OPERATION,
3381 E_INVALID_OPERATION, "[E_INVALID_OPERATION] The control can't chage it's focusable property.");
3383 SysTryReturn(NID_UI,
3384 IsAttachedToMainTree(), E_SYSTEM,
3385 E_SYSTEM, "[E_SYSTEM] This control should be attached to the main tree.");
3387 SysTryReturn(NID_UI,
3388 focusable || GetCore().GetFocused() != &this->GetCore(), E_INVALID_OPERATION,
3389 E_INVALID_OPERATION, "[E_INVALID_OPERATION] This already focused control cannot be unfocusable.");
3391 GetCore().SetFocusable(focusable);
3396 _ControlImpl::IsFocused(void) const
3398 return GetCore().IsFocused();
3402 _ControlImpl::SetFocused(void)
3404 return GetCore().SetFocused();
3408 _ControlImpl::SetFocusableChangable(bool focusableChangable)
3410 __focusableChangable = focusableChangable;
3414 _ControlImpl::SetFont(const String& fontName)
3416 result r = GetCore().SetFont(fontName);
3417 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
3422 _ControlImpl::GetFont(void) const
3424 return GetCore().GetFont();
3429 _ControlImpl::IsEnabled(void) const
3431 return GetCore().IsEnabled();
3435 _ControlImpl::GetEnableState(void) const
3437 return GetCore().GetEnableState();
3441 _ControlImpl::SetEnableState(bool enableState)
3443 GetCore().SetEnableState(enableState);
3447 _ControlImpl::IsInputEventEnabled(void) const
3449 return GetCore().IsInputEventEnabled();
3453 _ControlImpl::GetInputEnableState(void) const
3455 return GetCore().GetInputEnableState();
3459 _ControlImpl::IsVisible(void) const
3461 // [ToDo] Change the default visible state to false and test.
3462 return GetCore().IsVisible();
3466 _ControlImpl::GetVisibleState(void) const
3468 return GetCore().GetVisibleState();
3472 _ControlImpl::SetVisibleState(bool visibleState)
3475 SysTryReturn(NID_UI,
3476 GetParent() || IsAttachedToMainTree(), E_INVALID_OPERATION,
3477 E_INVALID_OPERATION, "[E_INVALID_OPERATION] This control should have a parent or be attached to the main tree.");
3479 GetCore().SetVisibleState(visibleState);
3485 _ControlImpl::IsLayoutable(void) const
3487 return GetCore().IsLayoutable();
3491 _ControlImpl::IsClipToParent(void) const
3493 return GetCore().IsClipToParent();
3497 _ControlImpl::SetClipToParent(bool clipToParent)
3499 result r = GetCore().SetClipToParent(clipToParent);
3500 SysTryReturn(NID_UI, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
3506 _ControlImpl::IsDragEnabled(void) const
3508 return GetCore().IsDragEnabled();
3512 _ControlImpl::IsDropEnabled(void) const
3514 return GetCore().IsDropEnabled();
3518 _ControlImpl::SetDragEnabled(bool enabled)
3521 GetCore().SetDragEnabled(enabled);
3525 _ControlImpl::SetDropEnabled(bool enabled)
3528 GetCore().SetDropEnabled(enabled);
3532 _ControlImpl::GetBounds(void) const
3534 return GetCore().GetBounds();
3538 _ControlImpl::GetBoundsF(void) const
3540 return GetCore().GetBoundsF();
3544 _ControlImpl::GetPosition(void) const
3546 return GetCore().GetPosition();
3550 _ControlImpl::GetPositionF(void) const
3552 return GetCore().GetPositionF();
3556 _ControlImpl::GetSize(void) const
3558 return GetCore().GetSize();
3562 _ControlImpl::GetSizeF(void) const
3564 return GetCore().GetSizeF();
3568 _ControlImpl::UpdateBuilderBounds(const Tizen::Graphics::FloatRectangle& bounds)
3570 FloatRectangle builderBounds;
3571 _ControlOrientation controlOrientation = _CONTROL_ORIENTATION_PORTRAIT;
3572 bool exist = GetBuilderBoundsF(controlOrientation, builderBounds);
3575 if (IsAttachedToMainTree())
3577 _Window* pWindow = GetCore().GetRootWindow();
3578 if (pWindow->IsOrientationRoot())
3581 _ControlImplManager* pControlImplManager = _ControlImplManager::GetInstance();
3582 OrientationStatus orientationStatus = pControlImplManager->GetFormOrientationStatus(this);
3584 if ((orientationStatus == ORIENTATION_STATUS_LANDSCAPE) || (orientationStatus == ORIENTATION_STATUS_LANDSCAPE_REVERSE))
3586 controlOrientation = _CONTROL_ORIENTATION_LANDSCAPE;
3590 controlOrientation = _CONTROL_ORIENTATION_PORTRAIT;
3596 controlOrientation = GetCore().GetOrientation();
3599 if (controlOrientation == _CONTROL_ORIENTATION_LANDSCAPE)
3601 SetBuilderBounds(_CONTROL_ORIENTATION_LANDSCAPE, bounds);
3605 SetBuilderBounds(_CONTROL_ORIENTATION_PORTRAIT, bounds);
3610 SetBuilderBounds(_CONTROL_ORIENTATION_PORTRAIT, bounds);
3611 SetBuilderBounds(_CONTROL_ORIENTATION_LANDSCAPE, bounds);
3617 _ControlImpl::UpdateBuilderSize(const Tizen::Graphics::FloatDimension& dimension)
3619 FloatRectangle builderBounds;
3620 _ControlOrientation controlOrientation = GetCore().GetOrientation();
3622 bool exist = GetBuilderBoundsF(controlOrientation, builderBounds);
3625 builderBounds.width = dimension.width;
3626 builderBounds.height = dimension.height;
3627 UpdateBuilderBounds(builderBounds);
3632 _ControlImpl::SetBounds(const Rectangle& bounds, bool callBoundsChangeCallbacks)
3634 UpdateBuilderBounds(_CoordinateSystemUtils::ConvertToFloat(bounds));
3635 return GetCore().SetBounds(bounds, callBoundsChangeCallbacks);
3639 _ControlImpl::SetBounds(const FloatRectangle& bounds, bool callBoundsChangeCallbacks)
3641 UpdateBuilderBounds(bounds);
3642 return GetCore().SetBounds(bounds, callBoundsChangeCallbacks);
3646 _ControlImpl::SetBoundsAndUpdateLayout(const Tizen::Graphics::Rectangle& bounds)
3648 result r = E_SUCCESS;
3649 r = GetCore().SetBounds(bounds);
3651 GetCore().UpdateLayout();
3657 _ControlImpl::SetBoundsAndUpdateLayoutF(const Tizen::Graphics::FloatRectangle& bounds)
3659 result r = E_SUCCESS;
3660 r = GetCore().SetBounds(bounds);
3662 GetCore().UpdateLayout();
3668 _ControlImpl::SetPosition(const Point& position)
3670 return GetCore().SetPosition(position);
3674 _ControlImpl::SetPosition(const FloatPoint& position)
3676 return GetCore().SetPosition(position);
3680 _ControlImpl::SetSize(const Dimension& size)
3682 UpdateBuilderSize(_CoordinateSystemUtils::ConvertToFloat(size));
3683 return GetCore().SetSize(size);
3687 _ControlImpl::SetSize(const FloatDimension& size)
3689 UpdateBuilderSize(size);
3690 return GetCore().SetSize(size);
3694 _ControlImpl::GetMinimumSize(void) const
3696 return GetCore().GetMinimumSize();
3700 _ControlImpl::GetMinimumSizeF(void) const
3702 return GetCore().GetMinimumSizeF();
3706 _ControlImpl::GetMaximumSize(void) const
3708 return GetCore().GetMaximumSize();
3712 _ControlImpl::GetMaximumSizeF(void) const
3714 return GetCore().GetMaximumSizeF();
3718 _ControlImpl::SetMinimumSize(const Tizen::Graphics::Dimension& newMinSize)
3720 return GetCore().SetMinimumSize(newMinSize);
3724 _ControlImpl::SetMinimumSize(const Tizen::Graphics::FloatDimension& newMinSize)
3726 return GetCore().SetMinimumSize(newMinSize);
3730 _ControlImpl::SetMaximumSize(const Tizen::Graphics::Dimension& newMaxSize)
3732 return GetCore().SetMaximumSize(newMaxSize);
3736 _ControlImpl::SetMaximumSize(const Tizen::Graphics::FloatDimension& newMaxSize)
3738 return GetCore().SetMaximumSize(newMaxSize);
3742 _ControlImpl::ConvertToControlPosition(const Point& screenPosition) const
3744 return GetCore().ConvertToControlPosition(screenPosition);
3748 _ControlImpl::ConvertToControlPosition(const FloatPoint& screenPosition) const
3750 return GetCore().ConvertToControlPosition(screenPosition);
3754 _ControlImpl::ConvertToScreenPosition(const Point& controlPosition) const
3756 return GetCore().ConvertToScreenPosition(controlPosition);
3760 _ControlImpl::ConvertToScreenPosition(const FloatPoint& controlPosition) const
3762 return GetCore().ConvertToScreenPosition(controlPosition);
3765 // [ToDo] Must provide a static method.
3767 _ControlImpl::GetMinimumSizeLimit(void) const
3770 return Dimension(0, 0);
3774 _ControlImpl::GetMinimumSizeLimitF(void) const
3777 return FloatDimension(0.0f, 0.0f);
3780 // [ToDo] Must provide a static method.
3782 _ControlImpl::GetMaximumSizeLimit(void) const
3785 return Dimension(_Control::MAX_LENGTH, _Control::MAX_LENGTH);
3789 _ControlImpl::GetMaximumSizeLimitF(void) const
3792 return FloatDimension(_Control::MAX_LENGTH, _Control::MAX_LENGTH);
3797 _ControlImpl::GetClientBounds(void) const
3799 return GetCore().GetClientBounds();
3803 _ControlImpl::GetClientBoundsF(void) const
3805 return GetCore().GetClientBoundsF();
3809 _ControlImpl::GetAbsoluteBounds(void) const
3811 return GetCore().GetAbsoluteBounds();
3815 _ControlImpl::GetAbsoluteBoundsF(void) const
3817 return GetCore().GetAbsoluteBoundsF();
3821 _ControlImpl::SetClientBounds(const Rectangle& bounds)
3823 return GetCore().SetClientBounds(bounds);
3827 _ControlImpl::SetClientBounds(const FloatRectangle& bounds)
3829 return GetCore().SetClientBounds(bounds);
3833 _ControlImpl::GetBackgroundColor(void) const
3835 return GetCore().GetBackgroundColor();
3839 _ControlImpl::IsOpaque(void) const
3845 _ControlImpl::SetBackgroundColor(const Color& color)
3849 GetCore().SetBackgroundColor(color);
3854 color.GetColorComponents(r, g, b, a);
3855 GetCore().SetBackgroundColor(Color(r*a/ 255, g*a/255, b*a/ 255, 255));
3860 _ControlImpl::GetForegroundColor(void) const
3863 return __foregroundColor;
3867 _ControlImpl::SetForegroundColor(const Color& color)
3870 __foregroundColor = color;
3874 _ControlImpl::GetFontSize(void) const
3881 _ControlImpl::SetFontSize(int fontSize)
3884 __fontSize = fontSize;
3887 ITouchEventListener*
3888 _ControlImpl::GetDefaultTouchEventListener(void) const
3891 return __pDefaultTouchEventListener;
3895 _ControlImpl::GetDefaultKeyEventListener(void) const
3898 return __pDefaultKeyEventListener;
3902 _ControlImpl::SetDefaultKeyEventListener(IKeyEventListener* pDefaultListener)
3905 __pDefaultKeyEventListener = pDefaultListener;
3909 _ControlImpl::SetDefaultTouchEventListener(ITouchEventListener* pDefaultListener)
3912 __pDefaultTouchEventListener = pDefaultListener;
3916 _ControlImpl::GetCompositeMode(void) const
3919 return COMPOSITE_MODE_ALPHA_BLENDING;
3923 _ControlImpl::SetCompositeMode(CompositeMode compositeMode)
3927 if (compositeMode == COMPOSITE_MODE_ALPHA_BLENDING)
3932 SysLogException(NID_UI, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION] This operation is not supported.");
3933 return E_UNSUPPORTED_OPERATION;
3937 _ControlImpl::SetChromaKeyColor(Color chromaKeyColor)
3939 SysLogException(NID_UI, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION] This operation is not supported.");
3940 return E_UNSUPPORTED_OPERATION;
3944 _ControlImpl::GetChromaKeyColor(void) const
3946 static const Color errorColor(0, 0, 0, 0);
3947 SysLogException(NID_UI, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION] This operation is not supported.");
3951 Animations::ControlAnimator*
3952 _ControlImpl::GetControlAnimator(void) const
3956 if ((IsMovable() == false) && (IsResizable() == false))
3958 SysLog(NID_UI, "Control is not animatable.\n");
3962 if (__pControlAnimator == null)
3964 ControlAnimator* pControlAnimator = new (std::nothrow) ControlAnimator();
3965 SysTryReturn(NID_UI, (pControlAnimator != null), null, E_OUT_OF_MEMORY, "Unable to create ControlAnimator instance.\n");
3967 // [ToDo] Check if the Open API can return E_SYSTEM.
3968 result r = pControlAnimator->Construct(*__pControlPublic);
3971 delete pControlAnimator;
3972 SysLogException(NID_UI, E_SYSTEM, "[E_SYSTEM] Failed to create control animator.");
3976 (const_cast <_ControlImpl*>(this))->__pControlAnimator = pControlAnimator;
3979 return __pControlAnimator;
3983 _ControlImpl::GetVisualElement(void) const
3985 return GetCore().GetVisualElement();
3989 _ControlImpl::SetMultiTouchEnabled(bool enabled)
3991 GetCore().SetMultiTouchEnabled(enabled);
3995 _ControlImpl::IsMultiTouchEnabled(void) const
3997 return GetCore().IsMultiTouchEnabled();
4000 _ControlImpl::PublicEventListenerList*
4001 _ControlImpl::CreatePublicEventListenerListN(void) const
4003 PublicEventListenerList* pListenerList = new (std::nothrow) PublicEventListenerList;
4004 SysTryReturn(NID_UI, pListenerList, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4006 return pListenerList;
4010 _ControlImpl::HasCore(void) const
4012 return __pControlCore != null;
4016 _ControlImpl::SetCore(_Control& core)
4018 result r = E_SUCCESS;
4020 __pControlCore = &core;
4021 __pControlCore->SetControlDelegate(*this);
4022 __pControlCore->SetUserData(this);
4024 __pCoreEventListener = new (std::nothrow) CoreEventListener(*this);
4025 SysTryCatch(NID_UI, __pCoreEventListener, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4027 __pControlCore->SetEventListener<_UI_EVENT_FOCUS>(__pCoreEventListener);
4028 __pControlCore->SetEventListener<_UI_EVENT_NOTIFICAITON>(__pCoreEventListener);
4030 __pPropagatedTouchEventListener = new (std::nothrow) _PropagatedTouchEventListener(*this);
4031 SysTryCatch(NID_UI, __pPropagatedTouchEventListener, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4033 __pControlCore->SetPropagatedTouchEventListener(__pPropagatedTouchEventListener);
4035 __pPropagatedKeyEventListener = new (std::nothrow) _PropagatedKeyEventListener(*this);
4036 SysTryCatch(NID_UI, __pPropagatedKeyEventListener, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4038 __pControlCore->SetPropagatedKeyEventListener(__pPropagatedKeyEventListener);
4044 SysLogException(NID_UI, r, "[%s] Propagating.", GetErrorMessage(r));
4049 _ControlImpl::ResetCore(bool deallocate)
4051 if (__pControlCore == null)
4056 __pControlCore->ResetEventListeners();
4057 __pControlCore->SetUserData(null);
4058 __pControlCore->ResetControlDelegate();
4060 __pFlickGestureDetector->RemoveGestureListener(*__pCoreEventListener);
4061 __pControlCore->RemoveGestureDetector(*__pFlickGestureDetector);
4063 __pLongPressGestureDetector->RemoveGestureListener(*__pCoreEventListener);
4064 __pControlCore->RemoveGestureDetector(*__pLongPressGestureDetector);
4066 __pControlCore->SetPropagatedTouchEventListener(null);
4067 __pControlCore->SetPropagatedKeyEventListener(null);
4071 delete __pControlCore;
4073 __pControlCore = null;
4075 delete __pCoreEventListener;
4076 __pCoreEventListener = null;
4078 delete __pPropagatedTouchEventListener;
4079 __pPropagatedTouchEventListener = null;
4081 delete __pPropagatedKeyEventListener;
4082 __pPropagatedKeyEventListener = null;
4086 _ControlImpl::Dispose(bool deallocateCore)
4088 if(GetVisualElement() && __pCustomVisualElement)
4090 GetVisualElement()->DetachChild( *__pCustomVisualElement);
4092 __pCustomVisualElement = null;
4094 ResetCore(deallocateCore);
4096 // Release core events
4097 delete __pCoreKeyEvent;
4098 __pCoreKeyEvent = null;
4099 delete __pCoreTouchEvent;
4100 __pCoreTouchEvent = null;
4101 delete __pCoreFocusEvent;
4102 __pCoreFocusEvent = null;
4103 delete __pCoreGestureEvent;
4104 __pCoreGestureEvent = null;
4106 // Relese public event listeners
4107 delete __pPublicFocusEventListeners;
4108 __pPublicFocusEventListeners = null;
4109 delete __pPublicKeyEventListeners;
4110 __pPublicKeyEventListeners = null;
4111 delete __pPublicTouchEventListeners;
4112 __pPublicTouchEventListeners = null;
4113 delete __pPublicDragDropEventListeners;
4114 __pPublicDragDropEventListeners = null;
4115 delete __pPublicTouchModeChangedEventListeners;
4116 __pPublicTouchModeChangedEventListeners = null;
4118 // Release builder bounds
4119 delete __pBuilderPortraitBounds;
4120 __pBuilderPortraitBounds = null;
4121 delete __pBuilderLandscapeBounds;
4122 __pBuilderLandscapeBounds = null;
4125 delete __pControlAnimator;
4126 __pControlAnimator = null;
4128 delete __pPublicGestureDetectors;
4129 __pPublicGestureDetectors = null;
4131 delete __pFlickGestureDetector;
4132 __pFlickGestureDetector = null;
4134 delete __pLongPressGestureDetector;
4135 __pLongPressGestureDetector = null;
4137 delete __pAccessibilityContainerImpl;
4138 __pAccessibilityContainerImpl = null;
4140 __pPublicPropagatedTouchEventListener = null;
4141 __pPublicPropagatedKeyEventListener = null;
4144 _ControlImpl::~_ControlImpl(void)
4149 _ControlImpl::_ControlImpl(Control* pPublic, _Control* pCore)
4150 : __pControlPublic(pPublic)
4151 , __pControlCore(null)
4152 , __pControlAnimator(null)
4153 , __pCustomVisualElement(null)
4154 , __pPublicFocusEventListeners(null)
4155 , __pPublicKeyEventListeners(null)
4156 , __pPublicTouchEventListeners(null)
4157 , __pPublicDragDropEventListeners(null)
4158 , __pPublicTouchModeChangedEventListeners(null)
4159 , __pDefaultKeyEventListener(null)
4160 , __pDefaultTouchEventListener(null)
4161 , __foregroundColor(Color(0, 0, 0, 0))
4163 , __inputEventConsumed(false)
4164 , __focusableChangable(true)
4165 , __pCoreEventListener(null)
4166 , __pCoreKeyEvent(null)
4167 , __pCoreTouchEvent(null)
4168 , __pCoreFocusEvent(null)
4169 , __pCoreGestureEvent(null)
4170 , __pBuilderPortraitBounds(null)
4171 , __pBuilderLandscapeBounds(null)
4172 , __pFlickGestureDetector(null)
4173 , __pLongPressGestureDetector(null)
4174 , __pPublicGestureDetectors(null)
4175 , __pAccessibilityContainerImpl(null)
4176 , __pPublicPropagatedTouchEventListener(null)
4177 , __pPublicPropagatedKeyEventListener(null)
4180 result r = E_SUCCESS;
4182 SysAssert(__pControlPublic);
4186 r = SetCore(*pCore);
4187 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
4189 // Core event listeners: [ToDo: mklove.kang] Check exceptions because the constructors can fail.
4190 __pCoreKeyEvent = new (std::nothrow) CoreKeyEvent(*this);
4191 SysTryCatch(NID_UI, __pCoreKeyEvent, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4193 __pCoreTouchEvent = new (std::nothrow) CoreTouchEvent(*this);
4194 SysTryCatch(NID_UI, __pCoreTouchEvent, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4196 __pCoreFocusEvent = new (std::nothrow) CoreFocusEvent(*this);
4197 SysTryCatch(NID_UI, __pCoreFocusEvent, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4199 __pCoreGestureEvent = new (std::nothrow) CoreGestureEvent(*this);
4200 SysTryCatch(NID_UI, __pCoreGestureEvent, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4202 __pFlickGestureDetector = new (std::nothrow) _TouchFlickGestureDetector;
4203 SysTryCatch(NID_UI, __pFlickGestureDetector, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4205 __pLongPressGestureDetector = new (std::nothrow) _TouchLongPressGestureDetector;
4206 SysTryCatch(NID_UI, __pLongPressGestureDetector, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4209 __pPublicFocusEventListeners = CreatePublicEventListenerListN();
4210 r = GetLastResult();
4211 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
4213 __pPublicKeyEventListeners = CreatePublicEventListenerListN();
4214 r = GetLastResult();
4215 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
4217 __pPublicTouchEventListeners = CreatePublicEventListenerListN();
4218 r = GetLastResult();
4219 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
4221 __pPublicDragDropEventListeners = CreatePublicEventListenerListN();
4222 r = GetLastResult();
4223 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
4225 __pPublicTouchModeChangedEventListeners = CreatePublicEventListenerListN();
4226 r = GetLastResult();
4227 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
4229 __pPublicGestureDetectors = new (std::nothrow) LinkedListT<TouchGestureDetector*>;
4230 r = GetLastResult();
4231 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
4233 r = GET_COLOR_CONFIG(BASIC::foreground, __foregroundColor);
4234 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
4237 SysAssert(r == E_SUCCESS);
4242 Dispose(true); // [ToDo] Is it OK?
4245 _Layout::LayoutContainer&
4246 _ControlImpl::GetLayoutContainer(void) const
4248 return GetCore().GetLayoutContainer();
4252 _ControlImpl::SetBuilderBounds(_ControlOrientation orientation, const Rectangle& bounds)
4256 if (orientation == _CONTROL_ORIENTATION_PORTRAIT)
4258 if (__pBuilderPortraitBounds == null)
4260 __pBuilderPortraitBounds = new (std::nothrow) FloatRectangle(0.0f, 0.0f, 0.0f, 0.0f);
4262 SysTryReturn(NID_UI,
4263 __pBuilderPortraitBounds, E_OUT_OF_MEMORY,
4264 E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4267 *__pBuilderPortraitBounds = _CoordinateSystemUtils::ConvertToFloat(bounds);
4270 else if (orientation == _CONTROL_ORIENTATION_LANDSCAPE)
4272 if (__pBuilderLandscapeBounds == null)
4274 __pBuilderLandscapeBounds = new (std::nothrow) FloatRectangle(0.0f, 0.0f, 0.0f, 0.0f);
4276 SysTryReturn(NID_UI,
4277 __pBuilderLandscapeBounds, E_OUT_OF_MEMORY,
4278 E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4281 *__pBuilderLandscapeBounds = _CoordinateSystemUtils::ConvertToFloat(bounds);
4290 _ControlImpl::SetBuilderBounds(_ControlOrientation orientation, const FloatRectangle& bounds)
4294 if (orientation == _CONTROL_ORIENTATION_PORTRAIT)
4296 if (__pBuilderPortraitBounds == null)
4298 __pBuilderPortraitBounds = new (std::nothrow) FloatRectangle(0.0f, 0.0f, 0.0f, 0.0f);
4300 SysTryReturn(NID_UI,
4301 __pBuilderPortraitBounds, E_OUT_OF_MEMORY,
4302 E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4305 *__pBuilderPortraitBounds = bounds;
4308 else if (orientation == _CONTROL_ORIENTATION_LANDSCAPE)
4310 if (__pBuilderLandscapeBounds == null)
4312 __pBuilderLandscapeBounds = new (std::nothrow) FloatRectangle(0.0f, 0.0f, 0.0f, 0.0f);
4314 SysTryReturn(NID_UI,
4315 __pBuilderLandscapeBounds, E_OUT_OF_MEMORY,
4316 E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4319 *__pBuilderLandscapeBounds = bounds;
4328 _ControlImpl::GetBuilderBounds(_ControlOrientation orientation, Rectangle& bounds) const
4332 if (orientation == _CONTROL_ORIENTATION_PORTRAIT && __pBuilderPortraitBounds)
4334 bounds = _CoordinateSystemUtils::ConvertToInteger(*__pBuilderPortraitBounds);
4337 else if (orientation == _CONTROL_ORIENTATION_LANDSCAPE && __pBuilderLandscapeBounds)
4339 bounds = _CoordinateSystemUtils::ConvertToInteger(*__pBuilderLandscapeBounds);
4347 _ControlImpl::GetBuilderBoundsF(_ControlOrientation orientation, FloatRectangle& bounds) const
4351 if (orientation == _CONTROL_ORIENTATION_PORTRAIT && __pBuilderPortraitBounds)
4353 bounds = *__pBuilderPortraitBounds;
4356 else if (orientation == _CONTROL_ORIENTATION_LANDSCAPE && __pBuilderLandscapeBounds)
4358 bounds = *__pBuilderLandscapeBounds;
4366 _ControlImpl::SetContentAreaBounds(const Rectangle& rect)
4368 GetCore().SetContentAreaBounds(rect);
4372 _ControlImpl::SetContentAreaBounds(const FloatRectangle& rect)
4374 GetCore().SetContentAreaBounds(rect);
4378 _ControlImpl::GetContentAreaBounds(void) const
4380 return GetCore().GetContentAreaBounds();
4384 _ControlImpl::GetContentAreaBoundsF(void) const
4386 return GetCore().GetContentAreaBoundsF();
4390 _ControlImpl::GetCapturedBitmapN(void) const
4392 return GetCore().GetCapturedBitmapN(true);
4396 _ControlImpl::GetInvalidatedBounds(void) const
4398 return GetCore().GetInvalidatedBounds();
4402 _ControlImpl::GetInvalidatedBoundsF(void) const
4404 return GetCore().GetInvalidatedBoundsF();
4408 _ControlImpl::GenerateKeyEvent(KeyState keyState, _KeyCode keyCode)
4410 result r = E_SUCCESS;
4412 SysTryReturn(NID_UI, keyState == KEY_LONGPRESSED,
4413 E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] keyState is invalid.\n");
4415 SysTryReturn(NID_UI, __pCoreKeyEvent, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
4417 __pCoreKeyEvent->ProcessListener(keyState, keyCode);
4423 _ControlImpl::GenerateTouchEvent(const _TouchInfo& touchInfo)
4425 result r = E_SUCCESS;
4427 _TouchStatus touchStatus = touchInfo.GetTouchStatus();
4429 SysTryReturn(NID_UI, (touchStatus == _TOUCH_LONG_PRESSED) || (touchStatus == _TOUCH_DOUBLE_PRESSED),
4430 E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] touchStatus is invalid.\n");
4432 SysTryReturn(NID_UI, __pCoreTouchEvent, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
4434 __pCoreTouchEvent->ProcessListener(touchInfo);
4440 _ControlImpl::SetMovable(bool movable)
4442 GetCore().SetMovable(movable);
4446 _ControlImpl::SetResizable(bool resizable)
4448 GetCore().SetResizable(resizable);
4451 AccessibilityContainer*
4452 _ControlImpl::GetAccessibilityContainer(void)
4454 if(__pAccessibilityContainerImpl == null)
4456 AccessibilityContainer* pContainer = _AccessibilityContainerImpl::CreateAccessibilityContainerN(*this);
4459 __pAccessibilityContainerImpl = _AccessibilityContainerImpl::GetInstance(*pContainer);
4467 return &(__pAccessibilityContainerImpl->GetPublic());
4472 _ControlImpl::SetPublicPropagatedTouchEventListener(IPropagatedTouchEventListener* pListener)
4474 __pPublicPropagatedTouchEventListener = pListener;
4478 IPropagatedTouchEventListener*
4479 _ControlImpl::GetPublicPropagatedTouchEventListener(void) const
4481 return __pPublicPropagatedTouchEventListener;
4485 _ControlImpl::SetPublicPropagatedKeyEventListener(IPropagatedKeyEventListener* pListener)
4487 __pPublicPropagatedKeyEventListener = pListener;
4491 IPropagatedKeyEventListener*
4492 _ControlImpl::GetPublicPropagatedKeyEventListener(void) const
4494 return __pPublicPropagatedKeyEventListener;
4498 _ControlImpl::SetPreviousFocus(_ControlImpl* pPreviousFocus)
4500 if (pPreviousFocus == null)
4502 _Control* pControl = null;
4503 return GetCore().SetPreviousFocus(pControl);
4505 return GetCore().SetPreviousFocus(&pPreviousFocus->GetCore());
4509 _ControlImpl::SetNextFocus(_ControlImpl* pNextFocus)
4511 if (pNextFocus == null)
4513 _Control* pControl = null;
4514 return GetCore().SetPreviousFocus(pControl);
4516 return GetCore().SetNextFocus(&pNextFocus->GetCore());
4520 _ControlImpl::GetPreviousFocus(void) const
4522 if (GetCore().GetPreviousFocus() == null)
4526 return static_cast <_ControlImpl* >(GetCore().GetPreviousFocus()->GetUserData());
4530 _ControlImpl::GetNextFocus(void) const
4532 if (GetCore().GetNextFocus() == null)
4536 return static_cast <_ControlImpl* >(GetCore().GetNextFocus()->GetUserData());
4540 _ControlImpl::OnDrawFocus(void)
4542 GetCore().OnDrawFocus();
4546 _ControlImpl::OnChildControlFocusMoved(const _Control& control)
4548 GetCore().OnChildControlFocusMoved(control);
4552 _ControlImpl::IsChildControlFocusManage(void) const
4554 GetCore().IsChildControlFocusManage();
4558 _ControlImpl::SetTouchPressThreshold(float distance)
4560 GetCore().SetTouchPressThreshold(distance);
4564 _ControlImpl::GetTouchPressThreshold(void) const
4566 return GetCore().GetTouchPressThreshold();
4570 _ControlImpl::GetTouchPressThresholdPixel(void) const
4572 return GetCore().GetTouchPressThresholdPixel();
4576 _ControlImpl::SetFontFromFile(const String& fileName)
4578 result r = GetCore().SetFontFromFile(fileName);
4579 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
4584 _ControlImpl::GetFontFile(void) const
4586 return GetCore().GetFontFile();