aboutsummaryrefslogtreecommitdiffstats
path: root/third_party/webrender/patches/001-Restore-hit-testing-api.diff
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/webrender/patches/001-Restore-hit-testing-api.diff')
-rw-r--r--third_party/webrender/patches/001-Restore-hit-testing-api.diff250
1 files changed, 0 insertions, 250 deletions
diff --git a/third_party/webrender/patches/001-Restore-hit-testing-api.diff b/third_party/webrender/patches/001-Restore-hit-testing-api.diff
deleted file mode 100644
index 0a51a9a70ea..00000000000
--- a/third_party/webrender/patches/001-Restore-hit-testing-api.diff
+++ /dev/null
@@ -1,250 +0,0 @@
-diff --git a/webrender/src/hit_test.rs b/webrender/src/hit_test.rs
-index 4a73e2158d..e095d8db0c 100644
---- a/webrender/src/hit_test.rs
-+++ b/webrender/src/hit_test.rs
-@@ -2,13 +2,14 @@
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
--use api::{BorderRadius, ClipMode, HitTestItem, HitTestResult, ItemTag, PrimitiveFlags};
-+use api::{BorderRadius, ClipMode, HitTestItem, HitTestResult, ItemTag, PrimitiveFlags, HitTestFlags};
- use api::{PipelineId, ApiHitTester, ClipId};
- use api::units::*;
- use crate::clip::{ClipItemKind, ClipStore, ClipNode, rounded_rectangle_contains_point};
- use crate::clip::{polygon_contains_point};
- use crate::prim_store::PolygonKey;
- use crate::scene_builder_thread::Interners;
-+use crate::spatial_node::SpatialNodeType;
- use crate::spatial_tree::{SpatialNodeIndex, SpatialTree};
- use crate::internal_types::{FastHashMap, FastHashSet, LayoutPrimitiveInfo};
- use std::ops;
-@@ -45,8 +46,9 @@ impl ApiHitTester for SharedHitTester {
- fn hit_test(&self,
- pipeline_id: Option<PipelineId>,
- point: WorldPoint,
-+ flags: HitTestFlags,
- ) -> HitTestResult {
-- self.get_ref().hit_test(HitTest::new(pipeline_id, point))
-+ self.get_ref().hit_test(HitTest::new(pipeline_id, point, flags))
- }
- }
-
-@@ -355,6 +357,7 @@ impl HitTester {
- self.spatial_nodes.clear();
-
- self.spatial_nodes.reserve(spatial_tree.spatial_nodes.len());
-+ self.pipeline_root_nodes.clear();
- for (index, node) in spatial_tree.spatial_nodes.iter().enumerate() {
- let index = SpatialNodeIndex::new(index);
-
-@@ -380,6 +383,8 @@ impl HitTester {
- }
-
- pub fn hit_test(&self, test: HitTest) -> HitTestResult {
-+ let point = test.get_absolute_point(self);
-+
- let mut result = HitTestResult::default();
-
- let mut current_spatial_node_index = SpatialNodeIndex::INVALID;
-@@ -402,7 +407,7 @@ impl HitTester {
- point_in_layer = scroll_node
- .world_content_transform
- .inverse()
-- .and_then(|inverted| inverted.transform_point2d(test.point));
-+ .and_then(|inverted| inverted.transform_point2d(point));
- current_spatial_node_index = item.spatial_node_index;
- }
-
-@@ -426,7 +431,7 @@ impl HitTester {
- .world_content_transform;
- let transformed_point = match transform
- .inverse()
-- .and_then(|inverted| inverted.transform_point2d(test.point))
-+ .and_then(|inverted| inverted.transform_point2d(point))
- {
- Some(point) => point,
- None => {
-@@ -457,7 +462,7 @@ impl HitTester {
- point_in_viewport = root_node
- .world_viewport_transform
- .inverse()
-- .and_then(|inverted| inverted.transform_point2d(test.point))
-+ .and_then(|inverted| inverted.transform_point2d(point))
- .map(|pt| pt - scroll_node.external_scroll_offset);
-
- current_root_spatial_node_index = root_spatial_node_index;
-@@ -470,6 +475,10 @@ impl HitTester {
- point_in_viewport,
- point_relative_to_item: point_in_layer - item.rect.origin.to_vector(),
- });
-+
-+ if !test.flags.contains(HitTestFlags::FIND_ALL) {
-+ return result;
-+ }
- }
- }
- }
-@@ -477,24 +486,51 @@ impl HitTester {
- result.items.dedup();
- result
- }
-+
-+ fn get_pipeline_root(&self, pipeline_id: PipelineId) -> &HitTestSpatialNode {
-+ &self.spatial_nodes[self.pipeline_root_nodes[&pipeline_id].0 as usize]
-+ }
-+
- }
-
- #[derive(MallocSizeOf)]
- pub struct HitTest {
- pipeline_id: Option<PipelineId>,
- point: WorldPoint,
-+ flags: HitTestFlags,
- }
-
- impl HitTest {
- pub fn new(
- pipeline_id: Option<PipelineId>,
- point: WorldPoint,
-+ flags: HitTestFlags,
- ) -> HitTest {
- HitTest {
- pipeline_id,
- point,
-+ flags
- }
- }
-+
-+ fn get_absolute_point(&self, hit_tester: &HitTester) -> WorldPoint {
-+ if !self.flags.contains(HitTestFlags::POINT_RELATIVE_TO_PIPELINE_VIEWPORT) {
-+ return self.point;
-+ }
-+
-+ let point = LayoutPoint::new(self.point.x, self.point.y);
-+ self.pipeline_id
-+ .and_then(|id|
-+ hit_tester
-+ .get_pipeline_root(id)
-+ .world_viewport_transform
-+ .transform_point2d(point)
-+ )
-+ .unwrap_or_else(|| {
-+ WorldPoint::new(self.point.x, self.point.y)
-+ })
-+ }
-+
- }
-
- /// Collect clips for a given ClipId, convert and add them to the hit testing
-diff --git a/webrender/src/render_api.rs b/webrender/src/render_api.rs
-index b84fa2c63a..b2c8a64e88 100644
---- a/webrender/src/render_api.rs
-+++ b/webrender/src/render_api.rs
-@@ -10,6 +10,7 @@ use std::marker::PhantomData;
- use std::path::PathBuf;
- use std::sync::Arc;
- use std::u32;
-+use api::HitTestFlags;
- use time::precise_time_ns;
- //use crate::api::peek_poke::PeekPoke;
- use crate::api::channel::{Sender, single_msg_channel, unbounded_channel};
-@@ -812,7 +813,7 @@ pub enum FrameMsg {
- ///
- UpdateEpoch(PipelineId, Epoch),
- ///
-- HitTest(Option<PipelineId>, WorldPoint, Sender<HitTestResult>),
-+ HitTest(Option<PipelineId>, WorldPoint, HitTestFlags, Sender<HitTestResult>),
- ///
- RequestHitTester(Sender<Arc<dyn ApiHitTester>>),
- ///
-@@ -1297,12 +1298,13 @@ impl RenderApi {
- document_id: DocumentId,
- pipeline_id: Option<PipelineId>,
- point: WorldPoint,
-+ flags: HitTestFlags,
- ) -> HitTestResult {
- let (tx, rx) = single_msg_channel();
-
- self.send_frame_msg(
- document_id,
-- FrameMsg::HitTest(pipeline_id, point, tx)
-+ FrameMsg::HitTest(pipeline_id, point, flags, tx)
- );
- rx.recv().unwrap()
- }
-diff --git a/webrender/src/render_backend.rs b/webrender/src/render_backend.rs
-index 96bc600484..825e981b5c 100644
---- a/webrender/src/render_backend.rs
-+++ b/webrender/src/render_backend.rs
-@@ -535,14 +535,14 @@ impl Document {
- FrameMsg::UpdateEpoch(pipeline_id, epoch) => {
- self.scene.pipeline_epochs.insert(pipeline_id, epoch);
- }
-- FrameMsg::HitTest(pipeline_id, point, tx) => {
-+ FrameMsg::HitTest(pipeline_id, point, flags, tx) => {
- if !self.hit_tester_is_valid {
- self.rebuild_hit_tester();
- }
-
- let result = match self.hit_tester {
- Some(ref hit_tester) => {
-- hit_tester.hit_test(HitTest::new(pipeline_id, point))
-+ hit_tester.hit_test(HitTest::new(pipeline_id, point, flags))
- }
- None => HitTestResult { items: Vec::new() },
- };
-diff --git a/webrender_api/src/lib.rs b/webrender_api/src/lib.rs
-index 7dc887ade9..b0446c1d0b 100644
---- a/webrender_api/src/lib.rs
-+++ b/webrender_api/src/lib.rs
-@@ -278,7 +278,7 @@ pub trait ApiHitTester: Send + Sync {
- /// hit results so that only items inside that pipeline are matched. The vector
- /// of hit results will contain all display items that match, ordered from
- /// front to back.
-- fn hit_test(&self, pipeline_id: Option<PipelineId>, point: WorldPoint) -> HitTestResult;
-+ fn hit_test(&self, pipeline_id: Option<PipelineId>, point: WorldPoint, flags: HitTestFlags) -> HitTestResult;
- }
-
- /// A hit tester requested to the render backend thread but not necessarily ready yet.
-@@ -322,6 +322,17 @@ pub struct HitTestResult {
- pub items: Vec<HitTestItem>,
- }
-
-+bitflags! {
-+ #[derive(Deserialize, MallocSizeOf, Serialize)]
-+ ///
-+ pub struct HitTestFlags: u8 {
-+ ///
-+ const FIND_ALL = 0b00000001;
-+ ///
-+ const POINT_RELATIVE_TO_PIPELINE_VIEWPORT = 0b00000010;
-+ }
-+}
-+
- impl Drop for NotificationRequest {
- fn drop(&mut self) {
- if let Some(ref mut handler) = self.handler {
-diff --git a/wrench/src/main.rs b/wrench/src/main.rs
-index 7dc037ebb2..843512f595 100644
---- a/wrench/src/main.rs
-+++ b/wrench/src/main.rs
-@@ -965,6 +965,7 @@ fn render<'a>(
- wrench.document_id,
- None,
- cursor_position,
-+ HitTestFlags::empty(),
- );
-
- println!("Hit test results:");
-diff --git a/wrench/src/rawtest.rs b/wrench/src/rawtest.rs
-index 580f1cb015..b86b583617 100644
---- a/wrench/src/rawtest.rs
-+++ b/wrench/src/rawtest.rs
-@@ -1393,6 +1393,7 @@ impl<'a> RawtestHarness<'a> {
- self.wrench.document_id,
- None,
- point,
-+ HitTetFlags::empty(),
- )
- };
-