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 eb2095b6cdf96e252bc24a426b005e14a280c4a7..49112473153c5c38dc8d06a2367f67f61e4c8553 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 7e545d95ddd1f3dd31cddddf148b6ac9da7c7bb3..d7d7616efa02e241193db7073b54a67ff0bf95e2 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 8744022d5b4e4c066704055eb50845e87df8478d..7ada5961b2d92e191bede244f6e9eaadbb2049ad 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;