From 865625cc9c53c1f5f712482e2d1b58e9bc481051 Mon Sep 17 00:00:00 2001 From: HeeJu Kang Date: Tue, 21 May 2013 19:01:44 +0900 Subject: [PATCH] Fixed drawing issue Change-Id: Ifbd881477adbd26ea7a8566343f5e235fcb81337 Signed-off-by: HeeJu Kang --- src/FShell_AppWidgetBuffer.cpp | 29 ++++++++++++++++------------- src/FShell_AppWidgetLayer.cpp | 35 ++++++++++++++++++++++++++++------- src/FShell_AppWidgetLayer.h | 2 ++ 3 files changed, 46 insertions(+), 20 deletions(-) diff --git a/src/FShell_AppWidgetBuffer.cpp b/src/FShell_AppWidgetBuffer.cpp index 4b5fdd1..fb9283a 100644 --- a/src/FShell_AppWidgetBuffer.cpp +++ b/src/FShell_AppWidgetBuffer.cpp @@ -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* diff --git a/src/FShell_AppWidgetLayer.cpp b/src/FShell_AppWidgetLayer.cpp index daf982d..da24ad1 100644 --- a/src/FShell_AppWidgetLayer.cpp +++ b/src/FShell_AppWidgetLayer.cpp @@ -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 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(pBuffer), __size.width * __size.height); OnRendered(); - - __pAppWidgetBuffer->UnlockBuffer(); } + + __pAppWidgetBuffer->UnlockBuffer(); } }} // Tizen::Shell diff --git a/src/FShell_AppWidgetLayer.h b/src/FShell_AppWidgetLayer.h index 06159ad..2c93156 100644 --- a/src/FShell_AppWidgetLayer.h +++ b/src/FShell_AppWidgetLayer.h @@ -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); -- 2.7.4