From af5c81b962368d7dfbf8c113d5635b87e46f6069 Mon Sep 17 00:00:00 2001 From: hexu28huawei <14530909+hexu28huawei@user.noreply.gitee.com> Date: Thu, 19 Dec 2024 11:50:24 +0800 Subject: [PATCH] fix long content drag freeze Signed-off-by: hexu28huawei Change-Id: I7d496e36397fe8e9e03dcb4ad7a13d06420aa4ec --- .../src/cef_delegate/nweb_drag_data_impl.cc | 4 ++-- .../src/cef_delegate/nweb_render_handler.cc | 18 +++++++++++++++++- .../src/cef_delegate/nweb_render_handler.h | 4 +++- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/ohos_nweb/src/cef_delegate/nweb_drag_data_impl.cc b/ohos_nweb/src/cef_delegate/nweb_drag_data_impl.cc index eb2095b6cd..4911247315 100644 --- a/ohos_nweb/src/cef_delegate/nweb_drag_data_impl.cc +++ b/ohos_nweb/src/cef_delegate/nweb_drag_data_impl.cc @@ -638,8 +638,8 @@ void NWebDragDataImpl::GetDragStartPosition(int& x, int& y) { if (x < 0) { x = 0; } - if (y < ToOhCoordinate(view_port_height_)) { - y = ToOhCoordinate(view_port_height_); + if (y < view_port_height_) { + y = view_port_height_; } } diff --git a/ohos_nweb/src/cef_delegate/nweb_render_handler.cc b/ohos_nweb/src/cef_delegate/nweb_render_handler.cc index 7e545d95dd..d7d7616efa 100644 --- a/ohos_nweb/src/cef_delegate/nweb_render_handler.cc +++ b/ohos_nweb/src/cef_delegate/nweb_render_handler.cc @@ -877,12 +877,23 @@ void NWebRenderHandler::ImageDragForFileUri(CefRefPtr drag_data) { } } +void NWebRenderHandler::GetVisibleRectToWeb( + int& visibleX, int& visibleY, int& visibleWidth, int& visibleHeight) { + auto handler = handler_.lock(); + if (handler == nullptr) { + LOG(ERROR) << "drag can't get strong ptr with handler"; + return; + } + handler->GetVisibleRectToWeb(visibleX, visibleY, visibleWidth, visibleHeight); +} + // chromium内核上报的拖拽数据 bool NWebRenderHandler::StartDragging(CefRefPtr browser, CefRefPtr drag_data, DragOperationsMask allowed_ops, int x, - int y) { + int y, + int visible_offset_y) { LOG(INFO) << "DragDrop StartDragging received dragData from chromium start " "dragging callback, operation = " << allowed_ops << ", x = " << x << ", y = " << y; @@ -939,6 +950,11 @@ bool NWebRenderHandler::StartDragging(CefRefPtr browser, if (base::ohos::IsTabletDevice() || base::ohos::IsPcDevice()) { is_drag_new_style = false; } + if (screen_info_.display_ratio > 0) { + view_port_height = visible_offset_y + view_port_height * screen_info_.display_ratio; + } else { + view_port_height = visible_offset_y + view_port_height; + } nweb_drag_data_ = std::make_shared( drag_data, drag_touch_point, start_edge, end_edge, screen_info_.display_ratio, usefull_selection, dark_mode_enable, view_port_height, is_drag_new_style); diff --git a/ohos_nweb/src/cef_delegate/nweb_render_handler.h b/ohos_nweb/src/cef_delegate/nweb_render_handler.h index 8744022d5b..7ada5961b2 100644 --- a/ohos_nweb/src/cef_delegate/nweb_render_handler.h +++ b/ohos_nweb/src/cef_delegate/nweb_render_handler.h @@ -166,11 +166,13 @@ class NWebRenderHandler : public CefRenderHandler { void UpdateDragCursor(CefRefPtr browser, DragOperation operation) override; void ImageDragForFileUri(CefRefPtr drag_data); + void GetVisibleRectToWeb(int& visibleX, int& visibleY, int& visibleWidth, int& visibleHeight) override; bool StartDragging(CefRefPtr browser, CefRefPtr drag_data, DragOperationsMask allowed_ops, int x, - int y) override; + int y, + int visible_offset_y) override; void SetIrregularDragBackground(bool is_irregular_background); void FreePixlMapData(); void NotifySelectAllClicked(bool select_all) override; -- Gitee