Beispiel #1
0
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);
}
Beispiel #2
0
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;
          }
     }
}
Beispiel #4
0
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();
}