Evas polygon: Fix polygon is_inside calculation.

SVN revision: 60721
This commit is contained in:
Tom Hacohen 2011-06-27 05:31:07 +00:00
parent df97b91f09
commit fa78e73f6b
1 changed files with 12 additions and 7 deletions

View File

@ -525,13 +525,18 @@ evas_object_polygon_is_inside(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
p_next = eina_list_data_get(o->points);
}
line_y = ((double) (p->y - p_next->y) / (double) (p->x - p_next->x)) *
(x - p_next->x) + p_next->y;
/* We crossed that edge if the line is directly above us */
if ((line_y < y) &&
(((p->x < p_next->x) && (p->x <= x) && (x <= p_next->x)) ||
((p->x > p_next->x) && (p_next->x <= x) && (x <= p->x))))
num_edges++;
/* This only works if this condition is true */
if ((x != p_next->x) && (p->x != p_next->x))
{
line_y = ((double) (p->y - p_next->y) /
(double) (p->x - p_next->x)) *
(x - p_next->x) + p_next->y;
/* We crossed that edge if the line is directly above us */
if ((line_y < y) &&
(((p->x < p_next->x) && (p->x <= x) && (x <= p_next->x)) ||
((p->x > p_next->x) && (p_next->x <= x) && (x <= p->x))))
num_edges++;
}
}
/* Return true if num_edges is odd */