}
}
-template <typename Callback, typename Arg>
+template<typename Callback, typename Arg>
void ExecuteCallback(Callback callback, Arg*& arg)
{
- if (callback)
+ if(callback)
{
callback(arg);
}
void TizenWebEngineChromium::RegisterJavaScriptAlertCallback(JavaScriptAlertCallback callback)
{
mJavaScriptAlertCallback = callback;
- if (mJavaScriptAlertCallback)
+ if(mJavaScriptAlertCallback)
{
ewk_view_javascript_alert_callback_set(mWebView, &TizenWebEngineChromium::OnJavaScriptAlert, this);
}
void TizenWebEngineChromium::RegisterJavaScriptConfirmCallback(JavaScriptConfirmCallback callback)
{
mJavaScriptConfirmCallback = callback;
- if (mJavaScriptConfirmCallback)
+ if(mJavaScriptConfirmCallback)
{
ewk_view_javascript_confirm_callback_set(mWebView, &TizenWebEngineChromium::OnJavaScriptConfirm, this);
}
void TizenWebEngineChromium::RegisterJavaScriptPromptCallback(JavaScriptPromptCallback callback)
{
mJavaScriptPromptCallback = callback;
- if (mJavaScriptPromptCallback)
+ if(mJavaScriptPromptCallback)
{
ewk_view_javascript_prompt_callback_set(mWebView, &TizenWebEngineChromium::OnJavaScriptPrompt, this);
}
return fed;
}
+void TizenWebEngineChromium::ResetDaliImageSource()
+{
+ mDaliImageSrc = NativeImageSource::New(0, 0, NativeImageSource::COLOR_DEPTH_DEFAULT);
+}
+
bool TizenWebEngineChromium::SendKeyEvent(const Dali::KeyEvent& keyEvent)
{
void* evasKeyEvent = 0;
void TizenWebEngineChromium::UpdateDisplayArea(Dali::Rect<int32_t> displayArea)
{
+ // Size was changed. Destroy previous native image source, and create new one.
+ ResetDaliImageSource();
+
evas_object_move(mWebView, displayArea.x, displayArea.y);
SetSize(displayArea.width, displayArea.height);
evas_object_geometry_set(mWebView, displayArea.x, displayArea.y, displayArea.width, displayArea.height);
void TizenWebEngineChromium::RegisterHttpAuthHandlerCallback(WebEngineHttpAuthHandlerCallback callback)
{
mHttpAuthHandlerCallback = callback;
- if (mHttpAuthHandlerCallback)
+ if(mHttpAuthHandlerCallback)
{
ewk_view_authentication_callback_set(mWebView, &TizenWebEngineChromium::OnAuthenticationChallenged, this);
}
{
return;
}
- Any source(buffer);
- mDaliImageSrc->SetSource(source);
- Dali::Stage::GetCurrent().KeepRendering(0.0f);
- ExecuteCallback(mFrameRenderedCallback);
+
+ uint32_t width = tbm_surface_get_width(buffer);
+ uint32_t height = tbm_surface_get_height(buffer);
+
+ // Upldate source only if buffer size is equal with current image
+ if(mWidth == width && mHeight == height)
+ {
+ Any source(buffer);
+ mDaliImageSrc->SetSource(source);
+ Dali::Stage::GetCurrent().KeepRendering(0.0f);
+ ExecuteCallback(mFrameRenderedCallback);
+ }
+ else
+ {
+ DALI_LOG_DEBUG_INFO("(WebEngine) WebEngine size not matched with buffer (WebEngine size is %ux%u, but buffer size is %ux%u)\n", mWidth, mHeight, width, height);
+ }
}
void TizenWebEngineChromium::OnFrameRendered(void* data, Evas_Object*, void* buffer)
{
auto pThis = static_cast<TizenWebEngineChromium*>(data);
std::string url;
- if (newUrl != nullptr)
+ if(newUrl != nullptr)
{
url = static_cast<char*>(newUrl);
DALI_LOG_RELEASE_INFO("#UrlChanged : %s\n", url.c_str());
void TizenWebEngineChromium::OnNewWindowCreated(void* data, Evas_Object*, void* out_view)
{
DALI_LOG_RELEASE_INFO("#NewWindowCreated.\n");
- auto pThis = static_cast<TizenWebEngineChromium*>(data);
+ auto pThis = static_cast<TizenWebEngineChromium*>(data);
Dali::WebEnginePlugin* outPlugin = nullptr;
ExecuteCallback(pThis->mNewWindowCreatedCallback, outPlugin);
- if (outPlugin)
+ if(outPlugin)
{
*static_cast<Evas_Object**>(out_view) = WebEngineManager::Get().Find(outPlugin);
}
void TizenWebEngineChromium::OnJavaScriptEvaluated(Evas_Object*, const char* result, void* data)
{
- auto pThis = static_cast<TizenWebEngineChromium*>(data);
+ auto pThis = static_cast<TizenWebEngineChromium*>(data);
std::string jsResult;
- if (result != nullptr)
+ if(result != nullptr)
{
jsResult = result;
}
auto plugin = WebEngineManager::Get().Find(o);
if(plugin)
{
- auto pThis = static_cast<TizenWebEngineChromium*>(plugin);
+ auto pThis = static_cast<TizenWebEngineChromium*>(plugin);
std::string resultText;
- if (message.body != nullptr)
+ if(message.body != nullptr)
{
resultText = static_cast<char*>(message.body);
}
Eina_Bool TizenWebEngineChromium::OnJavaScriptAlert(Evas_Object* o, const char* alert_text, void* data)
{
- auto pThis = static_cast<TizenWebEngineChromium*>(data);
+ auto pThis = static_cast<TizenWebEngineChromium*>(data);
std::string alertText;
if(alert_text != nullptr)
{
Eina_Bool TizenWebEngineChromium::OnJavaScriptConfirm(Evas_Object* o, const char* message, void* data)
{
- auto pThis = static_cast<TizenWebEngineChromium*>(data);
+ auto pThis = static_cast<TizenWebEngineChromium*>(data);
std::string messageText;
if(message != nullptr)
{
Eina_Bool TizenWebEngineChromium::OnJavaScriptPrompt(Evas_Object* o, const char* message, const char* default_value, void* data)
{
- auto pThis = static_cast<TizenWebEngineChromium*>(data);
+ auto pThis = static_cast<TizenWebEngineChromium*>(data);
std::string messageText;
if(message != nullptr)
{
namespace Plugin
{
-
/**
* @brief A class implements Dali::WebEnginePlugin for tizen chromium.
*/
private:
static Dali::PixelData ConvertImageColorSpace(Evas_Object* image);
- static void OnFrameRendered(void* data, Evas_Object*, void* buffer);
- static void OnLoadStarted(void* data, Evas_Object*, void*);
- static void OnLoadInProgress(void* data, Evas_Object*, void*);
- static void OnLoadFinished(void* data, Evas_Object*, void*);
- static void OnLoadError(void* data, Evas_Object*, void* rawError);
- static void OnUrlChanged(void* data, Evas_Object*, void* newUrl);
- static void OnConsoleMessageReceived(void* data, Evas_Object*, void* eventInfo);
- static void OnEdgeLeft(void* data, Evas_Object*, void*);
- static void OnEdgeRight(void* data, Evas_Object*, void*);
- static void OnEdgeTop(void* data, Evas_Object*, void*);
- static void OnEdgeBottom(void* data, Evas_Object*, void*);
- static void OnFormRepostDecided(void* data, Evas_Object*, void* eventInfo);
- static void OnResponsePolicyDecided(void* data, Evas_Object*, void* policy);
- static void OnNavigationPolicyDecided(void* data, Evas_Object*, void* policy);
- static void OnNewWindowCreated(void* data, Evas_Object*, void* out_view);
- static void OnCertificateConfirmed(void* data, Evas_Object*, void* eventInfo);
- static void OnSslCertificateChanged(void* data, Evas_Object*, void* eventInfo);
- static void OnContextMenuShown(void* data, Evas_Object*, void* eventInfo);
- static void OnContextMenuHidden(void* data, Evas_Object*, void* eventInfo);
- static void OnAuthenticationChallenged(Evas_Object*, Ewk_Auth_Challenge* authChallenge, void* data);
- static void OnJavaScriptEvaluated(Evas_Object* o, const char* result, void* data);
- static void OnJavaScriptInjected(Evas_Object* o, Ewk_Script_Message message);
+ static void OnFrameRendered(void* data, Evas_Object*, void* buffer);
+ static void OnLoadStarted(void* data, Evas_Object*, void*);
+ static void OnLoadInProgress(void* data, Evas_Object*, void*);
+ static void OnLoadFinished(void* data, Evas_Object*, void*);
+ static void OnLoadError(void* data, Evas_Object*, void* rawError);
+ static void OnUrlChanged(void* data, Evas_Object*, void* newUrl);
+ static void OnConsoleMessageReceived(void* data, Evas_Object*, void* eventInfo);
+ static void OnEdgeLeft(void* data, Evas_Object*, void*);
+ static void OnEdgeRight(void* data, Evas_Object*, void*);
+ static void OnEdgeTop(void* data, Evas_Object*, void*);
+ static void OnEdgeBottom(void* data, Evas_Object*, void*);
+ static void OnFormRepostDecided(void* data, Evas_Object*, void* eventInfo);
+ static void OnResponsePolicyDecided(void* data, Evas_Object*, void* policy);
+ static void OnNavigationPolicyDecided(void* data, Evas_Object*, void* policy);
+ static void OnNewWindowCreated(void* data, Evas_Object*, void* out_view);
+ static void OnCertificateConfirmed(void* data, Evas_Object*, void* eventInfo);
+ static void OnSslCertificateChanged(void* data, Evas_Object*, void* eventInfo);
+ static void OnContextMenuShown(void* data, Evas_Object*, void* eventInfo);
+ static void OnContextMenuHidden(void* data, Evas_Object*, void* eventInfo);
+ static void OnAuthenticationChallenged(Evas_Object*, Ewk_Auth_Challenge* authChallenge, void* data);
+ static void OnJavaScriptEvaluated(Evas_Object* o, const char* result, void* data);
+ static void OnJavaScriptInjected(Evas_Object* o, Ewk_Script_Message message);
static Eina_Bool OnJavaScriptAlert(Evas_Object* o, const char* alert_text, void*);
static Eina_Bool OnJavaScriptConfirm(Evas_Object* o, const char* message, void*);
static Eina_Bool OnJavaScriptPrompt(Evas_Object* o, const char* message, const char* default_value, void*);
- static void OnHitTestCreated(Evas_Object*, int x, int y, int hitTestMode, Ewk_Hit_Test* hitTest, void* data);
- static void OnScreenshotCaptured(Evas_Object* image, void* data);
- static void OnVideoPlaying(Evas_Object*, Eina_Bool isPlaying, void* data);
- static void OnPlainTextReceived(Evas_Object* o, const char* plainText, void* data);
+ static void OnHitTestCreated(Evas_Object*, int x, int y, int hitTestMode, Ewk_Hit_Test* hitTest, void* data);
+ static void OnScreenshotCaptured(Evas_Object* image, void* data);
+ static void OnVideoPlaying(Evas_Object*, Eina_Bool isPlaying, void* data);
+ static void OnPlainTextReceived(Evas_Object* o, const char* plainText, void* data);
static Eina_Bool OnGeolocationPermission(Evas_Object*, Ewk_Geolocation_Permission_Request* request, void* data);
void UpdateImage(tbm_surface_h buffer);
bool FeedMouseEvent(const TouchEvent& touch);
bool FeedTouchEvent(const TouchEvent& touch);
+ /**
+ * @brief Destroy and re-create native image source.
+ */
+ void ResetDaliImageSource();
+
// ewk web view.
Dali::NativeImageSourcePtr mDaliImageSrc;
Evas_Object* mWebView;