From 2a0be451aeb3a3fe184c9cf8c6ae44058044009b Mon Sep 17 00:00:00 2001 From: pylbrecht Date: Sun, 25 Aug 2019 15:44:35 +0200 Subject: [PATCH] Implement Path::contains_point() --- components/canvas/raqote_backend.rs | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/components/canvas/raqote_backend.rs b/components/canvas/raqote_backend.rs index 279402fa77a..b5bcf100b60 100644 --- a/components/canvas/raqote_backend.rs +++ b/components/canvas/raqote_backend.rs @@ -11,6 +11,7 @@ use crate::canvas_paint_thread::AntialiasMode; use canvas_traits::canvas::*; use cssparser::RGBA; use euclid::default::{Point2D, Rect, Size2D, Transform2D, Vector2D}; +use raqote::PathOp; use std::marker::PhantomData; pub struct RaqoteBackend; @@ -183,8 +184,28 @@ impl Path { unimplemented!() } - pub fn contains_point(&self, _x: f64, _y: f64, _path_transform: &Transform2D) -> bool { - unimplemented!() + pub fn contains_point(&self, x: f64, y: f64, _path_transform: &Transform2D) -> bool { + for op in self.as_raqote().ops.iter() { + match op { + PathOp::MoveTo(point) | PathOp::LineTo(point) => { + if point.x as f64 == x && point.y as f64 == y { + return true; + } + }, + PathOp::QuadTo(_, point) => { + if point.x as f64 == x && point.y as f64 == y { + return true; + } + }, + PathOp::CubicTo(_, _, point) => { + if point.x as f64 == x && point.y as f64 == y { + return true; + } + }, + _ => {}, + } + } + false } pub fn copy_to_builder(&self) -> Box {