void checkClicked(Drawable drw, float x, float y)
 {
     if (!drw.checkPoint(x, y))
     {
         return;
     }
     //loop backward
     if (drw is CompositeDrawable)
     {
         CompositeDrawable cd = (CompositeDrawable)drw;
         //todo: apply inverse transformation
         for (int i = cd.clickables.Count - 1; i >= 0; i--)
         {
             checkClicked(cd.clickables[i], x, y);
             if (clickHandled)
             {
                 return;                                   //don't continue looping
             }
         }
     }
     //fire
     if (clickHandled)
     {
         return;
     }
     clickHandled = drw.fireClick(x, y);
 }
 void checkHovered(Drawable drw, float x, float y)
 {
     if (!drw.checkPoint(x, y))
     {
         return;
     }
     //loop backward
     if (drw is CompositeDrawable)
     {
         CompositeDrawable cd = (CompositeDrawable)drw;
         //todo: apply inverse transformation
         for (int i = cd.clickables.Count - 1; i >= 0; i--)
         {
             checkHovered(cd.clickables[i], x, y);
             if (hoverHandled)
             {
                 return;
             }
         }
     }
     //fire
     hoverHandled = drw.fireHover();
 }