EAPI void eina_matrix3_rectangle_transform(const Eina_Matrix3 *m, const Eina_Rectangle *r, const Eina_Quad *q) { eina_matrix3_point_transform(m, r->x, r->y, &((Eina_Quad *)q)->x0, &((Eina_Quad *)q)->y0); eina_matrix3_point_transform(m, r->x + r->w, r->y, &((Eina_Quad *)q)->x1, &((Eina_Quad *)q)->y1); eina_matrix3_point_transform(m, r->x + r->w, r->y + r->h, &((Eina_Quad *)q)->x2, &((Eina_Quad *)q)->y2); eina_matrix3_point_transform(m, r->x, r->y + r->h, &((Eina_Quad *)q)->x3, &((Eina_Quad *)q)->y3); }
END_TEST START_TEST(eina_matrix3_map_transform) { double x = 2, y = 3, x1, y1; Eina_Matrix3 m; Eina_Rectangle r; Eina_Quad q; Eina_Bool ret; eina_init(); eina_matrix3_values_set(&m, 0, 1, 0, 1, 0, 0, 0, 0, 1); eina_matrix3_point_transform(&m, x, y, &x1, &y1); fail_if(x1 != 3 || y1 != 2); EINA_RECTANGLE_SET(&r, 0, 0, 3, 4); eina_matrix3_rectangle_transform(&m, &r, &q); fail_if(q.x0 != 0 || q.y0 != 0 || q.x1 != 0 || q.y1 != 3 || q.x2 != 4 || q.y2 != 3 || q.x3 != 4 || q.y3 != 0); eina_quad_coords_set(&q, 0.0, 0.0, 3.0, 0.0, 3.0, 3.0, 0.0, 3.0); ret = eina_matrix3_square_quad_map(&m, &q); fail_if(ret != EINA_TRUE); fail_if(m.xx != 3 || m.xy != 0 || m.xz != 0 || m.yx != 0 || m.yy != 3 || m.yz != 0 || m.zx != 0 || m.zy != 0 || m.zz != 1); ret = eina_matrix3_quad_square_map(&m, &q); fail_if(ret != EINA_TRUE); fail_if(q.x0 != 0 || q.y0 != 0 || q.x1 != 3 || q.y1 != 0 || q.x2 != 3 || q.y2 != 3 || q.x3 != 0 || q.y3 != 3); eina_shutdown(); }
static void _outline_transform(Outline *outline, Eina_Matrix3 *m) { int i; SW_FT_Outline *ft_outline = &outline->ft_outline; if (m) { double x, y; for (i = 0; i < ft_outline->n_points; i++) { eina_matrix3_point_transform(m, ft_outline->points[i].x, ft_outline->points[i].y, &x, &y); ft_outline->points[i].x = (int)(x * 64);// to freetype 26.6 coordinate. ft_outline->points[i].y = (int)(y * 64); } } else { for (i = 0; i < ft_outline->n_points; i++) { ft_outline->points[i].x = ft_outline->points[i].x <<6;// to freetype 26.6 coordinate. ft_outline->points[i].y = ft_outline->points[i].y <<6; } } }
END_TEST START_TEST(eina_matrix3_map_transform) { double x = 2, y = 3, x1, y1; Eina_Matrix3 m; Eina_Rectangle r; Eina_Quad q; Eina_Bool ret; eina_init(); eina_matrix3_values_set(&m, 0, 1, 0, 1, 0, 0, 0, 0, 1); eina_matrix3_point_transform(&m, x, y, &x1, &y1); fail_if(!EINA_DBL_EQ(x1, 3) || !EINA_DBL_EQ(y1, 2)); EINA_RECTANGLE_SET(&r, 0, 0, 3, 4); eina_matrix3_rectangle_transform(&m, &r, &q); fail_if(!EINA_DBL_EQ(q.x0, 0) || !EINA_DBL_EQ(q.y0, 0) || !EINA_DBL_EQ(q.x1, 0) || !EINA_DBL_EQ(q.y1, 3) || !EINA_DBL_EQ(q.x2, 4) || !EINA_DBL_EQ(q.y2, 3) || !EINA_DBL_EQ(q.x3, 4) || !EINA_DBL_EQ(q.y3, 0)); eina_quad_coords_set(&q, 0.0, 0.0, 3.0, 0.0, 3.0, 3.0, 0.0, 3.0); ret = eina_matrix3_square_quad_map(&m, &q); fail_if(ret != EINA_TRUE); fail_if(!MATRIX3_CMP(m.xx, m.xy, m.xz, m.yx, m.yy, m.yz, m.zx, m.zy, m.zz, 3, 0, 0, 0, 3, 0, 0, 0, 1)); ret = eina_matrix3_quad_square_map(&m, &q); fail_if(ret != EINA_TRUE); fail_if(!EINA_DBL_EQ(q.x0, 0) || !EINA_DBL_EQ(q.y0, 0) || !EINA_DBL_EQ(q.x1, 3) || !EINA_DBL_EQ(q.y1, 0) || !EINA_DBL_EQ(q.x2, 3) || !EINA_DBL_EQ(q.y2, 3) || !EINA_DBL_EQ(q.x3, 0) || !EINA_DBL_EQ(q.y3, 3)); eina_shutdown(); }