Fixed Coding Idioms Violations
[platform/framework/native/uifw.git] / src / ui / controls / FUiCtrl_OverlayAgent.cpp
index 73459ca..6b79b75 100644 (file)
@@ -49,6 +49,7 @@
 using namespace std;
 using namespace Tizen::Base;
 using namespace Tizen::Base::Collection;
+using namespace Tizen::Base::Runtime;
 using namespace Tizen::Graphics;
 using namespace Tizen::Io;
 using namespace Tizen::Media;
@@ -183,6 +184,8 @@ OnEvasImageDamaged(void* pData, Evas_Object* pImageObject)
        Dimension rendererImageSize(0,0);
        evas_object_image_size_get(pRendererImageObject, &rendererImageSize.width, &rendererImageSize.height);
 
+       //pOverlayAgent->SetRendererFlushNeeded();
+
        if (!newImageSize.Equals(rendererImageSize))
        {
                SysSecureLog(NID_UI_CTRL,"newImageSize [%d, %d] rendererImageSize [%d, %d]", newImageSize.width, newImageSize.height, rendererImageSize.width, rendererImageSize.height);
@@ -215,10 +218,134 @@ struct visualElementDeleter
        }
 };
 
+_OverlayAgent::_OverlayVisualElement::_OverlayVisualElement(void)
+       : __pOverlayTimer(null)
+       , __pImageObject(null)
+       , __showStateChanged(false)
+{
+}
+
+_OverlayAgent::_OverlayVisualElement::_OverlayVisualElement(const _OverlayVisualElement& rhs)
+       : _VisualElement(rhs)
+       , __pOverlayTimer(null)
+       , __pImageObject(rhs.__pImageObject)
+       , __showStateChanged(rhs.__showStateChanged)
+{
+}
+
+_OverlayAgent::_OverlayVisualElement::~_OverlayVisualElement(void)
+{
+       if (__pOverlayTimer)
+       {
+               __pOverlayTimer->Cancel();
+               delete __pOverlayTimer;
+               __pOverlayTimer = null;
+       }
+
+       if (__pImageObject)
+       {
+               evas_object_event_callback_del(__pImageObject, EVAS_CALLBACK_SHOW, OnImageObjectShown);
+               evas_object_event_callback_del(__pImageObject, EVAS_CALLBACK_HIDE, OnImageObjectHidden);
+       }
+}
+
+result
+_OverlayAgent::_OverlayVisualElement::Construct(void)
+{
+       if (!__pOverlayTimer)
+       {
+               __pOverlayTimer = new (nothrow) Timer();
+               __pOverlayTimer->Construct(*this);
+       }
+
+       return _VisualElement::Construct();
+}
+
+Evas_Object*
+_OverlayAgent::_OverlayVisualElement::GetImageObject(void) const
+{
+       return __pImageObject;
+}
+
+void
+_OverlayAgent::_OverlayVisualElement::SetImageObject(Evas_Object* pImageObject)
+{
+       if (__pImageObject)
+       {
+               evas_object_event_callback_del(__pImageObject, EVAS_CALLBACK_SHOW, OnImageObjectShown);
+               evas_object_event_callback_del(__pImageObject, EVAS_CALLBACK_HIDE, OnImageObjectHidden);
+       }
+
+       __pImageObject = pImageObject;
+
+       if (__pImageObject)
+       {
+               evas_object_event_callback_add(__pImageObject, EVAS_CALLBACK_SHOW, OnImageObjectShown, this);
+               evas_object_event_callback_add(__pImageObject, EVAS_CALLBACK_HIDE, OnImageObjectHidden, this);
+       }
+}
+
+void
+_OverlayAgent::_OverlayVisualElement::SetImageObjectShowStateChanged(void)
+{
+       __showStateChanged = true;
+
+       if (IsFailed(__pOverlayTimer->Start(0)))
+       {
+               __pOverlayTimer->Cancel();
+               __pOverlayTimer->Start(0);
+               SysSecureLog(NID_UI_CTRL, "The timer is restarted.");
+               ClearLastResult();
+       }
+}
+
+void
+_OverlayAgent::_OverlayVisualElement::OnImageObjectShown(void* pData, Evas *pEvas, Evas_Object *pImageObject, void *event_info)
+{
+       _OverlayVisualElement* pOverlayVE = reinterpret_cast<_OverlayVisualElement*>(pData);
+       if (pOverlayVE)
+       {
+               pOverlayVE->SetImageObjectShowStateChanged();
+               SysSecureLog(NID_UI_CTRL, "The show state of Renderer VisualElement is set to SHOW");
+       }
+}
+
+void
+_OverlayAgent::_OverlayVisualElement::OnImageObjectHidden(void* pData, Evas *pEvas, Evas_Object *pImageObject, void *event_info)
+{
+       _OverlayVisualElement* pOverlayVE = reinterpret_cast<_OverlayVisualElement*>(pData);
+       if (pOverlayVE)
+       {
+               pOverlayVE->SetImageObjectShowStateChanged();
+               SysSecureLog(NID_UI_CTRL, "The show state of Renderer VisualElement is set to HIDE");
+       }
+}
+
+VisualElement*
+_OverlayAgent::_OverlayVisualElement::CloneN(void) const
+{
+       return new (nothrow) _OverlayVisualElement(*this);
+}
+
+void
+_OverlayAgent::_OverlayVisualElement::OnTimerExpired(Timer& timer)
+{
+       if (&timer == __pOverlayTimer && __showStateChanged && __pImageObject)
+       {
+               SetShowState(evas_object_visible_get(__pImageObject));
+               __showStateChanged = false;
+               SysSecureLog(NID_UI_CTRL, "Updates show state of Renderer VisualElement");
+       }
+       else
+       {
+               SysSecureLog(NID_UI_CTRL, "The state of timer is invalid.");
+       }
+}
+
 _OverlayAgent*
 _OverlayAgent::CreateInstanceN(_OverlayAgentStyle style, const _Control& parentControl, const FloatRectangle& logicalBounds, const Rectangle& physicalBounds)
 {
-       unique_ptr<_OverlayAgent> pOverlayAgent(new (std::nothrow) _OverlayAgent(style, parentControl, logicalBounds, physicalBounds));
+       unique_ptr<_OverlayAgent> pOverlayAgent(new (nothrow) _OverlayAgent(style, parentControl, logicalBounds, physicalBounds));
        SysTryReturn(NID_UI_CTRL, pOverlayAgent != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
 
        result r = GetLastResult();
@@ -228,8 +355,8 @@ _OverlayAgent::CreateInstanceN(_OverlayAgentStyle style, const _Control& parentC
 }
 
 _OverlayAgent::_OverlayAgent(_OverlayAgentStyle style, const _Control& parentControl, const FloatRectangle& logicalBounds, const Rectangle& physicalBounds)
-       : __pParentVE(null)
-       , __pRendererVE(null)
+       : __pRendererVE(null)
+       , __pParentVE(null)
        , __pImageObject(null)
        , __style(style)
        , __currentRotation(_OVERLAY_AGENT_ROTATION_NONE)
@@ -512,7 +639,7 @@ _OverlayAgent::PutXvImage(void)
        SysTryReturnResult(NID_UI_CTRL, pDisplay != null, E_SYSTEM, "The current value of Display is null");
 
        if (__pXvImage == null || __needToRellaocImage)
-               //||(__pXvImage && __pXvImage->data_size != currentSourceBufferSize->GetCapacity()) )
+               //||(__pXvImage && __pXvImage->data_size != currentSourceBufferSize->GetCapacity()))
        {
                if (__xvPort != -1)
                {
@@ -729,7 +856,7 @@ _OverlayAgent::SetRotation(_OverlayAgentRotation rotation)
 
        //Set bounds of rotated renderer
        FloatRectangle rendererBounds = __standardRendererBounds;
-       if (rotatedZAngle == 90.0f || rotatedZAngle == 270.0f )
+       if (rotatedZAngle == 90.0f || rotatedZAngle == 270.0f)
        {
                rendererBounds.x = __standardRendererBounds.x - ((__standardRendererBounds.height - __standardRendererBounds.width) / 2.0f);
                rendererBounds.y = __standardRendererBounds.y + ((__standardRendererBounds.height - __standardRendererBounds.width) / 2.0f);
@@ -885,9 +1012,10 @@ _OverlayAgent::GetBounds(void) const
 result
 _OverlayAgent::CreateRendererVisualElement(const _Control& parentControl, const FloatRectangle& logicalBounds, const Rectangle& physicalBounds)
 {
+
        //Create new VisualElement and insert it to Parent's VisualElement
-       unique_ptr<_VisualElement, visualElementDeleter> pRendererVE(new (std::nothrow) _VisualElement());
-       SysTryReturnResult(NID_UI_CTRL, pRendererVE != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient");
+       unique_ptr<_OverlayVisualElement, visualElementDeleter> pRendererVE(new (std::nothrow) _OverlayVisualElement());
+       SysTryReturnResult(NID_UI_CTRL, pRendererVE != null, E_OUT_OF_MEMORY, "Memory allocation failed.");
 
        result r = pRendererVE->Construct();
        SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
@@ -940,7 +1068,9 @@ _OverlayAgent::CreateRendererVisualElement(const _Control& parentControl, const
        evas_object_image_filled_set(__pImageObject, EINA_TRUE);
        evas_object_resize(__pImageObject, physicalBounds.width, physicalBounds.height);
        evas_object_move(__pImageObject, physicalBounds.x, physicalBounds.y);
-       evas_object_show(__pImageObject);
+       evas_object_hide(__pImageObject);
+       pRendererVE->SetImageObject(__pImageObject);
+
 
        DisplayContext* pDisplayContext = parentControl.GetRootWindow()->GetDisplayContext();
        SysTryReturnResult(NID_UI_CTRL, pDisplayContext != null, E_SYSTEM, "[E_SYSTEM] The current value of RootWindow's DisplayContext is null.");
@@ -975,7 +1105,7 @@ _OverlayAgent::CreatePixmap(const Rectangle& physicalBounds)
                E_SYSTEM, "input size (%d, %d) is too small to create a pixmap",pixmapSize.width, pixmapSize.height);
 
        // Create pixmap
-       Display *pDisplay = (Display*)ecore_x_display_get();
+       DisplaypDisplay = (Display*)ecore_x_display_get();
        SysTryReturnResult(NID_UI_CTRL, pDisplay != null, E_SYSTEM, "The current value of Display is null");
 
        __pixmap = XCreatePixmap(pDisplay, DefaultRootWindow(pDisplay), pixmapSize.width, pixmapSize.height, DefaultDepth(pDisplay, DefaultScreen(pDisplay)));
@@ -1118,7 +1248,7 @@ _OverlayAgent::GetPixelFormatListN(void)
                __OverlayAgentBufferPixelFormat[0] = set;
        }
 
-       std::unique_ptr< ArrayListT<bool> > pFormatList( new (std::nothrow) ArrayListT<bool>());
+       std::unique_ptr< ArrayListT<bool> > pFormatList(new (std::nothrow) ArrayListT<bool>());
        SysTryReturn(NID_UI_CTRL, pFormatList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] failed to create a list instance");
 
        result r = pFormatList->Construct();
@@ -1268,6 +1398,8 @@ _OverlayAgent::EvaluateBounds(OverlayAgentEvaluationOption option, FloatRectangl
 
        FloatRectangle originalInputRect(rect);
        rect = _CoordinateSystemUtils::ConvertToFloat(_CoordinateSystemUtils::InverseTransform(physicalRect));
+       rect.x = originalInputRect.x;
+       rect.y = originalInputRect.y;
 
        if (rect != originalInputRect)
        {