Prevent overlap with snapshot image and webview image in web-provider
authorMinHyung Ko <minhyung.ko@samsung.com>
Wed, 4 Sep 2013 01:26:32 +0000 (10:26 +0900)
committerMinHyung Ko <minhyung.ko@samsung.com>
Wed, 4 Sep 2013 01:59:13 +0000 (10:59 +0900)
[Issue#]     P130830-02061
[Problem]    overlap images when flick down web-dynamic box
[Cause]      during webview loading two evas object images shown simultaneously
[Solution]   when snapshot viewing webview move to outside of viewport until paint is done
[SCMRequest] N/A

Change-Id: I542ae94777724dd4a0548c697c182e1a41ca10ab

src/Plugin/AppBoxPlugin/AppBoxRenderView.cpp
src/Plugin/AppBoxPlugin/AppBoxRenderView.h

index f609963..c0905fb 100755 (executable)
@@ -44,6 +44,7 @@
 
 #define RENDER_MAX_TIME 30.0
 #define SNAPSHOT_REMOVE_TIME 1.0
+#define WEB_DBOX_OBJ_MOVE_TO_OUTSIDE_POINT_VALUE -10000
 
 // injection javascript file regarding creating js object used by box and pd
 static const std::string injectionFile("/usr/share/web-provider/injection.js");
@@ -65,6 +66,7 @@ AppBoxRenderView::AppBoxRenderView(
     , m_boxRenderBuffer()
     , m_pdFastOpen(false)
     , m_boxFinishLoad(false)
+    , m_boxFrameRendered(false)
     , m_boxWrt_isSuspended(false)
 {
     LogD("enter");
@@ -107,8 +109,9 @@ void AppBoxRenderView::showBox(RenderInfoPtr boxRenderInfo)
         m_boxRenderBuffer->deleteTouchTimer();
     }
 
-    // set boxFinishLoad to false
+    // set boxFinishLoad and m_boxFrameRendered to false
     m_boxFinishLoad = false;
+    m_boxFrameRendered = false;
 
     // copy to url
     std::string boxStartUrl = getStartUrl(URL_TYPE_BOX, boxRenderInfo->defaultUrlParams);
@@ -134,7 +137,10 @@ void AppBoxRenderView::showBox(RenderInfoPtr boxRenderInfo)
             boxRenderInfo->height);
 
 
-    evas_object_show(boxRenderInfo->window);
+    evas_object_show(m_boxWrt->GetCurrentWebview());
+    // webview window move to outside of viewport because of overlap issue with snapshot image
+    evas_object_move(m_boxWrt->GetCurrentWebview(), WEB_DBOX_OBJ_MOVE_TO_OUTSIDE_POINT_VALUE, WEB_DBOX_OBJ_MOVE_TO_OUTSIDE_POINT_VALUE);
+
     m_boxWrt->Show();
     m_boxRenderInfo = boxRenderInfo;
 }
@@ -265,6 +271,11 @@ void AppBoxRenderView::showPd(RenderInfoPtr pdRenderInfo, RenderInfoPtr boxRende
     // show pd window
     evas_object_show(pdRenderInfo->window);
 
+    // need to  create new snapshot when m_napshot is empty
+    if (!m_snapshot) {
+        evas_object_show(getCurrentSnapShot());
+    }
+
     // show box
     showBox(boxRenderInfo);
 
@@ -459,13 +470,17 @@ Eina_Bool AppBoxRenderView::removeSnapShotTimerCallback(void* data)
     LogD("enter");
 
     AppBoxRenderView* This = static_cast<AppBoxRenderView*>(data);
-    if (!(This->m_boxFinishLoad)) {
+    if (!(This->m_boxFinishLoad && This->m_boxFrameRendered)) {
         return ECORE_CALLBACK_RENEW;
     }
 
     // hide snapshot because valid frame has been prepared generally.
     This->clearSnapShot();
 
+    // move to inside of viewport to prevent overlap with snapshot image
+    evas_object_move(This->m_boxWrt->GetCurrentWebview(), 0, 0);
+    evas_object_show(This->m_boxWrt->GetCurrentWebview());
+
     This->m_removeSnapShotTimer = NULL;
     return ECORE_CALLBACK_CANCEL;
 }
@@ -628,4 +643,13 @@ void AppBoxRenderView::frameRenderedCallback(
     // start to update render buffer!
     AppBoxRenderView* This = static_cast<AppBoxRenderView*>(data);
     This->m_boxRenderBuffer->startCanvasUpdate();
+
+    // set flag
+    This->m_boxFrameRendered = true;
+
+    // move to inside of viewport to prevent overlap with snapshot image
+    if (!This->m_removeSnapShotTimer) {
+        evas_object_move(This->m_boxWrt->GetCurrentWebview(), 0, 0);
+    }
+
 }
index fc92593..4d0d7a7 100644 (file)
@@ -121,8 +121,11 @@ class AppBoxRenderView: public IRenderView {
         Ecore_Timer* m_removeSnapShotTimer;
         IPdHelperPtr m_pdHelper;
         AppBoxRenderBuffer* m_boxRenderBuffer;
+
+        // for check status of webview
         bool m_pdFastOpen;
         bool m_boxFinishLoad;
+        bool m_boxFrameRendered;
 
         // TODO this temporary flag should removed!
         bool m_boxWrt_isSuspended;