Esempio n. 1
0
 // 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);
 }
Esempio n. 2
0
 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);
 }