Fixed drawing issue
authorHeeJu Kang <mobum.kang@samsung.com>
Tue, 21 May 2013 10:01:44 +0000 (19:01 +0900)
committerHeeJu Kang <mobum.kang@samsung.com>
Tue, 21 May 2013 10:01:44 +0000 (19:01 +0900)
Change-Id: Ifbd881477adbd26ea7a8566343f5e235fcb81337
Signed-off-by: HeeJu Kang <mobum.kang@samsung.com>
src/FShell_AppWidgetBuffer.cpp
src/FShell_AppWidgetLayer.cpp
src/FShell_AppWidgetLayer.h

index 4b5fdd1..fb9283a 100644 (file)
@@ -537,25 +537,28 @@ _AppWidgetBuffer::_GemBuffer::OnLockBuffer(void)
 void
 _AppWidgetBuffer::_GemBuffer::OnUnlockBuffer(void)
 {
-       if (__pCompensateBuffer)
+       if (__pGemBuffer)
        {
-               int* pPixel = (int*)__pCompensateBuffer;
-               int* pGemPixel = (int*)__pGemBuffer;
-               int gap = __pDri2Buffer->pitch - (__gemSize.width * __depth);
-
-               for (int y = 0; y < __gemSize.height; y++)
+               if (__pCompensateBuffer)
                {
-                       for (int x = 0; x < __gemSize.width; x++)
+                       int* pPixel = (int*)__pCompensateBuffer;
+                       int* pGemPixel = (int*)__pGemBuffer;
+                       int gap = __pDri2Buffer->pitch - (__gemSize.width * __depth);
+
+                       for (int y = 0; y < __gemSize.height; y++)
                        {
-                               *pGemPixel++ = *pPixel++;
-                       }
+                               for (int x = 0; x < __gemSize.width; x++)
+                               {
+                                       *pGemPixel++ = *pPixel++;
+                               }
 
-                       pGemPixel = (int*)(((char*)pGemPixel) + gap);
+                               pGemPixel = (int*)(((char*)pGemPixel) + gap);
+                       }
                }
-       }
 
-       tbm_bo_unmap(__pTbmBo);
-       __pGemBuffer = null;
+               tbm_bo_unmap(__pTbmBo);
+               __pGemBuffer = null;
+       }
 }
 
 void*
index daf982d..da24ad1 100644 (file)
@@ -70,6 +70,17 @@ FreeRenderBuffer(void* pData, void* pCanvas)
 }
 
 void
+PreRender(void* pData, Evas* pEvas, void* pEventInfo)
+{
+       SysLog(NID_SHELL, "ENTER");
+
+       _AppWidgetLayer* pAppWidgetLayer = static_cast<_AppWidgetLayer*>(pData);
+       SysTryReturnVoidResult(NID_SHELL, pAppWidgetLayer, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
+
+       pAppWidgetLayer->OnNativeCanvasPreRendered();
+}
+
+void
 PostRender(void* pData, Evas* pEvas, void* pEventInfo)
 {
        SysLog(NID_SHELL, "ENTER");
@@ -77,7 +88,7 @@ PostRender(void* pData, Evas* pEvas, void* pEventInfo)
        _AppWidgetLayer* pAppWidgetLayer = static_cast<_AppWidgetLayer*>(pData);
        SysTryReturnVoidResult(NID_SHELL, pAppWidgetLayer, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
 
-       pAppWidgetLayer->OnRendered();
+       pAppWidgetLayer->OnNativeCanvasPostRendered();
 }
 
 }
@@ -124,6 +135,7 @@ _AppWidgetLayer::OnConstructed(void)
        Evas* pEvas = ecore_evas_get(pEcoreEvas.get());
        SysTryReturn(NID_SHELL, pEvas, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
 
+       evas_event_callback_add(pEvas, EVAS_CALLBACK_RENDER_PRE, PreRender, this);
 //     evas_event_callback_add(pEvas, EVAS_CALLBACK_RENDER_POST, PostRender, this);
 
        unique_ptr<Evas_Object, _EvasObjectDeleter> pEvasObject(evas_object_rectangle_add(pEvas));
@@ -288,6 +300,19 @@ _AppWidgetLayer::OnRendered(void)
        SysTryReturnVoidResult(NID_SHELL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
 }
 
+void
+_AppWidgetLayer::OnNativeCanvasPreRendered(void)
+{
+       SysLog(NID_SHELL, "ENTER");
+
+       __pAppWidgetBuffer->LockBuffer();
+}
+
+void
+_AppWidgetLayer::OnNativeCanvasPostRendered(void)
+{
+}
+
 result
 _AppWidgetLayer::RegisterTouchEventListener(void)
 {
@@ -377,14 +402,10 @@ _AppWidgetLayer::OnTouchEventRecevied(int eventType, double timestamp, double x,
 void
 _AppWidgetLayer::Flush(void)
 {
-//     SysLog(NID_SHELL, "ENTER");
-
        bool needed = IsFlushNeeded();
 
        if (needed)
        {
-               __pAppWidgetBuffer->LockBuffer();
-
                Evas* pEvas = ecore_evas_get(__pEcoreEvas.get());
                SysTryReturnVoidResult(NID_SHELL, pEvas, E_OUT_OF_MEMORY, "[%s] Propagating.", GetErrorMessage(E_OUT_OF_MEMORY));
 
@@ -401,9 +422,9 @@ _AppWidgetLayer::Flush(void)
                evas_data_argb_unpremul(static_cast<unsigned int*>(pBuffer), __size.width * __size.height);
 
                OnRendered();
-
-               __pAppWidgetBuffer->UnlockBuffer();
        }
+
+       __pAppWidgetBuffer->UnlockBuffer();
 }
 
 }} // Tizen::Shell
index 06159ad..2c93156 100644 (file)
@@ -62,6 +62,8 @@ public:
        int EventHandler(int eventType, double timestamp, double x, double y);
        result SyncPixmap(const Tizen::Graphics::FloatDimension& size);
        void OnRendered(void);
+       void OnNativeCanvasPreRendered(void);
+       void OnNativeCanvasPostRendered(void);
 
        virtual result RegisterTouchEventListener(void);
        virtual int AcquirePixmap(void);