Rewild Your Web
web browser dweb
at main 51 lines 2.1 kB view raw
1--- original 2+++ modified 3@@ -210,6 +210,10 @@ 4 5 /// The collector for calculating Largest Contentful Paint 6 lcp_candidate_collector: RefCell<Option<LargestContentfulPaintCandidateCollector>>, 7+ 8+ /// The current page zoom for rendering (used by embedded webviews). 9+ /// When this changes, we need to trigger a new stacking context tree build. 10+ page_zoom_for_rendering: Cell<Option<f32>>, 11 } 12 13 pub struct LayoutFactoryImpl(); 14@@ -250,12 +254,25 @@ 15 fn set_viewport_details(&mut self, viewport_details: ViewportDetails) -> bool { 16 let device = self.stylist.device_mut(); 17 let device_pixel_ratio = Scale::new(viewport_details.hidpi_scale_factor.get()); 18- if device.viewport_size() == viewport_details.size && 19- device.device_pixel_ratio() == device_pixel_ratio 20- { 21- return false; 22+ 23+ // Check if page_zoom_for_rendering changed (for embedded webviews) 24+ let zoom_changed = 25+ self.page_zoom_for_rendering.get() != viewport_details.page_zoom_for_rendering; 26+ if zoom_changed { 27+ self.page_zoom_for_rendering 28+ .set(viewport_details.page_zoom_for_rendering); 29+ // Need to rebuild stacking context tree to apply the new zoom transform 30+ self.need_new_stacking_context_tree.set(true); 31+ self.need_new_display_list.set(true); 32 } 33 34+ let size_changed = device.viewport_size() != viewport_details.size || 35+ device.device_pixel_ratio() != device_pixel_ratio; 36+ 37+ if !size_changed { 38+ return zoom_changed; 39+ } 40+ 41 device.set_viewport_size(viewport_details.size); 42 device.set_device_pixel_ratio(device_pixel_ratio); 43 self.device_has_changed = true; 44@@ -766,6 +783,7 @@ 45 previously_highlighted_dom_node: Cell::new(None), 46 lcp_candidate_collector: Default::default(), 47 user_stylesheets: config.user_stylesheets, 48+ page_zoom_for_rendering: Cell::new(config.viewport_details.page_zoom_for_rendering), 49 } 50 } 51