// finds the render object in the fragments' collection // (the innermost render object containing the point is found) private RenderObject FindRenderObject(RenderFragmentCollection frags, PointF pt, float dpix, float dpiy) { foreach (RenderFragment rf in frags) { RectangleD rd = rf.Document.FromRU(rf.Bounds, UnitTypeEnum.Pixel, dpix, dpiy); RectangleF rrf = new RectangleF((float)rd.X, (float)rd.Y, (float)rd.Width, (float)rd.Height); if (rrf.Contains(pt)) { if (rf.RenderObject.Children.Count > 0) { // try to go deeper pt.X -= (float)rd.Left; pt.Y -= (float)rd.Top; RenderObject child = FindRenderObject(rf.Children, pt, dpix, dpiy); if (child != null) { return(child); } } return(rf.RenderObject); } } return(null); }
private RenderText FindRenderText(RenderFragmentCollection frags, PointF pt, float dpix, float dpiy) { foreach (RenderFragment rf in frags) { RectangleD rd = rf.Document.FromRU(rf.Bounds, UnitTypeEnum.Pixel, dpix, dpiy); RectangleF rrf = new RectangleF((float)rd.X, (float)rd.Y, (float)rd.Width, (float)rd.Height); if (rrf.Contains(pt)) { if (rf.RenderObject is RenderText) { return(rf.RenderObject as RenderText); } else { pt.X -= (float)rd.Left; pt.Y -= (float)rd.Top; return(FindRenderText(rf.Children, pt, dpix, dpiy)); } } } return(null); }