Android Pixel Perfect Mode: fix scrolling inside some web elements (#2301)

This commit is contained in:
Carmelo Messina
2025-09-04 11:50:09 +02:00
parent 39aa73de63
commit ce1c523641
@@ -1809,7 +1809,7 @@ diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/th
if (ForMainFrame()) {
if (size_ != new_size) {
@@ -1966,6 +1981,8 @@ void WebFrameWidgetImpl::ApplyVisualPropertiesSizing(
@@ -1967,6 +1982,8 @@ void WebFrameWidgetImpl::ApplyVisualPropertiesSizing(
size_.value(),
widget_base_->DIPsToCeiledBlinkSpace(
widget_base_->VisibleViewportSize()),
@@ -1818,7 +1818,7 @@ diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/th
visual_properties.browser_controls_params);
return;
}
@@ -1999,6 +2016,8 @@ void WebFrameWidgetImpl::ApplyVisualPropertiesSizing(
@@ -2000,6 +2017,8 @@ void WebFrameWidgetImpl::ApplyVisualPropertiesSizing(
View()->ResizeWithBrowserControls(
size_.value(), widget_base_->VisibleViewportSize(),
@@ -1827,7 +1827,7 @@ diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/th
visual_properties.browser_controls_params);
}
@@ -2377,6 +2396,8 @@ void WebFrameWidgetImpl::SetZoomInternal(double zoom_level,
@@ -2378,6 +2397,8 @@ void WebFrameWidgetImpl::SetZoomInternal(double zoom_level,
View()->ZoomFactorForViewportLayout() *
static_cast<float>(View()->ZoomLevelToZoomFactor(zoom_level)) *
static_cast<float>(css_zoom_factor);
@@ -1836,7 +1836,7 @@ diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/th
if (zoom_changed) {
// Set the layout shift exclusion window for the zoom level change.
if (LocalFrameView* view = document->View()) {
@@ -3429,6 +3450,7 @@ void WebFrameWidgetImpl::SetRootLayer(scoped_refptr<cc::Layer> layer) {
@@ -3430,6 +3451,7 @@ void WebFrameWidgetImpl::SetRootLayer(scoped_refptr<cc::Layer> layer) {
// be needed in setting the raster scale.
SetPageScaleStateAndLimits(1.f, false /* is_pinch_gesture_active */,
View()->MinimumPageScaleFactor(),
@@ -1844,7 +1844,7 @@ diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/th
View()->MaximumPageScaleFactor());
}
@@ -4798,9 +4820,10 @@ void WebFrameWidgetImpl::SetPageScaleStateAndLimits(
@@ -4799,9 +4821,10 @@ void WebFrameWidgetImpl::SetPageScaleStateAndLimits(
float page_scale_factor,
bool is_pinch_gesture_active,
float minimum,
@@ -1856,7 +1856,7 @@ diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/th
// Only propagate page scale from the main frame.
if (ForMainFrame()) {
@@ -4924,7 +4947,10 @@ void WebFrameWidgetImpl::OrientationChanged() {
@@ -4925,7 +4948,10 @@ void WebFrameWidgetImpl::OrientationChanged() {
void WebFrameWidgetImpl::DidUpdateSurfaceAndScreen(
const display::ScreenInfos& previous_original_screen_infos) {
display::ScreenInfo screen_info = widget_base_->GetScreenInfo();
@@ -1868,7 +1868,7 @@ diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/th
if (ShouldAutoDetermineCompositingToLCDTextSetting()) {
// This causes compositing state to be modified which dirties the
@@ -5120,7 +5146,7 @@ void WebFrameWidgetImpl::SetDeviceScaleFactorForTesting(float factor) {
@@ -5121,7 +5147,7 @@ void WebFrameWidgetImpl::SetDeviceScaleFactorForTesting(float factor) {
if (!device_scale_factor_for_testing_) {
non_testing_device_scale_factor_ =
@@ -2047,8 +2047,8 @@ diff --git a/third_party/blink/renderer/platform/widget/input/input_handler_prox
case WebInputEvent::Type::kGestureScrollBegin:
- scroll_state_data.position_x = event.PositionInWidget().x();
- scroll_state_data.position_y = event.PositionInWidget().y();
+ scroll_state_data.position_x = event.PositionInWidget().x() / 2.f;
+ scroll_state_data.position_y = event.PositionInWidget().y() / 2.f;
+ scroll_state_data.position_x = ScalePoint(event.PositionInWidget()).x();
+ scroll_state_data.position_y = ScalePoint(event.PositionInWidget()).y();
scroll_state_data.delta_x_hint = -event.data.scroll_begin.delta_x_hint;
scroll_state_data.delta_y_hint = -event.data.scroll_begin.delta_y_hint;
scroll_state_data.is_beginning = true;