clear snapshot before loading box and update box buffer after preparing valid layout
authorYunchan Cho <yunchan.cho@samsung.com>
Fri, 24 May 2013 04:22:16 +0000 (13:22 +0900)
committerYunchan Cho <yunchan.cho@samsung.com>
Fri, 24 May 2013 08:04:08 +0000 (17:04 +0900)
[Issue#] P130520-0586 (PLM)
[Problem] previous snapshot is not removed in general dynamic box, so that the snapshot is overlayed next snaphot below.
[Cause] when the newly box is loaded, previous created snapshot is not removed.
[Solution] previous snapshot is removed when the box is reloaded

Change-Id: I48dd8a9e97203c04399303e6400aca8fd5695739

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

index f0bec40..cd2ca13 100644 (file)
@@ -85,6 +85,10 @@ void AppBoxRenderView::showBox(RenderInfoPtr renderInfo)
 {
     LogD("enter");
 
+    // stop updating render buffer
+    m_renderBuffer->stopCanvasUpdate();
+    clearSnapShot();
+
     // delete already running timer
     deleteRenderTimer();
 
@@ -97,7 +101,7 @@ void AppBoxRenderView::showBox(RenderInfoPtr renderInfo)
     std::string boxStartUrl = getStartUrl(URL_TYPE_BOX, renderInfo->defaultUrlParams);
     if (m_boxWrt) {
         LogD("existing wrt core is removed");
-        destroyWrtCore(m_boxWrt);
+        destroyBoxWrtCore();
     }
 
     m_boxWrt = createWrtCore(boxStartUrl, m_boxWin, m_ewkContext); 
@@ -158,7 +162,15 @@ AppBoxRenderView::WrtCorePtr AppBoxRenderView::createWrtCore(
 
     // To support transparent background
     evas_object_color_set(wrt->GetCurrentWebview(), 0, 0, 0, 0);
-    evas_object_layer_set(wrt->GetCurrentWebview(), EVAS_LAYER_MAX);
+    //evas_object_layer_set(wrt->GetCurrentWebview(), EVAS_LAYER_MAX);
+
+    // To know starting point for updating buffer
+    evas_object_smart_callback_add(
+            wrt->GetCurrentWebview(),
+            "load,nonemptylayout,finished",
+            //"frame,rendered", 
+            loadNonEmptyLayoutFinishedCallback,
+            this);
 
     return wrt;
 }
@@ -320,8 +332,7 @@ void AppBoxRenderView::clearSnapShot()
 {
     LogD("enter");
     if (m_snapshot) {
-        evas_object_layer_set(m_snapshot, EVAS_LAYER_MIN);
-        //evas_object_hide(m_snapshot);
+        //evas_object_layer_set(m_snapshot, EVAS_LAYER_MIN);
         evas_object_del(m_snapshot);
         m_snapshot = NULL;
     }
@@ -393,7 +404,6 @@ void AppBoxRenderView::executeScriptCallback(
 void AppBoxRenderView::startLoadCallback(Evas_Object* webview)
 {
     LogD("enter");
-    m_renderBuffer->startCanvasUpdate();
     // execute injection for creating js objects
     std::ifstream jsFile(injectionFile);
     std::string script((std::istreambuf_iterator<char>(jsFile)),
@@ -495,3 +505,13 @@ void AppBoxRenderView::crashWebProcessCallback()
     ewk_shutdown();
     elm_exit();
 }
+
+void AppBoxRenderView::loadNonEmptyLayoutFinishedCallback(
+        void* data, Evas_Object* webview, void* eventInfo)
+{
+    LogD("enter");
+
+    // start to update render buffer!
+    AppBoxRenderView* This = static_cast<AppBoxRenderView*>(data);
+    This->m_renderBuffer->startCanvasUpdate();
+}
index 7f34326..0ee7b0e 100644 (file)
@@ -81,6 +81,8 @@ class AppBoxRenderView: public IRenderView {
         // ewk view callback
         static void executeScriptCallback(
                 Evas_Object* webview, const char* result, void* data);
+        static void loadNonEmptyLayoutFinishedCallback(
+                void* data, Evas_Object* webview, void* eventInfo);
 
         // user Callbacks of RunnableWidgetObject
         void startLoadCallback(Evas_Object* webview);