From cf03b4a31031c4c51e8f0f170bef3bab8572b3d0 Mon Sep 17 00:00:00 2001 From: Manjeet Date: Wed, 21 Feb 2024 16:10:05 +0530 Subject: [PATCH 1/1] fixup! [M120 Migration] Enable snapshot feature for EFL port This commit adds sample code to test sync screenshot API in ubrowser. Reference: https://review.tizen.org/gerrit/298956 Change-Id: I9781243ac601361437d6330035f93a2d53aa9776 Signed-off-by: Manjeet --- tizen_src/ewk/ubrowser/window.cc | 19 +++++++++++++++---- tizen_src/ewk/ubrowser/window.h | 2 +- tizen_src/ewk/ubrowser/window_ui.cc | 12 +++++++++++- tizen_src/ewk/ubrowser/window_ui.h | 1 + 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/tizen_src/ewk/ubrowser/window.cc b/tizen_src/ewk/ubrowser/window.cc index 416fc30..721139d 100644 --- a/tizen_src/ewk/ubrowser/window.cc +++ b/tizen_src/ewk/ubrowser/window.cc @@ -434,13 +434,24 @@ void Window::SetAutoRotate() { (sizeof(rots) / sizeof(int))); } -void Window::TakeScreenshotAsync() { +void Window::TakeScreenshot(bool sync) { log_trace("%s", __PRETTY_FUNCTION__); Eina_Rectangle rect; EINA_RECTANGLE_SET(&rect, 0, 0, 400, 400); - ewk_view_screenshot_contents_get_async(web_view_, rect, 1.0, - evas_object_evas_get(web_view_), - &Window::OnScreenshotCaptured, NULL); + if (!sync) { + ewk_view_screenshot_contents_get_async(web_view_, rect, 1.0, + evas_object_evas_get(web_view_), + &Window::OnScreenshotCaptured, NULL); + return; + } + + Evas_Object* snapshot = ewk_view_screenshot_contents_get( + web_view_, rect, 1.0, evas_object_evas_get(web_view_)); + if (!snapshot) { + fprintf(stderr, "Failed to get snapshot sync\n"); + return; + } + OnScreenshotCaptured(snapshot, NULL); } #if BUILDFLAG(IS_TIZEN_TV) diff --git a/tizen_src/ewk/ubrowser/window.h b/tizen_src/ewk/ubrowser/window.h index 2eaad6a..d144a5e 100644 --- a/tizen_src/ewk/ubrowser/window.h +++ b/tizen_src/ewk/ubrowser/window.h @@ -52,7 +52,7 @@ class Window { void ShowInspectorURL(const char* url); void SetGoogleDataProxyHeaders() const; void SetAutoRotate(); - void TakeScreenshotAsync(); + void TakeScreenshot(bool sync); void Exit() const; IdType Id() const; diff --git a/tizen_src/ewk/ubrowser/window_ui.cc b/tizen_src/ewk/ubrowser/window_ui.cc index 7946def6..ff28560 100644 --- a/tizen_src/ewk/ubrowser/window_ui.cc +++ b/tizen_src/ewk/ubrowser/window_ui.cc @@ -316,6 +316,9 @@ Evas_Object* WindowUI::CreateExtraActionsMenu(Evas_Object* parent) { elm_ctxpopup_item_append(menu_, "Take screenshot async", NULL, &WindowUI::OnTakeScreenshotAsync, this); + elm_ctxpopup_item_append(menu_, "Take screenshot sync", NULL, + &WindowUI::OnTakeScreenshotSync, this); + elm_ctxpopup_item_append(menu_, "Quit", NULL, &WindowUI::Exit, this); return menu_; @@ -676,7 +679,14 @@ void WindowUI::OnShowZoomPopup(void* data, Evas_Object* obj, void*) { void WindowUI::OnTakeScreenshotAsync(void* data, Evas_Object* obj, void*) { log_trace("%s", __PRETTY_FUNCTION__); WindowUI* thiz = static_cast(data); - thiz->window_.TakeScreenshotAsync(); + thiz->window_.TakeScreenshot(false); + thiz->CloseMenu(); +} + +void WindowUI::OnTakeScreenshotSync(void* data, Evas_Object* obj, void*) { + log_trace("%s", __PRETTY_FUNCTION__); + WindowUI* thiz = static_cast(data); + thiz->window_.TakeScreenshot(true); thiz->CloseMenu(); } diff --git a/tizen_src/ewk/ubrowser/window_ui.h b/tizen_src/ewk/ubrowser/window_ui.h index b7a4ebf9..81bed26 100644 --- a/tizen_src/ewk/ubrowser/window_ui.h +++ b/tizen_src/ewk/ubrowser/window_ui.h @@ -90,6 +90,7 @@ class WindowUI { static void ClosePopup(void* data, Evas_Object*, void*); static void OnShowZoomPopup(void* data, Evas_Object*, void*); static void OnTakeScreenshotAsync(void* data, Evas_Object*, void*); + static void OnTakeScreenshotSync(void* data, Evas_Object*, void*); static void OnZoomChanged(void* data, Evas_Object*, void*); static void OnRememberFormDataChange(void* data, Evas_Object*, void*); static void OnRememberPasswordChange(void* data, Evas_Object*, void*); -- 2.7.4